Author: as
Date: Tue Mar  4 15:05:40 2008
New Revision: 7516

Log:
- Rewritten the tutorial in a more friendly way (step by step).
# Need to add parsing of feeds.

Modified:
    trunk/Feed/docs/examples/feed_creator/data/news.txt
    trunk/Feed/docs/examples/feed_creator/data/news.xml
    trunk/Feed/docs/specifications.txt
    trunk/Feed/docs/tutorial.txt

Modified: trunk/Feed/docs/examples/feed_creator/data/news.txt
==============================================================================
--- trunk/Feed/docs/examples/feed_creator/data/news.txt [iso-8859-1] (original)
+++ trunk/Feed/docs/examples/feed_creator/data/news.txt [iso-8859-1] Tue Mar  4 
15:05:40 2008
@@ -1,23 +1,23 @@
-eZ news feeds
+eZ news feed
 http://ez.no
 Derick
 [EMAIL PROTECTED]
 This RSS feed contains news feeds for eZ Publish and eZ Components.
 
 eZ Components 2007.1 released
-http://components.ez.no
+http://ezcomponents.org/resources/news/news-2007-07-02
 Derick
 [EMAIL PROTECTED]
 The new release of eZ Components include Workflow, Authentication...
 
 eZ Publish 4.0 released
-http://publish.ez.no
+http://ez.no/company/news/first_stable_ez_publish_4_0_release_for_php_5
 Derick
 [EMAIL PROTECTED]
 The new release of eZ Publish is based on PHP 5....
 
 eZ Find 1.0 released
-http://find.ez.no
+http://ez.no/ezfind/news/ez_find_1_0_2_for_ez_publish_3_10_and_ez_find_1_0_0beta2_for_ez_publish_4_0_released
 Derick
 [EMAIL PROTECTED]
 A new product in the eZ family of open-source solutions...

Modified: trunk/Feed/docs/examples/feed_creator/data/news.xml
==============================================================================
--- trunk/Feed/docs/examples/feed_creator/data/news.xml [iso-8859-1] (original)
+++ trunk/Feed/docs/examples/feed_creator/data/news.xml [iso-8859-1] Tue Mar  4 
15:05:40 2008
@@ -5,29 +5,29 @@
     <link>http://ez.no</link>
     <description>This RSS feed contains news feeds for eZ Publish and eZ 
Components.</description>
     <managingEditor>[EMAIL PROTECTED] (Derick)</managingEditor>
-    <pubDate>Tue, 04 Mar 2008 10:30:14 +0100</pubDate>
+    <pubDate>Tue, 04 Mar 2008 11:18:34 +0100</pubDate>
     <generator>eZ Components</generator>
     <docs>http://www.rssboard.org/rss-specification</docs>
     <item>
       <title>eZ Components 2007.1 released</title>
-      <link>http://components.ez.no</link>
+      <link>http://ezcomponents.org/resources/news/news-2007-07-02</link>
       <description>The new release of eZ Components include Workflow, 
Authentication...</description>
       <author>[EMAIL PROTECTED] (Derick)</author>
-      <guid isPermaLink="true">http://components.ez.no</guid>
+      <guid 
isPermaLink="true">http://ezcomponents.org/resources/news/news-2007-07-02</guid>
     </item>
     <item>
       <title>eZ Publish 4.0 released</title>
-      <link>http://publish.ez.no</link>
+      
<link>http://ez.no/company/news/first_stable_ez_publish_4_0_release_for_php_5</link>
       <description>The new release of eZ Publish is based on PHP 
5....</description>
       <author>[EMAIL PROTECTED] (Derick)</author>
-      <guid isPermaLink="true">http://publish.ez.no</guid>
+      <guid 
isPermaLink="true">http://ez.no/company/news/first_stable_ez_publish_4_0_release_for_php_5</guid>
     </item>
     <item>
       <title>eZ Find 1.0 released</title>
-      <link>http://find.ez.no</link>
+      
<link>http://ez.no/ezfind/news/ez_find_1_0_2_for_ez_publish_3_10_and_ez_find_1_0_0beta2_for_ez_publish_4_0_released</link>
       <description>A new product in the eZ family of open-source 
solutions...</description>
       <author>[EMAIL PROTECTED] (Derick)</author>
-      <guid isPermaLink="true">http://find.ez.no</guid>
+      <guid 
isPermaLink="true">http://ez.no/ezfind/news/ez_find_1_0_2_for_ez_publish_3_10_and_ez_find_1_0_0beta2_for_ez_publish_4_0_released</guid>
     </item>
   </channel>
 </rss>

