2022-03-08 Fred Gleason <fredg@paravelsystems.com>

* Added a 'direct' namespace to the 'Apple iTunes' and
	'Apple iTunes + Superfeed' RSS schemas.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2022-03-08 15:22:35 -05:00
parent 9123bf420a
commit c8db6bdb8c
6 changed files with 158 additions and 10 deletions

2
.gitignore vendored
View File

@ -35,6 +35,8 @@ configure
depcomp
docs/apis/*.html
docs/apis/*.pdf
docs/dtds/direct.html
docs/dtds/direct.pdf
docs/dtds/superfeed.html
docs/dtds/superfeed.pdf
docs/opsguide/*.html

View File

@ -20856,3 +20856,6 @@
2022-03-04 Fred Gleason <fredg@paravelsystems.com>
* Modified the 'RDCart::setSchedCodesList()' so as to normalize
the case of scheduler codes.
2022-03-08 Fred Gleason <fredg@paravelsystems.com>
* Added a 'direct' namespace to the 'Apple iTunes' and
'Apple iTunes + Superfeed' RSS schemas.

View File

@ -2,7 +2,7 @@
##
## docs/dtds/Makefile.am for Rivendell
##
## (C) Copyright 2020 Fred Gleason <fredg@paravelsystems.com>
## (C) Copyright 2020-2022 Fred Gleason <fredg@paravelsystems.com>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License version 2 as
@ -27,10 +27,15 @@
%.pdf: %.xml
xsltproc $(DOCBOOK_STYLESHEETS)/fo/docbook.xsl $< | fop - -pdf $@
all-local: superfeed.html\
all-local: direct.html\
direct.pdf\
superfeed.html\
superfeed.pdf
EXTRA_DIST = superfeed.html\
EXTRA_DIST = direct.html\
direct.pdf\
direct.xml\
superfeed.html\
superfeed.pdf\
superfeed.xml

132
docs/dtds/direct.xml Normal file
View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0">
<info>
<title>The Rivendell &quot;direct&quot; Namespace</title>
<subtitle>Version 0.1</subtitle>
<revnumber>v0.1</revnumber>
<author>
<personname>
<firstname>Fred</firstname>
<surname>Gleason</surname>
<email>fredg@paravelsystems.com</email>
</personname>
</author>
<edition>
v0.1
</edition>
<copyright><year>2022</year><holder>Fred Gleason</holder></copyright>
<legalnotice>
<para>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
</para>
</legalnotice>
</info>
<sect1 xml:id="overview">
<title>Overview</title>
<para>
The &quot;direct&quot; XML namespace adds fields for enabling
interoperation with the Imogen Direct DAM system.
</para>
</sect1>
<sect1 xml:id="namespace_declaration">
<title>Namespace Declaration</title>
<para>
The namespace declaration is:
</para>
<para>
<code>xmlns:direct=&quot;http://www.rivendellaudio.org/dtds/direct-0.1.dtd&quot;</code>
</para>
</sect1>
<sect1 xml:id="fields">
<title>Fields</title>
<para>
The namespace adds the following fields:
</para>
<variablelist>
<varlistentry>
<term>
<code>&lt;direct:pubDate&gt;</code>
</term>
<listitem>
<para>
The value of the RSS-standard <code>&lt;pubDate&gt;</code> field
from the <code>&lt;channel&gt;</code> and
<code>&lt;item&gt;</code> sections of the feed data, expressed
xs:dateTime format.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 xml:id="example">
<title>Example</title>
<para>
The following is an example illustrating the use of the namespace:
</para>
<literallayout>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:superfeed="http://www.rivendellaudio.org/dtds/superfeed-0.1.dtd" xmlns:direct="http://www.rivendellaudio.org/dtds/direct-0.1.dtd"&gt;
&lt;channel&gt;
&lt;title&gt;Feed2&lt;/title&gt;
&lt;description&gt;This is Feed2&lt;/description&gt;
&lt;itunes:summary&gt;This is Feed2&lt;/itunes:summary&gt;
&lt;category&gt;Arts&lt;/category&gt;
&lt;link&gt;&lt;/link&gt;
&lt;language&gt;en-us&lt;/language&gt;
&lt;copyright&gt;&lt;/copyright&gt;
&lt;lastBuildDate&gt;Tue, 8 Mar 2022 19:26:13 GMT&lt;/lastBuildDate&gt;
&lt;pubDate&gt;Mon, 12 Jul 2021 14:24:21 GMT&lt;/pubDate&gt;
&lt;direct:pubDate&gt;2021-07-12T14:24:21+00:00&lt;/direct:pubDate&gt;
&lt;managingEditor&gt;Fred Gleason &lt;fredg@paravelsystems.com&gt;&lt;/managingEditor&gt;
&lt;webMaster&gt;Fred Gleason &lt;fredg@paravelsystems.com&gt;&lt;/webMaster&gt;
&lt;generator&gt;Rivendell 4.0.0beta3&lt;/generator&gt;
&lt;image&gt;
&lt;url&gt;http://192.168.21.21/podcasts/feed2/img000009_000002.jpg&lt;/url&gt;
&lt;title&gt;Feed2&lt;/title&gt;
&lt;link&gt;&lt;/link&gt;
&lt;width&gt;3000&lt;/width&gt;
&lt;height&gt;3000&lt;/height&gt;
&lt;description&gt;Imported from /home/fredg/RFA/ENG/EYES.jpg&lt;/description&gt;
&lt;/image&gt;
&lt;atom:link href="http://192.168.21.21/podcasts/feed2/Feed2.rss" rel="self" type="application/rss+xml" /&gt;
&lt;itunes:author&gt;Fred Gleason &lt;fredg@paravelsystems.com&gt;&lt;/itunes:author&gt;
&lt;itunes:type&gt;episodic&lt;/itunes:type&gt;
&lt;itunes:owner&gt;
&lt;itunes:name&gt;Fred Gleason&lt;/itunes:name&gt;
&lt;itunes:email&gt;fredg@paravelsystems.com&lt;/itunes:email&gt;
&lt;/itunes:owner&gt;
&lt;itunes:image href="http://192.168.21.21/podcasts/feed2/img000009_000002.jpg" /&gt;
&lt;itunes:category text="Arts"&gt;
&lt;itunes:category text="Books" /&gt;
&lt;/itunes:category&gt;
&lt;itunes:explicit&gt;false&lt;/itunes:explicit&gt;
&lt;item&gt;
&lt;title&gt;Test Tone&lt;/title&gt;
&lt;itunes:title&gt;Test Tone&lt;/itunes:title&gt;
&lt;link&gt;&lt;/link&gt;
&lt;guid isPermaLink="false"&gt;http://192.168.21.21/podcasts/feed2/000009_000071.mp3_000009_000071&lt;/guid&gt;
&lt;description&gt;An example item.&lt;/description&gt;
&lt;itunes:summary&gt;An example item.&lt;/itunes:summary&gt;
&lt;author&gt;&lt;/author&gt;
&lt;itunes:author&gt;&lt;/itunes:author&gt;
&lt;comments&gt;&lt;/comments&gt;
&lt;source url="http://192.168.21.21/podcasts/feed2/Feed2"&gt;Feed2&lt;/source&gt;
&lt;enclosure url="http://192.168.21.21/podcasts/feed2/000009_000071.mp3" length="60696" type="audio/mpeg" /&gt;
&lt;category&gt;Arts&lt;/category&gt;
&lt;pubDate&gt;Tue, 8 Mar 2022 19:22:43 GMT&lt;/pubDate&gt;
&lt;direct:pubDate&gt;2022-03-08T19:22:43+00:00&lt;/direct:pubDate&gt;
&lt;itunes:duration&gt;10&lt;/itunes:duration&gt;
&lt;itunes:image href="http://192.168.21.21/podcasts/feed2/img000009_000002.jpg" /&gt;
&lt;itunes:explicit&gt;false&lt;/itunes:explicit&gt;
&lt;/item&gt;
&lt;/channel&gt;
&lt;/rss&gt;
</literallayout>
</sect1>
</article>

View File

@ -2,7 +2,7 @@
//
// Abstract a Rivendell RSS Feed
//
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2022 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -2021,6 +2021,9 @@ QString RDFeed::ResolveChannelWildcards(const QString &tmplt,RDSqlQuery *chan_q,
toString("ddd, d MMM yyyy hh:mm:ss ")+"GMT");
ret.replace("%PUBLISH_DATE%",RDLocalToUtc(chan_q->value(13).toDateTime()).
toString("ddd, d MMM yyyy hh:mm:ss ")+"GMT");
ret.replace("%DIRECT_PUBLISH_DATE%",
RDLocalToUtc(chan_q->value(13).toDateTime()).
toString("yyyy-MM-ddThh:mm:ss+00:00"));
ret.replace("%GENERATOR%",QString("Rivendell ")+VERSION);
ret.replace("%FEED_URL%",RDXmlEscape(chan_q->value(17).toString())+"/"+
RDXmlEscape(keyName()+"."+RD_RSS_XML_FILE_EXTENSION));
@ -2075,6 +2078,9 @@ QString RDFeed::ResolveItemWildcards(const QString &tmplt,RDSqlQuery *item_q,
ret.replace("%ITEM_PUBLISH_DATE%",
RDLocalToUtc(item_q->value(13).toDateTime()).
toString("ddd, d MMM yyyy hh:mm:ss ")+"GMT");
ret.replace("%ITEM_DIRECT_PUBLISH_DATE%",
RDLocalToUtc(item_q->value(13).toDateTime()).
toString("yyyy-MM-ddThh:mm:ss+00:00"));
ret.replace("%ITEM_GUID%",RDPodcast::guid(item_q->value(15).toString(),
item_q->value(10).toString(),
item_q->value(0).toUInt(),

View File

@ -60,10 +60,10 @@ RDRssSchemas::RDRssSchemas()
c_header_templates.push_back("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">");
// AppleSchema
c_header_templates.push_back("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:atom=\"http://www.w3.org/2005/Atom\">");
c_header_templates.push_back("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:direct=\"http://www.rivendellaudio.org/dtds/direct-0.1.dtd\">");
// AppleSuperfeedSchema
c_header_templates.push_back("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:superfeed=\"http://www.rivendellaudio.org/dtds/superfeed-0.1.dtd\">");
c_header_templates.push_back("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:superfeed=\"http://www.rivendellaudio.org/dtds/superfeed-0.1.dtd\"> xmlns:direct=\"http://www.rivendellaudio.org/dtds/direct-0.1.dtd\">");
//
// Channel Templates
@ -75,10 +75,10 @@ RDRssSchemas::RDRssSchemas()
c_channel_templates.push_back("<title>%TITLE%</title>\n<description>%DESCRIPTION%</description>\n<category>%CATEGORY%</category>\n<link>%LINK%</link>\n<language>%LANGUAGE%</language>\n<copyright>%COPYRIGHT%</copyright>\n<lastBuildDate>%BUILD_DATE%</lastBuildDate>\n<pubDate>%PUBLISH_DATE%</pubDate>\n<managingEditor>%EDITOR%</managingEditor>\n<webMaster>%WEBMASTER%</webMaster>\n<generator>%GENERATOR%</generator>\n<image>\n <url>%IMAGE_URL%</url>\n <title>%TITLE%</title>\n <link>%LINK%</link>\n <width>%IMAGE_WIDTH%</width>\n <height>%IMAGE_HEIGHT%</height>\n <description>%IMAGE_DESCRIPTION%</description>\n</image>\n<atom:link href=\"%FEED_URL%\" rel=\"self\" type=\"application/rss+xml\" />");
// AppleSchema
c_channel_templates.push_back("<title>%TITLE%</title>\n<description>%DESCRIPTION%</description>\n<itunes:summary>%DESCRIPTION%</itunes:summary>\n<category>%CATEGORY%</category>\n<link>%LINK%</link>\n<language>%LANGUAGE%</language>\n<copyright>%COPYRIGHT%</copyright>\n<lastBuildDate>%BUILD_DATE%</lastBuildDate>\n<pubDate>%PUBLISH_DATE%</pubDate>\n<managingEditor>%EDITOR%</managingEditor>\n<webMaster>%WEBMASTER%</webMaster>\n<generator>%GENERATOR%</generator>\n<image>\n <url>%IMAGE_URL%</url>\n <title>%TITLE%</title>\n <link>%LINK%</link>\n <width>%IMAGE_WIDTH%</width>\n <height>%IMAGE_HEIGHT%</height>\n <description>%IMAGE_DESCRIPTION%</description>\n</image>\n<atom:link href=\"%FEED_URL%\" rel=\"self\" type=\"application/rss+xml\" />\n<itunes:author>%AUTHOR%</itunes:author>\n<itunes:type>episodic</itunes:type>\n<itunes:owner>\n <itunes:name>%OWNER_NAME%</itunes:name>\n <itunes:email>%OWNER_EMAIL%</itunes:email>\n</itunes:owner>\n<itunes:image href=\"%IMAGE_URL%\" />\n%ITUNES_CATEGORY%\n<itunes:explicit>%EXPLICIT%</itunes:explicit>");
c_channel_templates.push_back("<title>%TITLE%</title>\n<description>%DESCRIPTION%</description>\n<itunes:summary>%DESCRIPTION%</itunes:summary>\n<category>%CATEGORY%</category>\n<link>%LINK%</link>\n<language>%LANGUAGE%</language>\n<copyright>%COPYRIGHT%</copyright>\n<lastBuildDate>%BUILD_DATE%</lastBuildDate>\n<pubDate>%PUBLISH_DATE%</pubDate>\n<direct:pubDate>%DIRECT_PUBLISH_DATE%</direct:pubDate>\n<managingEditor>%EDITOR%</managingEditor>\n<webMaster>%WEBMASTER%</webMaster>\n<generator>%GENERATOR%</generator>\n<image>\n <url>%IMAGE_URL%</url>\n <title>%TITLE%</title>\n <link>%LINK%</link>\n <width>%IMAGE_WIDTH%</width>\n <height>%IMAGE_HEIGHT%</height>\n <description>%IMAGE_DESCRIPTION%</description>\n</image>\n<atom:link href=\"%FEED_URL%\" rel=\"self\" type=\"application/rss+xml\" />\n<itunes:author>%AUTHOR%</itunes:author>\n<itunes:type>episodic</itunes:type>\n<itunes:owner>\n <itunes:name>%OWNER_NAME%</itunes:name>\n <itunes:email>%OWNER_EMAIL%</itunes:email>\n</itunes:owner>\n<itunes:image href=\"%IMAGE_URL%\" />\n%ITUNES_CATEGORY%\n<itunes:explicit>%EXPLICIT%</itunes:explicit>");
// AppleSuperfeedSchema
c_channel_templates.push_back("<title>%TITLE%</title>\n<description>%DESCRIPTION%</description>\n<itunes:summary>%DESCRIPTION%</itunes:summary>\n<category>%CATEGORY%</category>\n<link>%LINK%</link>\n<language>%LANGUAGE%</language>\n<copyright>%COPYRIGHT%</copyright>\n<lastBuildDate>%BUILD_DATE%</lastBuildDate>\n<pubDate>%PUBLISH_DATE%</pubDate>\n<managingEditor>%EDITOR%</managingEditor>\n<webMaster>%WEBMASTER%</webMaster>\n<generator>%GENERATOR%</generator>\n<image>\n <url>%IMAGE_URL%</url>\n <title>%TITLE%</title>\n <link>%LINK%</link>\n <width>%IMAGE_WIDTH%</width>\n <height>%IMAGE_HEIGHT%</height>\n <description>%IMAGE_DESCRIPTION%</description>\n</image>\n<atom:link href=\"%FEED_URL%\" rel=\"self\" type=\"application/rss+xml\" />\n<itunes:author>%AUTHOR%</itunes:author>\n<itunes:type>episodic</itunes:type>\n<itunes:owner>\n <itunes:name>%OWNER_NAME%</itunes:name>\n <itunes:email>%OWNER_EMAIL%</itunes:email>\n</itunes:owner>\n<itunes:image href=\"%IMAGE_URL%\" />\n%ITUNES_CATEGORY%\n<itunes:explicit>%EXPLICIT%</itunes:explicit>");
c_channel_templates.push_back("<title>%TITLE%</title>\n<description>%DESCRIPTION%</description>\n<itunes:summary>%DESCRIPTION%</itunes:summary>\n<category>%CATEGORY%</category>\n<link>%LINK%</link>\n<language>%LANGUAGE%</language>\n<copyright>%COPYRIGHT%</copyright>\n<lastBuildDate>%BUILD_DATE%</lastBuildDate>\n<pubDate>%PUBLISH_DATE%</pubDate>\n<direct:pubDate>%DIRECT_PUBLISH_DATE%</direct:pubDate>\n<managingEditor>%EDITOR%</managingEditor>\n<webMaster>%WEBMASTER%</webMaster>\n<generator>%GENERATOR%</generator>\n<image>\n <url>%IMAGE_URL%</url>\n <title>%TITLE%</title>\n <link>%LINK%</link>\n <width>%IMAGE_WIDTH%</width>\n <height>%IMAGE_HEIGHT%</height>\n <description>%IMAGE_DESCRIPTION%</description>\n</image>\n<atom:link href=\"%FEED_URL%\" rel=\"self\" type=\"application/rss+xml\" />\n<itunes:author>%AUTHOR%</itunes:author>\n<itunes:type>episodic</itunes:type>\n<itunes:owner>\n <itunes:name>%OWNER_NAME%</itunes:name>\n <itunes:email>%OWNER_EMAIL%</itunes:email>\n</itunes:owner>\n<itunes:image href=\"%IMAGE_URL%\" />\n%ITUNES_CATEGORY%\n<itunes:explicit>%EXPLICIT%</itunes:explicit>");
//
@ -155,10 +155,10 @@ RDRssSchemas::RDRssSchemas()
c_item_templates.push_back("<title>%ITEM_TITLE%</title>\n<link>%ITEM_LINK%</link>\n<guid isPermaLink=\"false\">%ITEM_GUID%</guid>\n<description>%ITEM_DESCRIPTION%</description>\n<author>%ITEM_AUTHOR%</author>\n<comments>%ITEM_COMMENTS%</comments>\n<source url=\"%ITEM_SOURCE_URL%\">%ITEM_SOURCE_TEXT%</source>\n<enclosure url=\"%ITEM_AUDIO_URL%\" length=\"%ITEM_AUDIO_LENGTH%\" type=\"audio/mpeg\" />\n<category>%ITEM_CATEGORY%</category>\n<pubDate>%ITEM_PUBLISH_DATE%</pubDate>");
// AppleSchema
c_item_templates.push_back("<title>%ITEM_TITLE%</title>\n<itunes:title>%ITEM_TITLE%</itunes:title>\n<link>%ITEM_LINK%</link>\n<guid isPermaLink=\"false\">%ITEM_GUID%</guid>\n<description>%ITEM_DESCRIPTION%</description>\n<itunes:summary>%ITEM_DESCRIPTION%</itunes:summary>\n<author>%ITEM_AUTHOR%</author>\n<itunes:author>%ITEM_AUTHOR%</itunes:author>\n<comments>%ITEM_COMMENTS%</comments>\n<source url=\"%ITEM_SOURCE_URL%\">%ITEM_SOURCE_TEXT%</source>\n<enclosure url=\"%ITEM_AUDIO_URL%\" length=\"%ITEM_AUDIO_LENGTH%\" type=\"audio/mpeg\" />\n<category>%ITEM_CATEGORY%</category>\n<pubDate>%ITEM_PUBLISH_DATE%</pubDate>\n<itunes:duration>%ITEM_AUDIO_SECONDS%</itunes:duration>\n<itunes:image href=\"%ITEM_IMAGE_URL%\" />\n<itunes:explicit>%ITEM_EXPLICIT%</itunes:explicit>");
c_item_templates.push_back("<title>%ITEM_TITLE%</title>\n<itunes:title>%ITEM_TITLE%</itunes:title>\n<link>%ITEM_LINK%</link>\n<guid isPermaLink=\"false\">%ITEM_GUID%</guid>\n<description>%ITEM_DESCRIPTION%</description>\n<itunes:summary>%ITEM_DESCRIPTION%</itunes:summary>\n<author>%ITEM_AUTHOR%</author>\n<itunes:author>%ITEM_AUTHOR%</itunes:author>\n<comments>%ITEM_COMMENTS%</comments>\n<source url=\"%ITEM_SOURCE_URL%\">%ITEM_SOURCE_TEXT%</source>\n<enclosure url=\"%ITEM_AUDIO_URL%\" length=\"%ITEM_AUDIO_LENGTH%\" type=\"audio/mpeg\" />\n<category>%ITEM_CATEGORY%</category>\n<pubDate>%ITEM_PUBLISH_DATE%</pubDate>\n<direct:pubDate>%ITEM_DIRECT_PUBLISH_DATE%</direct:pubDate>\n<itunes:duration>%ITEM_AUDIO_SECONDS%</itunes:duration>\n<itunes:image href=\"%ITEM_IMAGE_URL%\" />\n<itunes:explicit>%ITEM_EXPLICIT%</itunes:explicit>");
// AppleSuperfeedSchema
c_item_templates.push_back("<superfeed:channelTitle>%ITEM_CHANNEL_TITLE%</superfeed:channelTitle>\n<superfeed:channelDescription>%ITEM_CHANNEL_DESCRIPTION%</superfeed:channelDescription>\n<title>%ITEM_TITLE%</title>\n<itunes:title>%ITEM_TITLE%</itunes:title>\n<link>%ITEM_LINK%</link>\n<guid isPermaLink=\"false\">%ITEM_GUID%</guid>\n<description>%ITEM_DESCRIPTION%</description>\n<itunes:summary>%ITEM_DESCRIPTION%</itunes:summary>\n<author>%ITEM_AUTHOR%</author>\n<itunes:author>%ITEM_AUTHOR%</itunes:author>\n<comments>%ITEM_COMMENTS%</comments>\n<source url=\"%ITEM_SOURCE_URL%\">%ITEM_SOURCE_TEXT%</source>\n<enclosure url=\"%ITEM_AUDIO_URL%\" length=\"%ITEM_AUDIO_LENGTH%\" type=\"audio/mpeg\" />\n<category>%ITEM_CATEGORY%</category>\n<pubDate>%ITEM_PUBLISH_DATE%</pubDate>\n<itunes:duration>%ITEM_AUDIO_SECONDS%</itunes:duration>\n<itunes:image href=\"%ITEM_IMAGE_URL%\" />\n<itunes:explicit>%ITEM_EXPLICIT%</itunes:explicit>");
c_item_templates.push_back("<superfeed:channelTitle>%ITEM_CHANNEL_TITLE%</superfeed:channelTitle>\n<superfeed:channelDescription>%ITEM_CHANNEL_DESCRIPTION%</superfeed:channelDescription>\n<title>%ITEM_TITLE%</title>\n<itunes:title>%ITEM_TITLE%</itunes:title>\n<link>%ITEM_LINK%</link>\n<guid isPermaLink=\"false\">%ITEM_GUID%</guid>\n<description>%ITEM_DESCRIPTION%</description>\n<itunes:summary>%ITEM_DESCRIPTION%</itunes:summary>\n<author>%ITEM_AUTHOR%</author>\n<itunes:author>%ITEM_AUTHOR%</itunes:author>\n<comments>%ITEM_COMMENTS%</comments>\n<source url=\"%ITEM_SOURCE_URL%\">%ITEM_SOURCE_TEXT%</source>\n<enclosure url=\"%ITEM_AUDIO_URL%\" length=\"%ITEM_AUDIO_LENGTH%\" type=\"audio/mpeg\" />\n<category>%ITEM_CATEGORY%</category>\n<pubDate>%ITEM_PUBLISH_DATE%</pubDate>\n<direct:pubDate>%ITEM_DIRECT_PUBLISH_DATE%</direct:pubDate>\n<itunes:duration>%ITEM_AUDIO_SECONDS%</itunes:duration>\n<itunes:image href=\"%ITEM_IMAGE_URL%\" />\n<itunes:explicit>%ITEM_EXPLICIT%</itunes:explicit>");
//
// Categories