<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Python, SOAP, REST i Rails</title>
    <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Python, SOAP, REST i Rails</title>
      <description>&lt;p&gt;Ostatnie problemy z pod&#322;&#261;czeniem si&#281; z poziomu Pythona do do web serwis&#243;w napisanych w C#/.NET zmusi&#322;y mnie do g&#322;&#281;bszego spojrzenia na kwesti&#281; promowanego przez Microsoft (i kiedy&#347; Macromedi&#281;&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;) tworzenia aplikacji za pomoc&#261; web serwis&#243;w i zwi&#261;zanego z nim protoko&#322;u &lt;span class="caps"&gt;SOAP&lt;/span&gt;. Mo&#380;e wpierw kr&#243;tko na&#347;wietl&#281; problem jaki napotka&#322;em w Pythonie.&lt;/p&gt;


	&lt;p&gt;Problem dotyczy&#322; konieczno&#347;ci po&#322;&#261;czenia si&#281; za pomoc&#261; Pythona z z dotnetowym web serwisem napisanym w C#. Wybrana biblioteka &lt;a href="http://pywebsvcs.sourceforge.net/"&gt;&lt;span class="caps"&gt;ZSI&lt;/span&gt;&lt;/a&gt; 2.0rc3 bezskutecznie pr&#243;bowa&#322;a zestawi&#263; po&#322;&#261;czenie:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;from&lt;/span&gt; &lt;span class="constant"&gt;ZSI&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;ServiceProxy&lt;/span&gt; &lt;span class="ident"&gt;import&lt;/span&gt; &lt;span class="constant"&gt;ServiceProxy&lt;/span&gt; 