Modified: trunk/Feed/docs/specifications.txt
==============================================================================
--- trunk/Feed/docs/specifications.txt [iso-8859-1] (original)
+++ trunk/Feed/docs/specifications.txt [iso-8859-1] Tue Mar  4 15:05:40 2008
@@ -2384,7 +2384,7 @@
 
 Can appear only once.
 
-Can be specified as ``HH:MM:SS``, ``H:MM:SS``, ``MM:SS``, ``M:SS`` or ``S``
+Can be specified as ``S``, ``M:SS``, ``MM:SS``, ``H:MM:SS`` or ``HH:MM:SS``
 (H = hours, M = minutes, S = seconds).
 
 

Modified: trunk/Feed/docs/tutorial.txt
==============================================================================
--- trunk/Feed/docs/tutorial.txt [iso-8859-1] (original)
+++ trunk/Feed/docs/tutorial.txt [iso-8859-1] Tue Mar  4 15:05:40 2008
@@ -142,95 +142,454 @@
 ezcFeed::$supportedModulesPrefixes arrays.
 
 
-Working with feeds
-==================
-
-Feeds can be created from scratch or from existing XML documents (stored in an
-URI or in a string variable). The information stored in the feed can be
-modified, or new information can be added. The feed object can be converted to
-an XML document.
-
-
-Creating a feed object
+How to create a feed
+====================
+
+This part of the tutorial will show you step by step how to create an RSS2
+feed which handles the news on a website. Creating an ATOM or RSS1 is similar,
+although some code needs to be changed. See the `Feed creator example`_ for a
+sample application which can be used to create simple XML feeds of any type
+(ATOM, RSS1 or RSS2) by providing a simple text file as input.
+
+The information which we want to show in the feed is:
+
+- the *title* of the feed: ``eZ news feed``
+- a *description* of the feed: ``This RSS feed contains news feeds for eZ
+  Publish and eZ Components.``
+- an *author* (called *managerEditor* in RSS2): [EMAIL PROTECTED] (Derick)``
+  (this is the recommended way to specify an author in RSS2, with an email
+  address and the name of the person in paranthesis)
+- a *link* to our website: ``http://ez.no``
+- the news *items* (a short story about each product release)
+
+A news item can be defined by these elements (example for one news item):
+
+- the *title* of the news item: ``eZ Components 2007.1 released``
+- a short *description* of the news item: ``The new release of eZ Components
+  include Workflow, Authentication...``
+- an *author* of the news item: [EMAIL PROTECTED] (Derick)``
+  (this is the recommended way to specify an author in RSS2, with an email
+  address and the name of the person in paranthesis)
+- a *link* to the detailed article on our website:
+  ``http://ezcomponents.org/resources/news/news-2007-07-02``
+  (this will show in most `aggregator`_ programs as a ``Complete story`` link)
+
+Step 1. Create a feed object
+----------------------------
+
+A feed object can be created by calling the constructor with the required feed
+type (``atom``, ``rss1`` or ``rss2``). In our case we create an RSS2 feed::
+
+    $feed = new ezcFeed( 'rss2' );
+
+
+Step 2. Add feed elements
+-------------------------
+
+We add the *title*, *description* and *author* to the feed::
+
+    $feed->title = 'eZ news feed';
+    $feed->description = 'This RSS feed contains news feeds for eZ Publish and 
eZ Components';
+    $feed->author = '[EMAIL PROTECTED] (Derick)';
+
+Because some feed types support multiple *link* elements, multiple *link*
+elements can be added to a feed (although this is not fully supported by RSS2
+|RSS2-specifications|_ or by `aggregator`_ programs).
+
+The way to add an element which can appear multiple times, or an element which
+supports attributes, is to call the method **add()** from ezcFeed or
+ezcFeedElement/ezcFeedItem. The value of the element is set via the method
+**set()** from ezcFeedElement/ezcFeedItem, and the attributes of the element
+are set as simple properties (the way **$feed->title** is set).
+
+So to add a *link* element to our feed, we will do::
+
+    $link = $feed->add( 'link' );
+    $link->set( 'http://ez.no' );
+
+
+Step 3. Add an item
+-------------------
+
+A feed *item* is an element which can appear multiple times, so it is added
+via the method **add()** of ezcFeed::
+
+    $item = $feed->add( 'item' );
+
+Next we add the *title*, *description* and *author* elements to the news item
+::
+
+    $item->title = 'eZ Components 2007.1 released';
+    $item->description = 'The new release of eZ Components include Workflow, 
Authentication...';
+    $item->author = '[EMAIL PROTECTED] (Derick)';
+
+We add the *link* element to the news item in the same way as for the feed::
+
+    $link = $item->add( 'link' );
+    $link->set( 'http://ezcomponents.org/resources/news/news-2007-07-02' );
+
+
+Step 4. Add more items
 ----------------------
 
