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>