Media RSS wurde 2004 von Yahoo! ins Leben gerufen. Es ist ein Erweiterung für gewöhnliche RSS-2.0-Feeds, die speziell für das Publizieren von "Mediendaten" (Videos, Podcasts, Bilder, etc.) gedacht ist.

Interessant ist, dass der angekündigte Adobe Media Player ebenfalls Media RSS unterstützen wird. Grund genug, einen Blick darauf zu werfen, wie man mit ActionScript 3 die Inhalte dieses weit verbreiteten XML-Formats ausliest.

RSS-Feeds

In einem normalen RSS-Feeds sind zu jedem Feed-Eintrag (z.B. Blogpost) zahlreiche Tags vorhanden:

XML:
  1. ...
  2.     >
  3.         >Movie Title: Is this a good movie?>
  4.         >http://www.foo.com/item1.htm>
  5.     >  
  6.     ...

Oftmals reichen diese vorgegebenen Standard-Tags jedoch nicht aus, da für bestimmte Zwecke individuelle Tags nötig sind. Bei einem Video-Podcast könnte dies z.B. der Videotyp (QuickTime, Windows Media,...) oder die Lizenz (z.B. nicht-kommerziell, ...) sein. Deshalb muss der Feed um neue Tags erweitert werden.

Was ist ein Namespace?

Jetzt kommt der Namespace ins Spiel, der im Kopf des XML-Feeds deklariert wird:

XML:
  1. version="2.0" xmlns:media="http://search.yahoo.com/mrss"
  2. xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

Der "Namespace" legt also einfach fest, welche Erweiterungsmodule in der XML-Datei vorhanden sind. In diesem Beispiele sind es "Media RSS" und das "CreativeCommons RSS Module".

Nun können im Feed die spezifischen Tags des Moduls verwendet werden. Sie enthalten einen Doppelpunkt in der Mitte.

XML:
  1. :license>
  2.     http://creativecommons.org/licenses/by/2.0/de/
  3.     :license>

Wie liest man die Tags mit Doppelpunkt in Flash/Flex ein?

Zuerst muss man in seinem ActionScript-Code die Namespaces festlegen, die man nutzen möchte. In diesem Fall also Media RSS und Creative Commons.

XML:
  1. // Namespace definieren
  2.     namespace mediaNS = "http://search.yahoo.com/mrss";
  3.     namespace creativeNS = "http://backend.userland.com/creativeCommonsRssModule";

Anschließend liest man XML-Feed wie gewöhnlich ein. Generell empfehle ich zuvor einen Blick in den Beitrag "ActionScript 3: XML", wie genau mit XML umgegangen wird. Jetzt kann man mit folgender Syntax auf die Eigenschaft zugreifen: Name des Namespace, gefolgt von zwei Doppelpunkten (z.B. mediaNS::content). Hier ein Beispiel:

XML:
  1. {title: rss..title[i],
  2.     contentURL: rss..mediaNS::content.@url[i],
  3.     license: rss..creativeNS::license[i],
  4.     rating: rss..mediaNS::rating[i]       
  5.                                                                                                                                                                                    
  6. }

Demo

Quellcode

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. :Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3.     layout="vertical"
  4.     width="550"
  5.     height="300"
  6.     backgroundColor="0x000000"
  7.     creationComplete="loadFeed('testmediarss2.xml');"
  8.     >
  9.    
  10.     :HTTPService id="myFeed"
  11.         showBusyCursor="true" resultFormat="e4x" result="onResult( event );" />
  12.        
  13.     :Script>
  14.        
  15.            
  16.             import mx.rpc.events.ResultEvent;
  17.             import mx.collections.ArrayCollection;     
  18.                        
  19.             [Bindable]
  20.         public var myCollection:ArrayCollection = new ArrayCollection();         
  21.            
  22.             // Namespace definieren
  23.             namespace mediaNS = "http://search.yahoo.com/mrss";
  24.             namespace creativeNS = "http://backend.userland.com/creativeCommonsRssModule";
  25.            
  26.             private function loadFeed(feedurl:String):void {
  27.              // Lade RSS Feed
  28.                 myFeed.url=feedurl;
  29.              myFeed.send(); 
  30.           }
  31.            
  32.             private function onResult( event:ResultEvent ):void {
  33.                
  34.              var rss:XML = event.result as XML;
  35.                 var i:int;
  36.                
  37.                 myCollection = new ArrayCollection();
  38.                
  39.                
  40.                 for (i=0; i <= rss.length(); i++) {
  41.                     myCollection.addItem(
  42.                             {title: rss..title[i],
  43.                                contentURL: rss..mediaNS::content.@url[i],
  44.                                license: rss..creativeNS::license[i],
  45.                                rating: rss..mediaNS::rating[i]                           
  46.                                                                                                                                                                                                                
  47.                             }
  48.                     );
  49.                 }  
  50.                
  51.                
  52.           }
  53.  
  54.            
  55.         ]]>
  56.     :Script>
  57.    
  58.    
  59.  
  60.    
  61.    
  62.    
  63.    
  64.  
  65.     :Label text="Media RSS Feed" color="#FFFFFF"/>
  66.  
  67.     :DataGrid id="myDataGrid" dataProvider="{myCollection}" width="100%" height="200">
  68.         :columns>
  69.             :DataGridColumn dataField="contentURL" headerText="content url" width="120"/>
  70.             :DataGridColumn dataField="license" headerText="license" width="200"/>
  71.             :DataGridColumn dataField="rating" headerText="rating" width="50"/>
  72.         :columns>
  73.     :DataGrid> 
  74.  
  75.  
  76. :Application>

Verwendeter Media RSS Feed

XML:
  1. version="2.0" xmlns:media="http://search.yahoo.com/mrss"
  2. xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
  3. >
  4. >My Movie Review Site>
  5. >http://www.foo.com>
  6. >I review movies.>
  7.     >
  8.         >Movie Title: Is this a good movie?>
  9.         >http://www.foo.com/item1.htm>
  10.         :content url="http://www.foo.com/trailer.mov"
  11.         fileSize="12216320" type="video/quicktime" expression="sample"/>
  12.         :license>
  13.         http://www.creativecommons.org/licenses/by-nc/1.0
  14.         :license>
  15.         :rating>nonadult:rating>
  16.     >
  17.     >
  18.         >Movie Title: Is this a bad movie?>
  19.         >http://www.foo.com/item1.htm>
  20.         :content url="http://www.test.test/test.mov"
  21.         fileSize="12216320" type="video/quicktime" expression="sample"/>
  22.         :license>
  23.         http://creativecommons.org/licenses/by/2.0/de/
  24.         :license>
  25.         :rating>adult:rating>
  26.     > 
  27. >
  28. >

Links

Link: Yahoo! Media RSS
Link: Extending RSS 2.0 With Namespaces
Link: ActionScript 3: XML