-A feed object can be created in different ways:
-
-- by calling the constructor with the required feed type. Example::
+To add more news items to our feed, we repeat the step 3 as many times as
+needed.
+
+
+Step 5. Generate the XML feed
+-----------------------------
+
+To create the XML feed from the $feed object, we call the **generate()** method
+of ezcFeed::
+
+    $xml = $feed->generate();
+
+After running this line, $xml will contain the XML string of the feed (in case
+no exceptions were thrown due to required elements not being present).
+
+This is the string from $xml with 3 news items:
+
+.. include:: examples/feed_creator/data/news.xml
+   :literal:
+
+Some elements were added automatically, namely *pubDate* (current system time
+at generation time), *generator* (``eZ Components``) and *docs*
+(``http://www.rssboard.org/rss-specification`` - a link to the RSS2
+|RSS2-specifications|_).
+
+
+Step 6. Save the XML feed to a file
+-----------------------------------
+
+The generated XML feed needs to be saves in a file in order to be made
+accessible to users of your website::
+
+    file_put_contents( 'feeds/news.xml', $xml );
+
+Assuming that our host is ``ez.no``, this will be the location of our newly
+created XML feed: ``http://ez.no/feeds/news.xml``.
+
+
+Step 7. Feed validation
+-----------------------
+
+Use a `feed validator`_ to validate your newly created feed. Some warnings can
+appear, but unless the feed is not validated, it should be parseable by most
+applications and `aggregator`_ programs.
+
+
+Step 8. Make the XML feed accessible
+------------------------------------
+
+There are some methods to let the user know that a website provides an
+XML feed, so that the user can save the feed link in his feed `aggregator`_.
+
+
+Automatic feed discovery
+````````````````````````
+
+In the HTML source of every page add this line for RSS1 or RSS2 feeds::
+
+    <link rel="alternate" type="application/rss+xml" 
href="http://ez.no/feeds/news.xml";
+    title="eZ news feed" />
+
+Or this line for ATOM feeds::
+
+    <link rel="alternate" type="application/atom+xml" 
href="http://ez.no/feeds/news.xml";
+    title="eZ news feed" />
+
+In modern browsers the user will be informed (usually via a small icon like
+|feed icon| in one corner of the browser or in the address bar) that the
+current page has a web feed. If the user clicks on this icon his feed
+aggregator client will start and save the link to the feed in its database
+(if the user's system has a feed aggregator client and is configured to
+handle *application/rss+xml* and *application/atom+xml* content with the
+aggregator).
+
+Multiple feeds can be added to the same page (for example you can provide ATOM
+and RSS2 feeds). Note: some browsers might not recognize the non-standard
+*application/rss+xml* type and select the ATOM feed by default.
+
+The *title* attribute of the *link* HTML tag can be used to differentiate
+between multiple feeds (for example "News", "Latest offers", etc).
+
+
+Link to the feed document
+`````````````````````````
+
+In the HTML source of every page (usually in the header and/or footer) add
+this line for RSS1 or RSS2 feeds::
+
+    <a type="application/rss+xml" href="http://ez.no/feeds/news.xml";
+    title="eZ news feed">RSS feed</a>
+
+Or this line for ATOM feeds::
+
+    <a type="application/atom+xml" href="http://ez.no/feeds/news.xml";
+    title="eZ news feed">ATOM feed</a>
+
+The user can drag this link to his feed `aggregator`_, where it will be added
+to the aggregator's database of feeds.
+
+It is customary to add the feed icon |feed icon| next to a feed link, so that
+the user finds the feed link easier on the page. See this Mozilla__ page for
+more information about the feed icon.
+
+__ http://www.mozilla.org/foundation/feed-icon-guidelines/
+
+.. |feed icon| image:: img/feed-icon-14x14.png
+
+
+Feed creator example
+--------------------
+
+In the sub-directory *Feed/docs/examples* there is a **feed_creator**
+application which can be used to create simple XML feeds from minimal text
+files.
+
+The structure of the text files accepted by this application is::
+
+    Feed title
+    Feed link
+    Feed author name
+    Feed author email
+    Feed description
+
+    Item 1 title
+    Item 1 link
+    Item 1 author name
+    Item 1 author email
+    Item 1 author description
+
+    Item 2 title
+    Item 2 link
+    Item 2 author name
+    Item 2 author email
+    Item 2 author description
+
+    .. etc
+
+An example of an input text file:
+
+.. include:: examples/feed_creator/data/news.txt
+   :literal:
+
+The **feed_creator** application will read an input file with the above
+structure and output an XML feed of the chosen type (rss1, rss2 or atom). An
+XML file will also be written in the same directory as the input file, with
+the name of the input file plus the *.xml* extension.
+
+Example of usage (current directory is the `feed_creator` directory)::
+
+  php feed_creator.php rss2 data/news.txt
+
+After running this command, the file *data/news.xml* will be created,
+containing an RSS2 feed with the values read from *data/news.txt*:
+
+.. include:: examples/feed_creator/data/news.xml
+   :literal:
+
+See the section `Step 8. Make the XML feed accessible`_ for details on how to
+provide access to the generated XML feed.
+
+
+How to create an iTunes podcast
+===============================
+
+A podcast is a collection of media files (called episodes) distributed over
+the Internet using XML feeds. The podcast doesn't contain the media file, but
+it contains links to these media files, plus information about those files
+(meta-information) like creator, duration, category, copyright information,
+etc.
+
+The Feed component supports creating and parsing feeds which define podcasts.
+
+This part of the tutorial will show you step by step how to create an RSS2
+podcast with `iTunes`_ elements. The `iTunes`_ media player supports RSS2
+feeds, so creating ATOM or RSS1 podcasts for iTunes is not recommended
+(although possible).
+
+The information which we want to show in the podcast is:
+
+- the *title* of the feed: ``Flight of the RC plane``
+- a *description* of the feed. This will also be used if we don't declare the
+  *summary* iTunes element. The contents of this element are shown in
+  `iTunes`_ in a separate window that appears when the "circled i" in the
+  Description column is clicked: ``A podcast for fans of RC planes, with
+  information about planes, competitions, tutorials and tips``
+- an *author* (called *managerEditor* in RSS2):
+  [EMAIL PROTECTED] (Derick)``
+  (this is the recommended way to specify an author in RSS2, with an email
+  address and the name of the person in paranthesis)
+- a *link* to our website: ``http://rcplanes.example.com``
+- the episodes or *items* (information about each episode, a link to the media
+  file associated with the episode and iTunes meta-information for the media
+  files)
+- iTunes elements needed to be able to submit our podcast to `iTunes`_.
+
+iTunes elements for the whole feed:
+
+- one or more *category* elements (from the page `iTunes categories`_). Our
+  podcast could be for example be in the category ``Technology``,
+  sub-category ``Gadgets``
+- one or more *keywords*, separated by commas: ``RC planes,gadgets,flying``
+- an *image* for our podcast. `iTunes`_ recommends an image of at least 500x500
+  pixels: http://rcplanes.example.com/images/rc_plane_big.jpg
+- a *subtitle* for our podcast. This is shown in the Description column in
+  `iTunes`_. Should be a very short description: ``Competitions, tutorials and
+  tips``.
+- *explicit* status (some of our RC pilots are known to curse a lot): ``yes``
+  (other values are ``no`` and ``clean``, with ``no`` being the default)
+
+An episode can be defined by these elements (example for one episode):
+
+- the *title* of the episode: ``Flying an RC plane indoors``
+- a short *description* of the episode: ``In this episode, Derick talks about
+  how to fly an RC plane in a big hall, around people working and throwing
+  stuff at the plane.``
+- an *author* of the episode: [EMAIL PROTECTED] (Derick)``
+  (this is the recommended way to specify an author in RSS2, with an email
+  address and the name of the person in paranthesis)
+- a *link* to the detailed article on our website:
+  ``http://rcplanes.example.com/articles/fly-an-rc-plane-indoors.html``
+- an *enclosure*, which is a link to a media file:
+  http://rcplanes.example.com/media/003-flying-indoors.mp3. Other information
+  can also be provided as attributes for the *enclosure*, namely *length* in
+  bytes and *type* (``audio/x-mp3`` in our case)
+- the date and time of the episode, or *pubDate*. The `iTunes`_ program uses
+  this timestamp to download the latest episode automatically:
+  ``Fri, 04 Jan 2008 11:18:34 +0100``
+
+In addition, these iTunes elements are added for each episode:
+
+- *duration* of the episode: ``29:20`` (29 minutes 20 seconds). Other ways to
+  specify the duration are ``S``, ``M:SS``, ``MM:SS``, ``H:MM:SS`` or
+  ``HH:MM:SS`` (H = hours, M = minutes, S = seconds).
+- one or more *keywords*, separated by commas:
+  ``RC planes,office,flying,enemies``
+
+See the section `How to create a feed`_ for detailed steps. This part of the
+tutorial will concentrate on how to add the `iTunes`_ information to the feed.
+
+
+Step 1. Create an RSS2 feed
+---------------------------
+
+We start with creating an RSS2 feed object, which we fill with *title*,
+*description*, *author* and *link* elements::
 
     $feed = new ezcFeed( 'rss2' );
 
-- by parsing an existing XML file or URI. The feed type of the resulting
-  ezcFeed object will be auto-detected. Example::
-
-    $feed = ezcFeed::parse( 'http://www.example.com/rss2.xml' );
-
-- by parsing an XML document stored in a string variable. The feed type of
-  the resulting ezcFeed object will be autodetected. Example::
-
-    $feed = ezcFeed::parseContent( $xmlString );
-
-
-Feed operations
----------------
-
-In the following examples $feed is an existing ezcFeed object.
-
-Possible feed operations:
-
-- set/get a value from the feed document. Example::
-
-    $feed->title = 'News';
-    $title = $feed->title;
-
-- iterate over the items in the feed. Example::
-
-    // retrieve the titles from the feed items
-    foreach ( $feed->items as $item )
-    {
-        $titles[] = $item->title;
-    }
-
-- add a new item to the feed. Example::
+    $feed->title = 'Flight of the RC plane';
+    $feed->description = 'A podcast for fans of RC planes, with information 
about planes, competitions, tutorials and tips';
+    $feed->author = '[EMAIL PROTECTED] (Derick)';
+
+    $link = $feed->add( 'link' );
+    $link->set( 'http://rcplanes.examples.com' );
+
+
+Step 2. Add iTunes feed elements
+--------------------------------
+
+The iTunes elements will be contained in an iTunes module. A module is added
+to an ezcFeed or ezcFeedItem object using the method **addModule()**. A module
+is an object of class ezcFeedModule.
+
+Next we will add *category*, *keywords*, *image*, *subtitle* and *explicit*
+iTunes elements to our $feed object::
+
+    $iTunes = $feed->addModule( 'iTunes' );
+
+    $iTunes->keywords = 'RC planes,gadgets,flying';
+    $iTunes->explicit = 'yes';
+    $iTunes->subtitle = 'Competitions, tutorials and tips';
+
+    // add an image for the podcast
+    $image = $iTunes->add( 'image' );
+    $image->href = 'http://rcplanes.example.com/images/rc_plane_big.jpg';
+
+    // add the podcast in the category Technology->Gadgets
+    // see http://www.apple.com/itunes/store/podcaststechspecs.html#categories
+    // for iTunes categories
+    $category = $iTunes->add( 'category' );
+    $category->text = 'Technology';
+    $subCategory = $category->add( 'category' );
+    $subCategory->text = 'Gadgets';
+
+
+Step 3. Add an item
+-------------------
+
+Next we will add an episode (*item*) to our $feed object, and we will add the
+*title*, *description*, *author* and *link* elements to it::
 
     $item = $feed->add( 'item' );
-    $item->title = 'Item title';
-
-- add a new module to the feed item. Example::
-
-    $item = $feed->add( 'item' );
-    $module = $item->addModule( 'Content' );
-    $module->encoded = 'text content';
-
-- iterate over the loaded modules in a feed item. Example::
-
-    // display the namespaces of the modules loaded in the feed item $item
-    foreach ( $item->getModules() as $moduleName => $module )
-    {
-        echo $module->getNamespace();
-    }
-
-- generate an XML document from the ezcFeed object. The result string should be
-  saved to a file, and a link to a file made accessible. See
-  `Provide access to feeds in a web application`_. Example::
-
-    $xml = $feed->generate();
-
-
-Applications
-============
-
-Podcasts
---------
-
-A podcast is a collection of media files distributed over the Internet using
-feeds.
-
-The Feed component supports creating and parsing feeds which define podcasts.
-
-
-Parse an RSS2 podcast
-`````````````````````
+
+    $item->title = 'Flying an RC plane indoors';
+    $item->description = 'In this episode, Derick talks about how to fly an RC 
plane in a big hall, around people working and throwing stuff at the plane';
+    $item->author = '[EMAIL PROTECTED] (Derick)';
+    $item->published = 'Fri, 04 Jan 2008 11:18:34 +0100';
+
+    $link = $item->add( 'link' );
+    $link->set( 
'http://rcplanes.example.com/articles/fly-an-rc-plane-indoors.html' );
+
+    $enclosure = $item->add( 'enclosure' );
+    $enclosure->url = 
'http://rcplanes.example.com/media/003-flying-indoors.mp3';
+    $enclosure->length = 49099054; // bytes
+    $enclosure->type = 'audio/x-mp3';
+
+
+Step 4. Add iTunes item elements
+--------------------------------
+
+We will add the iTunes elements *duration* and *keywords* to our $item object
+from the previous step::
+
+    $iTunes = $item->addModule( 'iTunes' );
+
+    $iTunes->duration = '29:20';
+    $iTunes->keywords = 'RC planes,office flying,enemies';
+
+
+Step 5. Add more items
+----------------------
+
+To add more episodes to our podcast, we repeat the step 4 as many times as
+needed.
+
+
+Step 6. Generate the XML feed
+-----------------------------
+
+Follow these steps from the previous tutorial `How to create a feed`_:
+
+- `Step 5. Generate the XML feed`_
+- `Step 6. Save the XML feed to a file`_
+- `Step 7. Feed validation`_
+- `Step 8. Make the XML feed accessible`_
+
+In the end, our podcast will look like this (with 2 episodes added):
+
+.. include:: examples/feed_creator/data/podcast.xml
+   :literal:
+
+
+Step 7. Submit the podcast to the iTunes Store
+----------------------------------------------
+
+Follow the steps on the section `Submitting Your Podcast to the iTunes Store`_
+from the iTunes `iTunes-specifications`_.
+
+The iTunes `iTunes-specifications`_ also contains other useful information you
+might need when you are creating podcasts.
+
+
+How to parse an XML feed
+========================
+
+
+How to parse an iTunes podcast
+==============================
 
 The following example shows how to parse an RSS2 podcast::
 
