2
votes

I have the following code to parse an RSS feed:

$doc = new DOMDocument();                                                                                                                                                                                                                                                   
$doc->load('http://gdata.youtube.com/feeds/api/users/user/uploads?orderby=viewCount');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('entry') as $node) {
  $itemRSS = array ( 
    'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
    'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
    'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
    'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
  );
  array_push($arrFeeds, $itemRSS);
}

The feed is something like this:

<title type='text'>Handelswetenschappen</title>
<link rel='alternate' type='text/html' href='http://www.youtube.com/watch?v=eDiF7jVsoAQ&amp;feature=youtube_gdata'/>
<media:group>
  <media:category label='Onderwijs' scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>Education</media:category>
  <media:content url='http://www.youtube.com/v/eDiF7jVsoAQ?version=3&amp;f=user_uploads&amp;app=youtube_gdata' type='application/x-shockwave-flash' medium='video' isDefault='true' expression='full' duration='253' yt:format='5'/>
  <media:content url='rtsp://v3.cache4.c.youtube.com/CigLENy73wIaHwkEoGw17oU4eBMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='253' yt:format='1'/>
  <media:content url='rtsp://v6.cache8.c.youtube.com/CigLENy73wIaHwkEoGw17oU4eBMYESARFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='253' yt:format='6'/>
  <media:description type='plain'>Wil jij meer weten over de opleiding Handelswetenschappen? Bekijk dan snel dit filmpje. Studenten Lise en Jean-Marie vertellen je alles over Handelswetenschappen studeren. Ze gaan langs bij de decaan, bij een oud-student en bij toekomstig werkgever.</media:description>
  <media:keywords>HUB, hubrussel, hogeschool, universiteit, brussel, unief, studie, student, studeren, studentenleven, kot, examen, les, cursus, prof, docent, diploma, bachelor, master, professioneel, academisch, opleiding, blokken, eindwerk, eindproef, masterproef, stage, studentenclub, cantus, studiebegeleiding, geslaagd, spieken, fuif, uitgaan, job, studentenjob, handelswetenschappen, economie, TW, toegepaste, economische, wetenschappen, ehsal</media:keywords>
  <media:player url='http://www.youtube.com/watch?v=eDiF7jVsoAQ&amp;feature=youtube_gdata_player'/>
  <media:thumbnail url='http://i.ytimg.com/vi/eDiF7jVsoAQ/0.jpg' height='360' width='480' time='00:02:06.500'/>
  <media:thumbnail url='http://i.ytimg.com/vi/eDiF7jVsoAQ/1.jpg' height='90' width='120' time='00:01:03.250'/>
  <media:thumbnail url='http://i.ytimg.com/vi/eDiF7jVsoAQ/2.jpg' height='90' width='120' time='00:02:06.500'/>
  <media:thumbnail url='http://i.ytimg.com/vi/eDiF7jVsoAQ/3.jpg' height='90' width='120' time='00:03:09.750'/>
  <media:title type='plain'>Handelswetenschappen aan de HUB</media:title>
  <yt:duration seconds='253'/>
</media:group>

With the code above, I am able to fetch the title and description. What I need to know is how to get the link, so actually an attribute of the item 'link', the media:content url or the media:player url.

1
just a comment - RSS feed is an XML document, so you'd be better of by using SimpleXML or other XML parser instead of a DOMDocument. - Aurimas
I've seen both, why is the one better than the other? - samn
Well, DOM parsers are meant to parse DOM trees, and have specific functions for that. XML parsers are meant to parse XML, and thus can help you handle custom namespaces (<media:XX stuff), allow XPath searches, and, I guess, are faster. It's essentially matching the tool with the content you work with. - Aurimas

1 Answers

2
votes
$link  = $element->getAttribute("href");

So I guess you'll want something like this, modify the line where you've written:

'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,

Change it to this:

'link' => $node->getElementsByTagName('link')->getAttribute('href'),