&lt;span class="ident"&gt;wsdl&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;http://localhost/web/MyAction.asmx?wsdl&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; 
&lt;span class="ident"&gt;print&lt;/span&gt; &lt;span class="constant"&gt;ServiceProxy&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;wsdl&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;tracefile&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="ident"&gt;sys&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;stdout&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Mo&#380;na by&#322;o zobaczy&#263; dziwaczny b&#322;&#261;d:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_python "&gt;&amp;quot;C:\opt\Python25\lib\site-packages\zsi-2.0_rc3-py2.5.egg\ZSI\wstools\WSDLTools.py&amp;quot;,
line 1116, in getAddressBinding 
WSDLError: No address binding found in port. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Nawet gdybym chcia&#322;, to debugowanie &#378;r&#243;de&#322; biblioteki &lt;span class="caps"&gt;ZSI&lt;/span&gt; by&#322;oby raczej ma&#322;o por&#281;czne (ZSI zainstalowa&#322;a si&#281; w postaci jednego, binarnego pliku egg). Domy&#347;li&#322;em si&#281; &#380;e problemem jest chyba jaka&#347; r&#243;&#380;nica w microsoftowej implementacji &lt;span class="caps"&gt;SOAP&lt;/span&gt; bo ten sam kod bez problemu &#322;&#261;czy&#322; si&#281; z web serwisami Googli (kt&#243;rych raczej nie ma co podejrzewa&#263; &#380;e korzystaj&#261; z .NET) Co ciekawe, mog&#322;em bez problemu po&#322;&#261;czy&#263; si&#281; z tymi web serwisami .NET ale za pomoc&#261;&amp;#8230; Rubiego. By&#263; mo&#380;e to, &#380;e &lt;span class="caps"&gt;SOAP&lt;/span&gt; jest w&#322;&#261;czony do standardowej biblioteki Rubiego spowodowa&#322; &#380;e po prostu porz&#261;dnie kto&#347; t&#261; bibliotek&#281; napisa&#322; i przetestowa&#322;.&lt;/p&gt;


	&lt;p&gt;W przypadku Pythona istnieje wiele r&#243;&#380;nych, niezale&#380;nych bibliotek &lt;span class="caps"&gt;SOAP&lt;/span&gt;, &#380;adna nie zosta&#322;a w&#322;&#261;czona do biblioteki standardowej. Mo&#380;e w ko&#324;cu kto&#347; pomy&#347;li, &#380;e to wstyd aby biblioteki standardowe Python obs&#322;ugiwa&#322;y tylko &lt;span class="caps"&gt;XML&lt;/span&gt;-RPC. Bez wzgl&#281;du krytyk&#281; i wady &lt;span class="caps"&gt;SOAP&lt;/span&gt; jest propagowany przez kr&#281;gi Javy i .NET wi&#281;c troch&#281; g&#322;upio to tak ignorowa&#263;. Nawet &lt;span class="caps"&gt;PHP5&lt;/span&gt; doczeka&#322; si&#281; dobrej biblioteki &lt;span class="caps"&gt;SOAP&lt;/span&gt; w&#322;&#261;czonej do standardowych modu&#322;&#243;w. Musz&#281; wypr&#243;bowa&#263; jeszcze inne biblioteki, mo&#380;e kt&#243;ra&#347; &amp;#8220;ruszy&amp;#8221;. Pr&#243;bowa&#322;em zainstalowa&#263; &lt;a href="http://pywebsvcs.sourceforge.net"&gt;SOAPpy&lt;/a&gt;, ale wymaga&#322;a biblioteki fpconst, ta za&#347; nie ma przygotowanego pakietu egg dla Pythona 2.5. W ko&#324;cu do obszed&#322;em instaluj&#261;c pakiet za pomoc&#261; klasycznej mantry: python setup.py install.  &lt;del&gt;Jak SOAPpy nie zadzia&#322;a, to na li&#347;cie do sprawdzenia mam jeszcze &lt;a href="http://trac.optio.webfactional.com"&gt;soaplib&lt;/a&gt;.&lt;/del&gt; SOAPpy tu zadzia&#322;a&#322; ale wysypuje si&#281; w innym miejscu&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Pr&#243;buj&#261;c rozwi&#261;za&#263; problem dotar&#322;em dobardzo ciekawych tekst&#243;w polemiki &lt;span class="caps"&gt;SOAP&lt;/span&gt; vs &lt;span class="caps"&gt;REST&lt;/span&gt;. Chodzi mi o artyku&#322; &lt;a href="http://wanderingbarque.com/nonintersecting/2006/11/15/the-s-stands-for-simple/"&gt;The S stands for Simple&lt;/a&gt; oraz 3-cz&#281;&#347;ciowy (kolejne maj&#261; by&#263; napisane) &lt;a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/"&gt;The &lt;span class="caps"&gt;REST&lt;/span&gt; Dialogues&lt;/a&gt;.  Ten drugi to ciekawy dialog z fikcyjnym pracownikiem eBay (preferuj&#261;cym klasyczne podej&#347;cie z &lt;span class="caps"&gt;SOAP&lt;/span&gt; i udost&#281;pnianiem dziesi&#261;tek funkcji) ze zwolennikiem &lt;span class="caps"&gt;REST&lt;/span&gt;&amp;#8217;a.&lt;/p&gt;


	&lt;p&gt;Lektura tych tekst&#243;w u&#347;wiadomi&#322;a mi kilka rzeczy. Np. dlaczego jedne web serwisy Googli dzia&#322;aj&#261; a Microsoftu &amp;#8211; nie.  Wszystko wskazuj na to, &#380;e &lt;span class="caps"&gt;SOAP&lt;/span&gt; jest kiepskim protoko&#322;em. Jest niedopracowany i niejednoznaczny co daje innym za du&#380;e pole do wprowadzania autorskich modyfikacji.  kto jak kto, al e firma M$ bardzo skwapliwie z takich rzeczy korzysta. Microsoft si&#281; chyba lubuje we wprowadzaniu zamieszania.  Ich Internet Explorer nie tylko do dzi&#347; ma zamiaru liczy si&#281; ze standardami &lt;span class="caps"&gt;W3C&lt;/span&gt; ale tak&#380;e nie jest zgodny ze samym sob&#261; (tj. wcze&#347;niejszymi swymi wersjami).  Za&#322;o&#380;&#281; si&#281; &#380;e co&#347; spieprzyli z &lt;span class="caps"&gt;SOAP&lt;/span&gt;. Jak ma si&#281; szcz&#281;&#347;cie to dzia&#322;a, jak nie, to zmuszaj&#261; ci&#281; aby&#347; korzysta&#322; z Windozy i ich rozwi&#261;za&#324;. Taka ich durna strategia &#380;e M$ ma najwyra&#378;niej wszystkie standardy gdzie&#347; i chce aby jego &amp;#8220;pomys&#322;y&amp;#8221; by&#322;y standardem i prawem dla wszystkich.&lt;/p&gt;


	&lt;p&gt;Druga rzecz, to sama kwestia filozofii &lt;span class="caps"&gt;REST&lt;/span&gt; vs klasyczne web serwisy. Np. deweloperzy &lt;a href="http://rubyonrails.org"&gt;Rails&#243;w&lt;/a&gt;, mimo &#380;e wspieraj&#261; jeszcze &lt;span class="caps"&gt;SOAP&lt;/span&gt; oraz i &lt;span class="caps"&gt;XML&lt;/span&gt;-RPC planuj&#261; wyrzuci&#263; obie te biblioteki poza nawias g&#322;&#243;wnego kodu swojego frameworka. Chc&#261; si&#281; zamiast tego skupi&#263; na &lt;span class="caps"&gt;REST&lt;/span&gt;. W kolejnych wersjach Rails&#243;w (2.0?) &lt;span class="caps"&gt;SOAP&lt;/span&gt; i &lt;span class="caps"&gt;XML&lt;/span&gt;-RPC b&#281;d&#261; co prawda dost&#281;pne ale ju&#380; tylko jako dodatkowe pluginy.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;REST&lt;/span&gt; to nie &#322;adniejsze adresy &lt;span class="caps"&gt;URL&lt;/span&gt; i prostsze operacje czytania i zmiany zasob&#243;w serwera,. To tak&#380;e troch&#281; inna filozofia pracy zwi&#261;zana z podej&#347;ciem deklaratywnym a nie imperatywnym. Oparta nie tyle na zdarzeniach, co na stanach zasob&#243;w identyfikowanych jednoznacznie przez adres &lt;span class="caps"&gt;URL&lt;/span&gt; i przypisan&#261; mu akcj&#281;. (W najprotszej postaci &lt;span class="caps"&gt;GET&lt;/span&gt; s&#322;u&#380;y do odczytu zasobu, a &lt;span class="caps"&gt;POST&lt;/span&gt; do zmiany jego stanu).&lt;/p&gt;


	&lt;p&gt;Sprawa wygl&#261;d ciekawie i jestem zach&#281;cony aby j&#261; zbada&#263; i opisa&#263; po&#378;niej dok&#322;adniej i na przyk&#322;adach. Na razie odsy&#322;am do w/w artyku&#322;&#243;w kt&#243;re wszystko opisuj&#261; bardziej szczeg&#243;&#322;owo. Mi&#322;o&#347;nik&#243;w Rails&#243;w odsy&#322;am te&#380; do ksi&#261;&#380;ki &lt;a href="http://www.oreilly.com/catalog/9780596527310/"&gt;Rails Cookbook&lt;/a&gt; kt&#243;ra ma ca&#322;y rozdzia&#322; po&#347;wi&#281;cony zastosowaniu w &lt;span class="caps"&gt;REST&lt;/span&gt; w Ruby on Rails.&lt;/p&gt;