@@ -259,110 +618,40 @@
 `specifications`_ section for more information about the `iTunes`_ module.
 
 
-Create an RSS2 podcast
-``````````````````````
-
-The following example shows how to create an RSS2 podcast with 2 media files::
-
-    $feed = new ezcFeed( 'rss2' );
-
-    $feed->title = 'Feed title';
-
-    $link = $feed->add( 'link' );
-    $link->set( 'Feed link' );
-
-    $feed->description = 'Feed description';
-
-    $item = $feed->add( 'item' );
-    $item->title = 'Title for media file 1';
-    $item->link = 'Link for media file 1';
-    $item->description = 'Description for media file 1';
-
-    $enclosure = $item->add( 'enclosure' );
-    $enclosure->url = 'http://www.example.com/media_file1.mp3';
-    $enclosure->length = 4300;
-    $enclosure->type = 'audio/x-mp3';
-
-    $item = $feed->add( 'item' );
-    $item->title = 'Title for media file 2';
-    $item->link = 'Link for media file 2';
-    $item->description = 'Description for media file 2';
-
-    $enclosure = $item->add( 'enclosure' );
-    $enclosure->url = 'http://www.example.com/media_file2.mp3';
-    $enclosure->length = 6500;
-    $enclosure->type = 'audio/x-mp3';
-
-
-Using the iTunes module
-```````````````````````
-
-A feed should be described with iTunes elements in order to be used as a
-podcast in the music player `iTunes`_. The previous example becomes as follows
-::
-
-    $feed = new ezcFeed( 'rss2' );
-
-    $feed->title = 'Feed title';
-
-    $link = $feed->add( 'link' );
-    $link->set( 'Feed link' );
-
-    $feed->description = 'Feed description';
-
-    $iTunes = $feed->addModule( 'iTunes' );
-
-    // add an image for the podcast
-    $image = $iTunes->add( 'image' );
-    $image->href = 'URL of the image file';
-
-    $iTunes->keywords = 'keyword1,keyword2,keyword3';
-
-    // add the podcast in one or more categories + sub-categories
-    // see http://www.apple.com/itunes/store/podcaststechspecs.html#categories
-    // for iTunes categories
-    $category = $iTunes->add( 'category' );
-    $category->text = 'iTunes category';
-    $subCategory = $category->add( 'category' );
-    $subCategory->text = 'iTunes sub-category';
-
-    $item = $feed->add( 'item' );
-    $item->title = 'Title for media file 1';
-    $item->link = 'Link for media file 1';
-    $item->description = 'Description for media file 1';
-
-    $enclosure = $item->add( 'enclosure' );
-    $enclosure->url = 'http://www.example.com/media_file1.mp3';
-    $enclosure->length = 4300;
-    $enclosure->type = 'audio/x-mp3';
-
-    $iTunes = $item->addModule( 'iTunes' );
-    $iTunes->author = 'Author name';
-
-    // set a duration of 3 min 51 sec for this enclosure
-    $iTunes->duration = '03:51';
-    $iTunes->keywords = 'keyword1,keyword2';
-
-    $item = $feed->add( 'item' );
-    $item->title = 'Title for media file 2';
-    $item->link = 'Link for media file 2';
-    $item->description = 'Description for media file 2';
-
-    $enclosure = $item->add( 'enclosure' );
-    $enclosure->url = 'http://www.example.com/media_file2.mp3';
-    $enclosure->length = 6500;
-    $enclosure->type = 'audio/x-mp3';
-
-    $iTunes = $item->addModule( 'iTunes' );
-    $iTunes->author = 'Author name';
-
-    // set a duration of 1 hour 4 min 30 sec for this enclosure
-    $iTunes->duration = '01:04:30';
-    $iTunes->keywords = 'keyword1';
-
-
-Writing feed-independent applications
-=====================================
+Best practices
+==============
+
+This section lists some useful tips for handling feed documents.
+
+
+Media type
+----------
+
+ATOM
+````
+
+All ATOM feeds must be identified with the *application/atom+xml* media type.
+Use the **getContentType()** method of ezcFeed to get this string.
+
+
+RSS1
+````
+
+All RSS1 feeds should be identified with the *application/rss+xml* media type
+(although it is not a standard yet). Use the **getContentType()** method of
+ezcFeed to get this string.
+
+
+RSS2
+````
+
+All RSS2 feeds should be identified with the *application/rss+xml* media type
+(although it is not a standard yet). Use the **getContentType()** method of
+ezcFeed to get this string.
+
+
+Elements common to all feed types
+---------------------------------
 
 As each feed type (RSS1, RSS2, ATOM) is different, it can be quite difficult
 to switch a feed generation application from one feed type to another. It is
@@ -373,16 +662,16 @@
 feed type (for example if you set the subtitle element, it will be ignored in
 RSS1 because it is not defined in the RSS1 specifications).
 
-
-Elements common to all feed types
----------------------------------
+For a full list of the feed elements and how they are expressed in the Feed
+component, see the `specifications`_ page.
+
 
 title
 `````
 
 - Required in all feed types.
