Feed RSS podcastu

3 Grudnia 2019

Tydzień temu pisałem o tym jak stworzyć podcast i zabrakło tam ważnej informacji odnośnie tego jak rozpisać plik RSS. Będę posługiwał się notacją dla silnika Jekyll.

Na początku wrzucamy Front Matter, czyli blok YAML w ---, bo bez tego Jekyll nie przetwarza plików.

---
layout:
---

Następnie header XML i RSS. W nagłówku RSS zawrzemy m.in. namespace iTunes.

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
    xmlns:media="http://search.yahoo.com/mrss/">

Następnie podajemy informacje o kanale takie jak tytuł, opis, link do strony, język, informacje o copyright, etc. Używane tutaj zmienne są określone w pliku _config.yml w głównym katalogu strony.

    <channel>
        <title>{{site.title}}</title>
        <description>{{site.description}}</description>
        <link>{{site.base_url}}</link>
        <atom:link href="{{site.base_url}}/feed.xml" rel="self" type="application/rss+xml" />
        <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
        <sy:updatePeriod>hourly</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>
        <language>pl</language>
        <copyright>© 2019 {{ site.author.name }}</copyright>
        <managingEditor>{{site.author.email}} ({{ site.author.name }})</managingEditor>
        <webMaster>{{site.author.email}} ({{ site.author.name }})</webMaster>

Powtarzamy część informacji specjalnie dla systemu iTunes. Na stronie Feed for all znajdziemy dokładny opis wszystkich tych elementów.

        <itunes:new-feed-url>{{site.base_url}}/feed.xml</itunes:new-feed-url>
        <itunes:keywords></itunes:keywords>
        <itunes:category text="Leisure" />
        <itunes:author>{{site.author.name}}</itunes:author>
        <itunes:owner>
            <itunes:name>{{site.author.name}}</itunes:name>
            <itunes:email>{{site.author.email}}</itunes:email>
        </itunes:owner>
        <itunes:type>episodic</itunes:type>
        <itunes:block>no</itunes:block>
        <itunes:explicit>no</itunes:explicit>
        <itunes:image href="{{site.base_url}}/po_dobranocce_itunes.jpg" />

Następnie dla każdego odcinka robimy tag <item>. Jeśli mamy content HTML to owijamy go w <![CDATA[]]>. Tag <enclosure> opisuje plik audio, na który wskazujemy. Tutaj, żeby iterować się po kategorii, to utworzyłem folder episodes w którym umieściłem folder _posts.

        {% for episode in site.categories.episodes %}
        <item>
            <link>{{site.base_url}}{{ episode.url }}</link>
            <title>{{ episode.title }}</title>
            <pubDate>{{ episode.date | date_to_rfc822 }}</pubDate>
            <description><![CDATA[{{ episode.content}}]]></description>

            <enclosure url="{{ episode.audio_link | xml_escape }}" type="audio/mpeg" />

Potem mamy kolejne tagi iTunes per odcinek. <itunes:subtitle> to krótki opis, a <itunes:summary> lub <description> to długi opis.

            <itunes:episode>{{ episode.number }}</itunes:episode>
            <itunes:author>{{site.author.name}}</itunes:author>
            <itunes:image href="{{ site.base_url }}{{episode.img_src }}" />
            <itunes:duration>{{ episode.duration }}</itunes:duration>
            <itunes:keywords>{{ episode.tags | join:', ' }}</itunes:keywords>
            <itunes:subtitle>{{ episode.content | strip_html | xml_escape }}</itunes:subtitle>
            <content:encoded><![CDATA[{{ episode.content}}]]></content:encoded>

Na koniec zamykamy nasze tagi.

        </item>
        {% endfor %}
    </channel>
</rss>