&lt;hr /&gt;

	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Jaki&#347; czas temu na jednej z konferencji w Warszawie firma Macromedia wychwala&#322;a pod niebiosa u&#380;ywanie web serwis&#243;w we Flashu. Aktualnie Macromedi&#281; wch&#322;on&#281;&#322;a firma Adobe.&lt;/p&gt;</description>
      <pubDate>Fri, 23 Mar 2007 01:50:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:3c1ea77c-f3b4-4f14-9281-00acdd90485c</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap</link>
      <category>rest</category>
      <category>soap</category>
      <category>xmlrpc</category>
      <category>python</category>
      <category>ruby</category>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by Micha&#322;</title>
      <description>&lt;p&gt;Stic, oto wersja zsi(nie dzialajaca):
from ZSI.ServiceProxy import ServiceProxy
import sys&lt;/p&gt;


	&lt;p&gt;wsdlFile = &amp;#8216;&lt;a href="http://www.xmethods.net/sd/2001/TemperatureService.wsdl" rel="nofollow"&gt;http://www.xmethods.net/sd/2001/TemperatureService.wsdl&lt;/a&gt;&amp;#8217;
proxy = ServiceProxy(wsdlFile, tracefile=sys.stdout)
print 
print proxy.getTemp(Message = &amp;#8216;80218&amp;#8217;)&lt;/p&gt;


	&lt;p&gt;a to wersja soappy(dzialajaca):
from SOAPpy import WSDL&lt;/p&gt;


	&lt;p&gt;wsdlFile = &amp;#8216;&lt;a href="http://www.xmethods.net/sd/2001/TemperatureService.wsdl" rel="nofollow"&gt;http://www.xmethods.net/sd/2001/TemperatureService.wsdl&lt;/a&gt;&amp;#8217;
server = WSDL.Proxy(wsdlFile)    
print server.getTemp(&amp;#8216;80218&amp;#8217;)&lt;/p&gt;</description>
      <pubDate>Tue, 27 Mar 2007 22:42:36 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:107d125e-8e35-4c61-90c5-b5c2860c6408</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-625</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by stic</title>
      <description>&lt;p&gt;A mo&#380;esz zaprezentowa&#263; tego WSDL&amp;#8217;a &amp;#8211; mo&#380;e co&#347; tam si&#281; niezbyt &#322;adnie wygenerowa&#322;o &amp;#8211; np. pr&#243;bujesz na zewn&#261;trz wyrzuci&#263; dane, kt&#243;rych typy nie zosta&#322;y rozbite na cz&#281;&#347;ci (typy) pierwsze zrozumia&#322;e przez namespace&amp;#8217;y W3C (standardowo, je&#347;li wygenerowa&#322;e&#347; WSDL&amp;#8217;a z kodu, mo&#380;e tak by&#263;), mo&#380;e te&#380; chodzi&#263; o jakie&#347; inne inszo&#347;ci.&lt;/p&gt;


	&lt;p&gt;Generalnie problem z WS&amp;#8217;ami w .NET&amp;#8217;cie jest taki, &#380;e sporo ludzi najpierw pisze kod, p&#243;&#378;niej generuje WSDL&amp;#8217;a, i dopiero integruj&#261;c to z czym&#347; zewn&#281;trznym dziwi si&#281;, &#380;e nie dzia&#322;a.. A przecie&#380; (IMHO) WSDL powinien by&#263; napisany przed kodem, i kod powinien by&#263; pod niego podrasowany.
Z tego co pami&#281;tam, np. w gSOAP&amp;#8217;ie (w C++) mia&#322;em webserwis kt&#243;ry definiowa&#322; sobie enumeracj&#281; w kt&#243;rej nie tolerowa&#322; znaczka &amp;#8217;_&amp;#8217; (albo &amp;#8216;&amp;#8216;), natomiast dok&#322;adnie na odwr&#243;t by&#322;o w .NET&amp;#8217;cie ;))&lt;/p&gt;</description>
      <pubDate>Tue, 27 Mar 2007 16:38:13 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:4e926d76-abff-4e4a-9c25-dd50df07495f</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-623</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by Micha&#322;</title>
      <description>&lt;p&gt;Skoro znalax&#322; pan buga w soappy to proponuje zglosic jakiegos patcha. A tak w temacie to mi np ZSI nie dziala z serwisem  &lt;a href="http://www.xmethods.net/sd/2001/TemperatureService.wsdl" rel="nofollow"&gt;http://www.xmethods.net/sd/2001/TemperatureService.wsdl&lt;/a&gt;
przy wywolaniu mentody getTempt pluje wyjatkiem natomiast soappy dziala bez zarzutu, a to podobno zsi jest bardziej rozwijany i ma zastapic soappy. Do tego ma tak trywialne bugi jak przekazanie dwoch argumentow do funkcji str. Zenada&lt;/p&gt;</description>
      <pubDate>Tue, 27 Mar 2007 00:42:55 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:cde7487a-0c4a-444e-9a33-74f74eebad53</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-621</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by cezio</title>
      <description>&lt;p&gt;Szczerze: xml-rpc :) troch&#281; zapomniany, lekki (o ile mo&#380;na u&#380;y&#263; takiego okre&#347;lenia do xml&amp;#8217;a), oferuje podobne mo&#380;liwo&#347;ci jak soap, a przy tym prosty jak drut (pe&#322;na specyfikacja to kilka stron..). Ewentualnie JSON-RPC (zaleta: 0% xml&amp;#8217;a, reszta jak w xml-rpc:)&lt;/p&gt;</description>
      <pubDate>Sat, 24 Mar 2007 14:00:58 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a5de735f-d3e4-484a-b4a0-bbc459bbd427</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-619</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by JakisKtos</title>
      <description>&lt;p&gt;To na czym w ko&#324;cu lepiej si&#281; opiera&#263; na REST czy SOAP??&lt;/p&gt;


	&lt;p&gt;Kt&#243;re rozwiazanie jest ciekawsze/lepsze ??
====
Prosz&#281; o konkrety :)&lt;/p&gt;</description>
      <pubDate>Sat, 24 Mar 2007 10:40:13 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ec6135fc-5528-4734-858e-48dc4bd28328</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-618</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by Micha&#322; Kwiatkowski</title>
      <description>&lt;blockquote&gt;
		&lt;p&gt;ZSI zainstalowa&#322;a si&#281; w postaci jednego, binarnego pliku egg&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;eggi to zwyk&#322;e archiwa zip&lt;/p&gt;</description>
      <pubDate>Fri, 23 Mar 2007 20:25:55 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:cc5a93d8-d901-4dbc-9e4d-06dbe438b0dc</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-617</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Przecie&#380; nie mo&#380;na wyrzuci&#263; protoko&#322;&#243;w z core code. :) Wyrzuca si&#281; tylko biblioteki. Oczywi&#347;cie &#380;e to by&#322; skr&#243;t. BTW, SOAPpy zadzia&#322;a&#322; (cho&#263; musia&#322;em poprawi&#263; 3 trywialne b&#322;&#281;dy w &#378;r&#243;dle blokuj&#261;ce jego dzia&#322;anie dla Pythona 2.5)&lt;/p&gt;</description>
      <pubDate>Fri, 23 Mar 2007 12:14:50 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:12d5fba0-c07d-4adb-b4cd-d94fdda9da66</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-616</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by Drogomir</title>
      <description>&lt;p&gt;&amp;#8220;mo&#380;e warto zauwa&#380;y&#263;, &#380;e SOAP i XML-RPC to nie biblioteki, a protoko&#322;y&#8230;&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Czepiasz si&#281;. Ja tu widz&#281; zwyk&#322;y skr&#243;t my&#347;lowy&amp;#8230;&lt;/p&gt;


	&lt;p&gt;A co do REST on Rails, to znalaz&#322;em fajn&#261; &lt;a href="http://www.b-simple.de/documents/download/5" rel="nofollow"&gt;ksi&#261;&#380;k&#281; w pdfie&lt;/a&gt;, kt&#243;ra fajnie opisuje jak si&#281; szybko przerzuci&#263;. Je&#380;eli kto&#347; nie ma dost&#281;pu do publikacji papierowych, to b&#281;dzie w sam raz :)&lt;/p&gt;</description>
      <pubDate>Fri, 23 Mar 2007 09:59:31 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:53498294-788c-4183-864e-05bc10c790db</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-615</link>
    </item>
    <item>
      <title>"Python, SOAP, REST i Rails" by rsz</title>
      <description>&lt;p&gt;&amp;#8220;mimo &#380;e wspieraj&#261; jeszcze SOAP oraz i XML-RPC planuj&#261; wyrzuci&#263; obie te biblioteki poza nawias&amp;#8221; &amp;#8211; mo&#380;e warto zauwa&#380;y&#263;, &#380;e SOAP i XML-RPC to nie biblioteki, a protoko&#322;y&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Fri, 23 Mar 2007 09:45:52 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:0dc4880f-589f-470f-ad59-5070248e23be</guid>
      <link>http://blog.zabiello.com/articles/2007/03/23/rest-soap#comment-614</link>
    </item>
  </channel>
</rss>