-- In ATOM it has an optional attribute 'type' which can be 'text', 'html' or
-  'xhtml'.
+- In ATOM it has other attributes, for example *type* (``text``, ``html`` or
+  ``xhtml``).
 
 
 link
@@ -397,195 +686,35 @@
 ```````````
 
 - Required in RSS1 and RSS2.
-- Called 'subtitle' in ATOM (accessed as 'description' through ezcFeed).
+- Called *subtitle* in ATOM (accessed as *description* through ezcFeed).
 
 
 item
 ````
 
 - Optional in RSS2 and ATOM, but RSS1 must have at least one item present.
-- Called 'entry' in ATOM (accessed as 'item' through ezcFeed).
-- These sub-elements of item are present in all feed types:
-
-  title
+- Called *entry* in ATOM (accessed as *item* through ezcFeed).
+- These sub-elements of *item* are present in all feed types:
+
+  *title*
     Present in all feed types.
 
-  link
+  *link*
     RSS2 can have multiple links per item.
 
-  description
-    Called 'content' in ATOM (accessed as 'description' through ezcFeed). In
-    ATOM it has other attributes, for example type ('text', 'html').
+  *description*
+    Called *summary* in ATOM (accessed as *description* through ezcFeed). In
+    ATOM it has other attributes, for example *type* (``text``, ``html`` or
+    ``xhtml``).
 
 
 image
 `````
 
 - Optional in all feed types.
