]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - tests/ActivityParseTests.php
Merge branch 'testing' of git@gitorious.org:statusnet/mainline into 0.9.x
[quix0rs-gnu-social.git] / tests / ActivityParseTests.php
1 <?php
2
3 if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
4     print "This script must be run from the command line\n";
5     exit();
6 }
7
8 // XXX: we should probably have some common source for this stuff
9
10 define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
11 define('STATUSNET', true);
12
13 require_once INSTALLDIR . '/lib/common.php';
14
15 class ActivityParseTests extends PHPUnit_Framework_TestCase
16 {
17     public function testExample1()
18     {
19         global $_example1;
20         $dom = DOMDocument::loadXML($_example1);
21         $act = new Activity($dom->documentElement);
22
23         $this->assertFalse(empty($act));
24
25         $this->assertEquals($act->time, 1243860840);
26         $this->assertEquals($act->verb, ActivityVerb::POST);
27
28         $this->assertFalse(empty($act->object));
29         $this->assertEquals($act->object->title, 'Punctuation Changeset');
30         $this->assertEquals($act->object->type, 'http://versioncentral.example.org/activity/changeset');
31         $this->assertEquals($act->object->summary, 'Fixing punctuation because it makes it more readable.');
32         $this->assertEquals($act->object->id, 'tag:versioncentral.example.org,2009:/change/1643245');
33     }
34
35     public function testExample3()
36     {
37         global $_example3;
38         $dom = DOMDocument::loadXML($_example3);
39
40         $feed = $dom->documentElement;
41
42         $entries = $feed->getElementsByTagName('entry');
43
44         $entry = $entries->item(0);
45
46         $act = new Activity($entry, $feed);
47
48         $this->assertFalse(empty($act));
49         $this->assertEquals($act->time, 1071340202);
50         $this->assertEquals($act->link, 'http://example.org/2003/12/13/atom03.html');
51
52         $this->assertEquals($act->verb, ActivityVerb::POST);
53
54         $this->assertFalse(empty($act->actor));
55         $this->assertEquals($act->actor->type, ActivityObject::PERSON);
56         $this->assertEquals($act->actor->title, 'John Doe');
57         $this->assertEquals($act->actor->id, 'mailto:johndoe@example.com');
58
59         $this->assertFalse(empty($act->object));
60         $this->assertEquals($act->object->type, ActivityObject::NOTE);
61         $this->assertEquals($act->object->id, 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a');
62         $this->assertEquals($act->object->title, 'Atom-Powered Robots Run Amok');
63         $this->assertEquals($act->object->summary, 'Some text.');
64         $this->assertEquals($act->object->link, 'http://example.org/2003/12/13/atom03.html');
65
66         $this->assertFalse(empty($act->context));
67
68         $this->assertTrue(empty($act->target));
69
70         $this->assertEquals($act->entry, $entry);
71         $this->assertEquals($act->feed, $feed);
72     }
73
74     public function testExample4()
75     {
76         global $_example4;
77         $dom = DOMDocument::loadXML($_example4);
78
79         $entry = $dom->documentElement;
80
81         $act = new Activity($entry);
82
83         $this->assertFalse(empty($act));
84         $this->assertEquals(1266547958, $act->time);
85         $this->assertEquals('http://example.net/notice/14', $act->link);
86
87         $this->assertFalse(empty($act->context));
88         $this->assertEquals('http://example.net/notice/12', $act->context->replyToID);
89         $this->assertEquals('http://example.net/notice/12', $act->context->replyToUrl);
90         $this->assertEquals('http://example.net/conversation/11', $act->context->conversation);
91         $this->assertEquals(array('http://example.net/user/1'), $act->context->attention);
92
93         $this->assertFalse(empty($act->object));
94         $this->assertEquals($act->object->content,
95                             '@<span class="vcard"><a href="http://example.net/user/1" class="url"><span class="fn nickname">evan</span></a></span> now is the time for all good men to come to the aid of their country. #<span class="tag"><a href="http://example.net/tag/thetime" rel="tag">thetime</a></span>');
96
97         $this->assertFalse(empty($act->actor));
98     }
99
100     public function testExample5()
101     {
102         global $_example5;
103         $dom = DOMDocument::loadXML($_example5);
104
105         $feed = $dom->documentElement;
106
107         // @todo Test feed elements
108
109         $entries = $feed->getElementsByTagName('entry');
110         $entry = $entries->item(0);
111
112         $act = new Activity($entry, $feed);
113
114         // Post
115         $this->assertEquals($act->verb, ActivityVerb::POST);
116         $this->assertFalse(empty($act->context));
117
118         // Actor w/Portable Contacts stuff
119         $this->assertFalse(empty($act->actor));
120         $this->assertEquals($act->actor->type, ActivityObject::PERSON);
121         $this->assertEquals($act->actor->title, 'Test User');
122         $this->assertEquals($act->actor->id, 'http://example.net/mysite/user/3');
123         $this->assertEquals($act->actor->link, 'http://example.net/mysite/testuser');
124
125         $avatars = $act->actor->avatarLinks;
126
127         $this->assertEquals(
128                 $avatars[0]->url,
129                 'http://example.net/mysite/avatar/3-96-20100224004207.jpeg'
130         );
131
132         $this->assertEquals($act->actor->displayName, 'Test User');
133
134         $poco = $act->actor->poco;
135         $this->assertEquals($poco->preferredUsername, 'testuser');
136         $this->assertEquals($poco->address->formatted, 'San Francisco, CA');
137         $this->assertEquals($poco->urls[0]->type, 'homepage');
138         $this->assertEquals($poco->urls[0]->value, 'http://example.com/blog.html');
139         $this->assertEquals($poco->urls[0]->primary, 'true');
140         $this->assertEquals($act->actor->geopoint, '37.7749295 -122.4194155');
141     }
142
143     public function testExample6()
144     {
145         global $_example6;
146
147         $dom = DOMDocument::loadXML($_example6);
148
149         $rss = $dom->documentElement;
150
151         $channels = $dom->getElementsByTagName('channel');
152
153         $channel = $channels->item(0);
154
155         $items = $channel->getElementsByTagName('item');
156
157         $item = $items->item(0);
158
159         $act = new Activity($item, $channel);
160
161         $this->assertEquals($act->verb, ActivityVerb::POST);
162
163         $this->assertEquals($act->id, 'http://en.blog.wordpress.com/?p=3857');
164         $this->assertEquals($act->link, 'http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/');
165         $this->assertEquals($act->title, 'Rub-a-Dub-Dub in the PubSubHubbub');
166         $this->assertEquals($act->time, 1267634892);
167
168         $actor = $act->actor;
169
170         $this->assertFalse(empty($actor));
171         $this->assertEquals($actor->title, "Joseph Scott");
172     }
173 }
174
175 $_example1 = <<<EXAMPLE1
176 <?xml version='1.0' encoding='UTF-8'?>
177 <entry xmlns='http://www.w3.org/2005/Atom' xmlns:activity='http://activitystrea.ms/spec/1.0/'>
178   <id>tag:versioncentral.example.org,2009:/commit/1643245</id>
179   <published>2009-06-01T12:54:00Z</published>
180   <title>Geraldine committed a change to yate</title>
181   <content type="xhtml">Geraldine just committed a change to yate on VersionCentral</content>
182   <link rel="alternate" type="text/html"
183         href="http://versioncentral.example.org/geraldine/yate/commit/1643245" />
184   <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
185   <activity:verb>http://versioncentral.example.org/activity/commit</activity:verb>
186   <activity:object>
187     <activity:object-type>http://versioncentral.example.org/activity/changeset</activity:object-type>
188     <id>tag:versioncentral.example.org,2009:/change/1643245</id>
189     <title>Punctuation Changeset</title>
190     <summary>Fixing punctuation because it makes it more readable.</summary>
191     <link rel="alternate" type="text/html" href="..." />
192   </activity:object>
193 </entry>
194 EXAMPLE1;
195
196 $_example2 = <<<EXAMPLE2
197 <?xml version='1.0' encoding='UTF-8'?>
198 <entry xmlns='http://www.w3.org/2005/Atom' xmlns:activity='http://activitystrea.ms/spec/1.0/'>
199   <id>tag:photopanic.example.com,2008:activity01</id>
200   <title>Geraldine posted a Photo on PhotoPanic</title>
201   <published>2008-11-02T15:29:00Z</published>
202   <link rel="alternate" type="text/html" href="/geraldine/activities/1" />
203   <activity:verb>
204   http://activitystrea.ms/schema/1.0/post
205   </activity:verb>
206   <activity:object>
207     <id>tag:photopanic.example.com,2008:photo01</id>
208     <title>My Cat</title>
209     <published>2008-11-02T15:29:00Z</published>
210     <link rel="alternate" type="text/html" href="/geraldine/photos/1" />
211     <activity:object-type>
212       tag:atomactivity.example.com,2008:photo
213     </activity:object-type>
214     <source>
215       <title>Geraldine's Photos</title>
216       <link rel="self" type="application/atom+xml" href="/geraldine/photofeed.xml" />
217       <link rel="alternate" type="text/html" href="/geraldine/" />
218     </source>
219   </activity:object>
220   <content type="html">
221      &lt;p&gt;Geraldine posted a Photo on PhotoPanic&lt;/p&gt;
222      &lt;img src="/geraldine/photo1.jpg"&gt;
223   </content>
224 </entry>
225 EXAMPLE2;
226
227 $_example3 = <<<EXAMPLE3
228 <?xml version="1.0" encoding="utf-8"?>
229
230 <feed xmlns="http://www.w3.org/2005/Atom">
231
232     <title>Example Feed</title>
233     <subtitle>A subtitle.</subtitle>
234     <link href="http://example.org/feed/" rel="self" />
235     <link href="http://example.org/" />
236     <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
237     <updated>2003-12-13T18:30:02Z</updated>
238     <author>
239         <name>John Doe</name>
240         <email>johndoe@example.com</email>
241     </author>
242
243     <entry>
244         <title>Atom-Powered Robots Run Amok</title>
245         <link href="http://example.org/2003/12/13/atom03" />
246         <link rel="alternate" type="text/html" href="http://example.org/2003/12/13/atom03.html"/>
247         <link rel="edit" href="http://example.org/2003/12/13/atom03/edit"/>
248         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
249         <updated>2003-12-13T18:30:02Z</updated>
250         <summary>Some text.</summary>
251     </entry>
252
253 </feed>
254 EXAMPLE3;
255
256 $_example4 = <<<EXAMPLE4
257 <?xml version='1.0' encoding='UTF-8'?>
258 <entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:ostatus="http://ostatus.org/schema/1.0">
259  <title>@evan now is the time for all good men to come to the aid of their country. #thetime</title>
260  <summary>@evan now is the time for all good men to come to the aid of their country. #thetime</summary>
261 <author>
262  <name>spock</name>
263  <uri>http://example.net/user/2</uri>
264 </author>
265 <activity:actor>
266  <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
267  <id>http://example.net/user/2</id>
268  <title>spock</title>
269  <link type="image/png" rel="avatar" href="http://example.net/theme/identica/default-avatar-profile.png"></link>
270 </activity:actor>
271  <link rel="alternate" type="text/html" href="http://example.net/notice/14"/>
272  <id>http://example.net/notice/14</id>
273  <published>2010-02-19T02:52:38+00:00</published>
274  <updated>2010-02-19T02:52:38+00:00</updated>
275  <link rel="related" href="http://example.net/notice/12"/>
276  <thr:in-reply-to ref="http://example.net/notice/12" href="http://example.net/notice/12"></thr:in-reply-to>
277  <link rel="ostatus:conversation" href="http://example.net/conversation/11"/>
278  <link rel="ostatus:attention" href="http://example.net/user/1"/>
279  <content type="html">@&lt;span class=&quot;vcard&quot;&gt;&lt;a href=&quot;http://example.net/user/1&quot; class=&quot;url&quot;&gt;&lt;span class=&quot;fn nickname&quot;&gt;evan&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; now is the time for all good men to come to the aid of their country. #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://example.net/tag/thetime&quot; rel=&quot;tag&quot;&gt;thetime&lt;/a&gt;&lt;/span&gt;</content>
280  <category term="thetime"></category>
281 </entry>
282 EXAMPLE4;
283
284 $_example5 = <<<EXAMPLE5
285 <?xml version="1.0" encoding="UTF-8"?>
286 <feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0">
287  <id>3</id>
288  <title>testuser timeline</title>
289  <subtitle>Updates from testuser on Zach Dev!</subtitle>
290  <logo>http://example.net/mysite/avatar/3-96-20100224004207.jpeg</logo>
291  <updated>2010-02-24T06:38:49+00:00</updated>
292 <author>
293  <name>testuser</name>
294  <uri>http://example.net/mysite/user/3</uri>
295
296 </author>
297  <link href="http://example.net/mysite/testuser" rel="alternate" type="text/html"/>
298  <link href="http://example.net/mysite/api/statuses/user_timeline/3.atom" rel="self" type="application/atom+xml"/>
299  <link href="http://example.net/mysite/main/sup#3" rel="http://api.friendfeed.com/2008/03#sup" type="application/json"/>
300  <link href="http://example.net/mysite/main/push/hub" rel="hub"/>
301  <link href="http://example.net/mysite/main/salmon/user/3" rel="salmon"/>
302 <activity:subject>
303  <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
304  <id>http://example.net/mysite/user/3</id>
305  <title>Test User</title>
306  <link rel="alternate" type="text/html" href="http://example.net/mysite/testuser"/>
307  <link type="image/jpeg" rel="avatar" href="http://example.net/mysite/avatar/3-96-20100224004207.jpeg"/>
308  <georss:point>37.7749295 -122.4194155</georss:point>
309
310 <poco:preferredUsername>testuser</poco:preferredUsername>
311 <poco:displayName>Test User</poco:displayName>
312 <poco:note>Just another test user.</poco:note>
313 <poco:address>
314  <poco:formatted>San Francisco, CA</poco:formatted>
315 </poco:address>
316 <poco:urls>
317  <poco:type>homepage</poco:type>
318  <poco:value>http://example.com/blog.html</poco:value>
319  <poco:primary>true</poco:primary>
320
321 </poco:urls>
322 </activity:subject>
323 <entry>
324  <title>Hey man, is that Freedom Code?! #freedom #hippy</title>
325  <summary>Hey man, is that Freedom Code?! #freedom #hippy</summary>
326 <author>
327  <name>testuser</name>
328  <uri>http://example.net/mysite/user/3</uri>
329 </author>
330 <activity:actor>
331  <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
332  <id>http://example.net/mysite/user/3</id>
333  <title>Test User</title>
334  <link rel="alternate" type="text/html" href="http://example.net/mysite/testuser"/>
335  <link type="image/jpeg" rel="avatar" href="http://example.net/mysite/avatar/3-96-20100224004207.jpeg"/>
336  <georss:point>37.7749295 -122.4194155</georss:point>
337
338 <poco:preferredUsername>testuser</poco:preferredUsername>
339 <poco:displayName>Test User</poco:displayName>
340 <poco:note>Just another test user.</poco:note>
341 <poco:address>
342  <poco:formatted>San Francisco, CA</poco:formatted>
343 </poco:address>
344 <poco:urls>
345  <poco:type>homepage</poco:type>
346  <poco:value>http://example.com/blog.html</poco:value>
347  <poco:primary>true</poco:primary>
348
349 </poco:urls>
350 </activity:actor>
351  <link rel="alternate" type="text/html" href="http://example.net/mysite/notice/7"/>
352  <id>http://example.net/mysite/notice/7</id>
353  <published>2010-02-24T00:53:06+00:00</published>
354  <updated>2010-02-24T00:53:06+00:00</updated>
355  <link rel="ostatus:conversation" href="http://example.net/mysite/conversation/7"/>
356  <content type="html">Hey man, is that Freedom Code?! #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://example.net/mysite/tag/freedom&quot; rel=&quot;tag&quot;&gt;freedom&lt;/a&gt;&lt;/span&gt; #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://example.net/mysite/tag/hippy&quot; rel=&quot;tag&quot;&gt;hippy&lt;/a&gt;&lt;/span&gt;</content>
357  <georss:point>37.8313160 -122.2852473</georss:point>
358
359 </entry>
360 </feed>
361 EXAMPLE5;
362
363 $_example6 = <<<EXAMPLE6
364 <?xml version="1.0" encoding="UTF-8"?>
365 <rss version="2.0"
366         xmlns:content="http://purl.org/rss/1.0/modules/content/"
367         xmlns:wfw="http://wellformedweb.org/CommentAPI/"
368         xmlns:dc="http://purl.org/dc/elements/1.1/"
369         xmlns:atom="http://www.w3.org/2005/Atom"
370         xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
371         xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
372         xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
373         >
374
375         <channel>
376                 <title>WordPress.com News</title>
377                 <atom:link href="http://en.blog.wordpress.com/feed/" rel="self" type="application/rss+xml" />
378                 <link>http://en.blog.wordpress.com</link>
379                 <description>The latest news on WordPress.com and the WordPress community.</description>
380                 <lastBuildDate>Thu, 18 Mar 2010 23:25:35 +0000</lastBuildDate>
381
382                 <generator>http://wordpress.com/</generator>
383                 <language>en</language>
384                 <sy:updatePeriod>hourly</sy:updatePeriod>
385                 <sy:updateFrequency>1</sy:updateFrequency>
386                 <cloud domain='en.blog.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
387                 <image>
388                         <url>http://www.gravatar.com/blavatar/e6392390e3bcfadff3671c5a5653d95b?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
389                         <title>WordPress.com News</title>
390                         <link>http://en.blog.wordpress.com</link>
391                 </image>
392                 <atom:link rel="search" type="application/opensearchdescription+xml" href="http://en.blog.wordpress.com/osd.xml" title="WordPress.com News" />
393                 <atom:link rel='hub' href='http://en.blog.wordpress.com/?pushpress=hub'/>
394
395                 <item>
396                         <title>Rub-a-Dub-Dub in the PubSubHubbub</title>
397                         <link>http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/</link>
398                         <comments>http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/#comments</comments>
399                         <pubDate>Wed, 03 Mar 2010 16:48:12 +0000</pubDate>
400                         <dc:creator>Joseph Scott</dc:creator>
401
402                         <category><![CDATA[Feeds]]></category>
403                         <category><![CDATA[atom]]></category>
404                         <category><![CDATA[pubsubhubbub]]></category>
405                         <category><![CDATA[rss]]></category>
406
407                         <guid isPermaLink="false">http://en.blog.wordpress.com/?p=3857</guid>
408                         <description><![CDATA[From the tongue twisting name department we welcome PubSubHubbub, or as some people have shortened it to: PuSH.  Like rssCloud, PuSH is a way for services that subscribe to updates from your blog (think Google Reader, Bloglines or Netvibes) to get updates even faster.  In a nutshell, instead of having to periodically ask [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=en.blog.wordpress.com&blog=3584907&post=3857&subd=en.blog&ref=&feed=1" />]]></description>
409                                 <content:encoded><![CDATA[<p>From the tongue twisting name department we welcome <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a>, or as some people have shortened it to: PuSH.  Like <a href="http://en.blog.wordpress.com/2009/09/07/rss-in-the-clouds/">rssCloud</a>, PuSH is a way for services that subscribe to updates from your blog (think Google Reader, Bloglines or Netvibes) to get updates even faster.  In a nutshell, instead of having to periodically ask your blog if there are any updates they can now register to automatically receive updates each time you publish new content.  In most cases these updates are sent out within a second or two of when you hit the publish button.</p>
410         <p>Today we&#8217;ve turned on PuSH support for the more than 10.5 million blogs on WordPress.com.  There&#8217;s nothing to configure, it&#8217;s working right now behind the scenes to help others keep up to date with your posts.</p>
411         <p>For those using the WordPress.org software we are releasing a new PuSH plugin: <a href="http://wordpress.org/extend/plugins/pushpress/">PuSHPress</a>.  This plugin differs from the current PuSH related plugins by including a built-in hub.</p>
412         <p>For more PuSH related reading check out the <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub project site</a> and <a href="http://groups.google.com/group/pubsubhubbub?pli=1">Google Group</a>.  And if you really want to geek out there&#8217;s always the <a href="http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html">PubSubHubbub Spec</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
413         <br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/en.blog.wordpress.com/3857/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=en.blog.wordpress.com&blog=3584907&post=3857&subd=en.blog&ref=&feed=1" />]]></content:encoded>
414                                 <wfw:commentRss>http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/feed/</wfw:commentRss>
415
416                         <slash:comments>96</slash:comments>
417
418                         <media:content url="http://1.gravatar.com/avatar/582b66ad5ae1b69c7601a990cb9a661a?s=96&#38;d=identicon" medium="image">
419                                 <media:title type="html">josephscott</media:title>
420                         </media:content>
421                 </item>
422         </channel>
423 </rss>
424 EXAMPLE6;
425