-- Called 'logo' in ATOM (accessed as 'image' through ezcFeed).
-- RSS1 and RSS2 have attributes for the image, while ATOM does not have them.
-
-
-Feed creator example
---------------------
-
-In the sub-directory *Feed/docs/examples* there is a **feed_creator**
-application which can be used to create simple XML feeds from minimal text
-files.
-
-The structure of the text files accepted by this application is::
-
-  Feed title
-  Feed link
-  Feed author name
-  Feed author email
-  Feed description
-
-  Item 1 title
-  Item 1 link
-  Item 1 author name
-  Item 1 author email
-  Item 1 author description
-
-  Item 2 title
-  Item 2 link
-  Item 2 author name
-  Item 2 author email
-  Item 2 author description
-
-  .. etc
-
-An example of an input text file:
-
-.. include:: examples/feed_creator/data/news.txt
-   :literal:
-
-The **feed_creator** application will read an input file with the above
-structure and output an XML feed of the chosen type (rss1, rss2 or atom). An
-XML file will also be written in the same directory as the input file, with
-the name of the input file plus the *.xml* extension.
-
-Example of usage (current directory is the `feed_creator` directory)::
-
-  php feed_creator.php rss2 data/news.txt
-
-After running this command, the file *data/news.xml* will be created,
-containing an RSS2 feed with the values read from *data/news.txt*:
-
-.. include:: examples/feed_creator/data/news.xml
-   :literal:
-
-See the section `Provide access to feeds in a web application`_ for details on
-how to provide access to the generated XML feed.
-
-
-Best practices
-==============
-
-This section lists some useful tips for handling feed documents.
-
-
-ATOM
-----
-
-Media type
-``````````
-
-All ATOM feeds must be identified with the *application/atom+xml* media type.
-Use the getContentType() method of ezcFeed to get this string.
-
-
-RSS1
-----
-
-Media type
-``````````
-
-All RSS1 feeds should be identified with the *application/rss+xml* media type
-(although it is not a standard yet). Use the getContentType() method of
-ezcFeed to get this string.
-
-
-RSS2
-----
-
-Media type
-``````````
-
-All RSS2 feeds should be identified with the *application/rss+xml* media type
-(although it is not a standard yet). Use the getContentType() method of
-ezcFeed to get this string.
-
-
-Using feeds in applications
-===========================
-
-Provide access to feeds in a web application
---------------------------------------------
-
-There are some methods to let the user know that a web application provides a
-web feed, so that the user can save the feed link in his feed aggregator.
-
-
-Automatic feed discovery
-````````````````````````
-
-In the HTML source of every page add this line for RSS (1, 2) feeds::
-
-    <link rel="alternate" type="application/rss+xml" href="url to the feed xml
-    document" title="A title for the feed" />
-
-Or this line for ATOM feeds::
-
-    <link rel="alternate" type="application/atom+xml" href="url to the feed
-    xml document" title="A title for the feed" />
-
-In modern browsers the user will be informed (usually via a small icon like
-|feed icon| in one corner of the browser or in the address bar) that the
-current page has a web feed. If the user clicks on this icon his feed
-aggregator client will start and save the link to the feed in its database
-(if the user's system has a feed aggregator client and is configured to
-handle *application/rss+xml* and *application/atom+xml* content with the
-aggregator).
-
-Multiple feeds can be added to the same page (for example you can provide ATOM
-and RSS2 feeds). Note: some browsers might not recognize the non-standard
-*application/rss+xml* type and select the ATOM feed by default.
-
-The *title* attribute of the *link* HTML tag can be used to differentiate
-between multiple feeds (for example "News", "Latest offers", etc).
-
-
-Link to the feed document
-`````````````````````````
-
-In the HTML source of every page (usually in the header and/or footer) add
-this line for RSS (1, 2) feeds::
-
-    <a type="application/rss+xml" href="url to the feed document"
-    title="A title for the feed">RSS feed</a>
-
-Or this line for ATOM feeds::
-
-    <a type="application/atom+xml" href="url to the feed document"
-    title="A title for the feed">ATOM feed</a>
-
-The user can drag this link to his feed aggregator, where it will be added to
-the aggregator's database.
-
-It is customary to add the feed icon |feed icon| next to a feed link, so that
-the user finds the feed link easier on the page. See this Mozilla__ page for
-more information about the feed icon.
-
-__ http://www.mozilla.org/foundation/feed-icon-guidelines/
-
-.. |feed icon| image:: img/feed-icon-14x14.png
-
-
-Feed validation
-===============
-
-Feeds should be validated against a `feed validator`_.
+- Called *logo* in ATOM (accessed as *image* through ezcFeed).
+- RSS1 and RSS2 have attributes for the image (*title*, *link*, *url*, *width*,
+  *height*, *description*), while ATOM does not have them.
 
 
 Specifications and RFCs
@@ -596,8 +725,6 @@
 
 .. _specifications: Feed_specifications.html
 .. _feed validator: http://validator.w3.org/feed/
-
-.. _iTunes: http://www.apple.com/itunes/
 
 .. _RSS1-specifications: http://web.resource.org/rss/1.0/spec
 .. _RSS2-specifications: http://www.rssboard.org/rss-specification
@@ -609,6 +736,10 @@
 .. _iTunes-specifications: 
http://www.apple.com/itunes/store/podcaststechspecs.html
 
 .. _aggregator: http://en.wikipedia.org/wiki/List_of_feed_aggregators
+
+.. _iTunes categories: 
http://www.apple.com/itunes/store/podcaststechspecs.html#categories
+.. _iTunes: http://www.apple.com/itunes/
+.. _Submitting Your Podcast to the iTunes Store: 
http://www.apple.com/itunes/store/podcaststechspecs.html#submitting
 
 .. |ATOM-specifications| replace:: RFC 4287
 .. |RSS1-specifications| replace:: Specifications


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to