Jump to content

Recommended Posts

hi everybody,

 

I'm new on this forum. I was first on a dutch website, but they don't work at night. I am a student on the art academy in Arnhem (The Netherlands) and i study Interaction Design.  So i'll ask my question here.

 

I got a script that copys RSS  to MYSQL and i got it on one site working, so i know it works. The step after this is visualizing it in Processing (a visual scripting program).  The script is:

<?php 
header ('Content-type: text/html; charset=utf-8');
?>

<html>
<head>
<meta http-equiv="refresh" content="5">
<meta content="text/html" http-equiv="content-type; charset=UTF-8" />
</head>
<body>

rss feed 2

<?php


/////////////////////////////////////////////////////////////////////////////////

// voorbeeld #1                                                                //

// lees een feed zonder caching                                                //

/////////////////////////////////////////////////////////////////////////////////



require("class.rss21.php"); // include class-file



$rss = new rss20(); // maak een rss-object aan



$rss->newfile("http://feeds.nos.nl/nosnieuws?format=xml"); // lees een externe feed (zonder caching)



$rss->parse(); // parse de XML-file



// druk de items af

?>

<b>NOS.nl - nieuws</b> (<?=$rss->get_number_of_items(0) ?> items)<br />

<?php

$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("NOS", $con);

$items = $rss->get_items(0); // aantal items in channel 0

// de informatie die je wilt afdrukken hangt af van wat er in de feed aangeboden wordt en

// wat je zelf wilt laten zien, deze zal dus niet altjd hetzelfde zijn

for($i=0; $i < sizeof($items); $i++) {

echo date("Y-m-d H:i", strtotime($items[$i]['pubDate']))." - ";

  echo "<a href=\"".$items[$i]['link']."\" target=\"_blank\">".$items[$i]['title']."</a> ";

  echo "beschrijving: ".htmlentities($items[$i]['description'])."<br />\n";

echo "guid ".htmlentities($items[$i]['guid'])."<br />\n";

  echo "category ".htmlentities($items[$i]['category'])."<br />\n";
  

  $title = quote_smart($items[$i]['title']);
$description = quote_smart($items[$i]['description']);
$guid = quote_smart($items[$i]['guid']);
  $pubDate = quote_smart($items[$i]['pubDate']);
$category = quote_smart($items[$i]['category']);
  
  
$sql ="INSERT INTO newsitems VALUES ('".$description."', '".$link."', '".$guid."', '".$description."', '".$pubDate."', '".$category."')";
mysql_query($sql) or die("Could not perform select query - " . mysql_error());;




}

function quote_smart($value) {
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    if (!is_numeric($value)) {
        $value = mysql_real_escape_string($value);
    }
    return $value;
}


$rss->free_parser(); // geef de parser weer vrij

unset($rss); // als je meerdere feeds op ÈÈn pagina wilt zetten moet je het object unsetten (of een andere var-naam gebruiken)

 

the class file:

<?php

/*!

@file   class.rss20.php

@short  klasse voor het lezen (en cachen) van RSS-bestanden

@date   2005-03-15 13:30

@author Thomas van den Heuvel aka FangorN - the@stack.nl

*/



/*

http://www.zend.com/zend/art/parsing.php

http://www.sitepoint.com/article/php-xml-parsing-rss-1-0

http://www.php.net/manual/en/function.xml-set-character-data-handler.php



PHP maakt gebruik van expat, een event-driven XML parser (in tegenstelling tot een tree-based parser)

expat maakt gebruik van events (geregistreerde callback-functies worden aangeroepen wanneer er een

event optreed, bijvoorbeeld als er een tag geopend op gesloten wordt)

Het is de verantwoordelijkheid van de programmeur om tijdens het parsen een stack of lijst bij te houden

waarin de structuur van het te parsen XML-bestand wordt vastgelegd.

*/



//! rss20 class

/*!

Met deze klasse kun je RSS-bestanden lezen (en cachen). De inhoud van het RSS-bestand wordt opgeslagen

in een array (binnen het rss20-object) die eenvoudig gebruikt kan worden om de headlines van een RSS-

bestand af te drukken.

*/

class rss20 {

  var $file;             //!< (string) XML-bestand dat geparsed dient te worden (URL)

  var $cached_file;      //!< (string) naam van het XML-bestand dat gecached dient te worden / waaruit gelezen wordt

  var $from_file;        //!< (bool) boolean die aangeeft of het XML-bestand werd gelezen van de site of uit cache

  var $site_retry;       //!< (bool) boolean die aangeeft of de laatst gecachede versie van het XML-bestand leeg was

  var $rss;              //!< (object) het XML-parser object

  var $stack = array();  //!< (array) stack van het XML-bestand (wordt gebruikt voor het parsen, houdt geopende tags bij)

  var $content = "";     //!< (string) buffer voor CDATA (character-data)

  var $channel_tags = array("title", "link", "description", "language", "copyright", "managingEditor", "webMaster", "pubDate", "lastBuildDate", "category", "generator", "docs"); //!< (array) lijst van channel-tags die opgeslagen dienen te worden

  var $item_tags = array("title", "link", "description", "author", "category", "pubDate", "content:encoded"); //!< (array) lijst van item-tags die opgeslagen dienen te worden

  var $output = array(); //!< (array) de output van het XML-bestand wordt hier in opgeslagen (om dit array draait deze klasse in feite)

  var $cur_chan = -1;    //!< (int) huidige kanaal

  var $cur_item = -1;    //!< (int) huidige item



  //! constructor

  /*!

  @post een parser voor het parsen van het XML-bestand is aangemaakt en geinitialiseerd

  */

  function rss20() {

    $this->rss = xml_parser_create(); // creeer de parser



    xml_set_object($this->rss, $this); // geeft aan dat de XML-parser in het rss20-object staat



    xml_parser_set_option($this->rss, XML_OPTION_CASE_FOLDING, false); // uppercasing in XML? XML is case-sensitive!

    xml_parser_set_option($this->rss, XML_OPTION_SKIP_WHITE, true); // slaat "space characters" over in het XML-bestand

    xml_set_element_handler($this->rss, "startelement", "endelement"); // callback functie voor openings- and sluitings-tags

    xml_set_character_data_handler($this->rss, "characterdata"); // callback functie voor CDATA (character-data) binnenin tags

  }



  //! initialisatie functie

  /*!

  @param $file (string) het XML-bestand dat ingelezen dient te worden (URL)

  @param $cache (string) wanneer je het XML-bestand wilt cachen, dient dit veld de naam van de lokale kopie te bevatten (default "")

  @post het rss20-object is nu geinitialiseerd en gereed voor parse-data

  */

  function newfile($file, $cache = "") {

    $this->cur_chan = -1;

    $this->cur_item = -1;

    $this->file = $file;

    $this->cached_file = $cache;

    $this->from_file = false;

    $this->site_retry = false;

    $this->output['channel'] = array();

  }



  //! callback functie die wordt uitgevoerd wanneer er een tag wordt geopend

  /*!

  @param $rss (object) verwijzing naar de XML-parser

  @param $name (string) de naam van de tag die er voor zorgde dat deze methode werd aangeroepen

  @param $attrs (array) associatief array met de attributen+waarden van de tag (als die er zijn, RSS heeft er iig geen)

  */

  function startelement($rss, $name, $attrs) {

    // er is een nieuwe tag geopend - zet de naam van de openings-tag op de stack

    array_push($this->stack, $name);



    switch($name) {

      case "channel":

        // maak een nieuw channel aan

        $this->cur_chan++; // verhoog de channel-teller

        $this->output['channel'][$this->cur_chan] = array(); // maak een array voor dit channel

        $this->output['channel'][$this->cur_chan]['item'] = array(); // maak een nieuw items-array voor binnen dit channel

        $this->cur_item = -1; // reset het aantal items voor dit kanaal

        break;

      case "item":

        $this->cur_item++; // verhoog de item-counter

        break;

    }

  }



  //! callback functie die wordt uitgevoerd wanneer er een tag wordt afgesloten

  /*!

  @param $rss (object) verwijzing naar de XML-parser

  @param $name (string) de naam van de tag die er voor zorgde dat deze methode werd aangeroepen

  */

  function endelement($rss, $name) {



    /*

    We zijn klaar met het lezen van (de inhoud van) een tag - $this->content bevat de inhoud van

    de tag. Bepaal aan de hand van de laatst geopende tag op $this->stack wat de bedoeling is.

    De tags "title", "link" en "description" kunnen zowel behoren tot een channel als een item.

    Maak gebruik van de stack om te bepalen of we ons in een channel(tag) of item(tag) bevinden.

    */



    // Mysterieuze spaties en regelovergangen voor en na de content ?

    if(in_array("item", $this->stack) && in_array($name, $this->item_tags)) {

      // We zitten in een item-tag en we zijn geinteresseerd in deze specifieke tag

      $this->output['channel'][$this->cur_chan]['item'][$this->cur_item][$name] = $this->cdata(trim($this->content));

    } else {

      // We zitten in een channel-tag

      if(in_array($name, $this->channel_tags)) {

        // We zijn geinteresseerd in deze specifieke tag

        $this->output['channel'][$this->cur_chan][$name] = $this->cdata(trim($this->content));

      }

    }



    // Reset de tag-inhoud

    $this->content = "";

    // De tag is afgesloten, dus deze kan verwijderd worden van de stack

    array_pop($this->stack);

  }



  //! callback functie die wordt uitgevoerd wanneer er CDATA (character-data) wordt gelezen

  /*!

  @param $rss (object) verwijzing naar de XML-parser

  @param $data (string) data die tussen een openings- en sluitingstag staat

  */

  function characterdata($rss, $data) {

    $this->content .= $data; // verzamel character-data in $this->content (niet alle tekst tussen de tags wordt in ÈÈn keer gelezen)

  }



  //! leest de feed afkomstig uit ofwel een lokale file of een externe URL, wat er voor zorgt dat de callback-functies worden aangeroepen

  /*!

  @post de feed is geparsed en opgeslagen in lokale object-variabelen (tenzij de feed niet "well-formed" was)

  */

  function parse() {

    $data_temp = $this->getfeed($this->file, $this->cached_file);

    if(!xml_parse($this->rss, $data_temp)) {

      die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->rss)), xml_get_current_line_number($this->rss)));

    }

  }



  //! retourneert het aantal channels

  /*!

  @return (int) bevat het aantal channels dat de feed heeft

  */

  function get_number_of_channels() {

    return sizeof($this->output['channel']);

  }



  //! retourneert het aantal items van een bepaald channel

  /*!

  @param $channel (int) het channel-nummer waarvan we het aantal items willen weten

  @return (int) bevat het aantal items dat een specifiek channel heeft

  */

  function get_number_of_items($channel) {

    return sizeof($this->output['channel'][$channel]['item']);

  }



  //! retourneert informatie van een specifiek kanaal

  /*!

  @param $channel (int) het channel-nummer waarvan we informatie willen hebben

  @return (array) associatief array met hierin channel-informatie

  */

  function get_channel_info($channel) {

    $ret = array();

    foreach($this->output['channel'][$channel] as $k => $v) {

      if($k != "item") {

        $ret[$k] = $v;

      }

    }

    return $ret;

  }



  //! retouneert alle items van een bepaald channel - dit is de methode waar het in deze klasse in feite om draait

  /*!

  @param $channel (int) het channel-nummer waar we de items van willen hebben

  @return (array) associatief array met hierin alle items van het channel $channel

  */

  function get_items($channel) {

    return $this->output['channel'][$channel]['item'];

  }



  //! deze methode zou aangeroepen moeten worden na het parsen van een XML-file - je moet ook een nieuw rss20-object aanmaken als je meerdere RSS-bestanden wilt parsen in hetzelfde script

  /*!

  @post de parser is vrijgegeven (waarmee in feite het rss20-object is "opgebruikt")

  */

  function free_parser() {

    xml_parser_free($this->rss);

  }



  //! stript de <![CDATA[...]]> tag en / of spaties uit de item-tags

  /*!

  @param $input (string) inhoud van een tag-paar (mogelijk omringd door een <![CDATA[...]]> tag)

  @return (string) getrimde inhoud van het tag-pair, ontdaan van de <![CDATA[...]]> tag als deze aanwezig was

  */

  function cdata($input) {

    // verwijder <![CDATA[content]]> uit $input

    // trim() is ook nodig - anders blijf je zitten met (ongewenste) spaties die achter zijn gebleven in <![CDATA[...]]>

    return preg_replace("/<!\[CDATA\[(.*)\]\]>/se", "trim('\\1')", $input);

  }



  //! leest een XML-feed van een URL zonder de pagina (al te lang ) te laten hangen - www.php.net/file - function fetchUrlWithoutHanging()

  /*!

  @param $url (string) URL van de externe feed

  @param $cache (string) naam van de file die gebruikt dient te worden voor caching, laat deze leeg als je de feed niet wilt cachen (default "")

  @param $refresh (int) max leeftijd van de gecachede feed in seconden, als de leeftijd groter is dan $refresh seconden dan zal de feed gelezen worden van $url (default 900)

  @return (string) de complete feed



  NB:  Deze methode is nog een beetje een work-in-progress, hier kunnen dus

  waarschijnlijk nog zaken aan veranderd / verbeterd worden.

  */

  function getfeed($url, $cache="", $refresh=900) {

    $path = $cache; // het pad waar je je XML-bestand naar wegschrijft in geval van caching - zorg dat dit klopt !



    /*

    Dient de feed uit cache gelezen te worden ?

    filesize($path) == 0 zou kunnen aangeven dat de site plat was/is (of de socket-connectie is ge-timeout)

    we willen iig niet $timeout seconden wachten om het nog eens te proberen

    */

    if($cache != "" && file_exists($path) && time() - filemtime($path) < $refresh && filesize($path) > 0) {

      $this->from_file = true; // de feed wordt uit cache gelezen



      $handle = fopen($path, "r");

      $size = (filesize($path) > 0) ? filesize($path) : 1024; // empty file fix

      $return = fread($handle, $size);

      fclose($handle);

    }



    if($cache == "" ||

    !file_exists($path) ||

    (file_exists($path) && time() - filemtime($path) >= $refresh) ||

    ($cache != "" && file_exists($path) && filesize($path) == 0)) {

      // De file was niet gecached, bestond nog niet, is verlopen of is leeg, update het bestand

      // $this->from_file stond al op false, dit geeft aan dat het XML-bestand gelezen wordt van een externe URL



      // Was het een tweede poging ?

      if(file_exists($path) && filesize($path) == 0 && $cache != "") {

        $this->site_retry = true;

      }



      /*

      Het volgende deel is een ietwat aangepaste variant van de fetchUrlWithoutHanging() functie

      */



      // Set maximum number of seconds (can have floating-point) to wait for feed before displaying page without feed

      // retrieving a feed can take (far) longer than this - cause ?

      $numberOfSeconds = 5;



      // Suppress error reporting so Web site visitors are unaware if the feed fails

      error_reporting(0);



      // Extract resource path and domain from URL ready for fsockopen

      $url = str_replace("http://", "", $url);

      $urlComponents = explode("/", $url);

      $domain = $urlComponents[0];

      $resourcePath = str_replace($domain, "", $url);



      // Establish a connection - may take 5 seconds

      $socketConnection = fsockopen($domain, 80, $errno, $errstr, $numberOfSeconds);



      // modification (doesn't seem to do much though )

      stream_set_blocking($socketConnection, false);

      stream_set_timeout($socketConnection, $numberOfSeconds); // connection may take 5 seconds



      if(!$socketConnection) {

        // you may wish to remove the following debugging line on a live Web site

        // print("<!-- Network error: $errstr ($errno) -->");

      }  else {

        $xml = "";

        fputs($socketConnection, "GET /".$resourcePath." HTTP/1.0\r\nHost: ".$domain."\r\n\r\n");



        // loop until end of file

        while (!feof($socketConnection)) {

          $xml .= fgets($socketConnection, 128);

        } // end while



        fclose($socketConnection);

      }



      // Aanpassing - sloop headers eruit

      preg_match("/(<\?xml|<rss)(.*)/s", $xml, $content);

      $return = $content[0];



      // het volgende stuk code kan op sommige webservers problemen opleveren, dit ligt waarschijnlijk niet aan dit script

      // Dient de feed naar cache geschreven te worden ?

      if($cache != "") {

        $handle = fopen($path, "w");

        fwrite($handle, $return);

        fclose($handle);

        chmod($path, 0644); // dit kan op sommige webservers problemen opleveren, dit ligt niet aan dit script

      }

    }

    /*

    Retourneer alleen de content. Als de content leeg is, dan is de URL naar de feed waarschijnlijk

    verkeerd (403 - moved permanently)

    Voor alle content (inclusief headers) retourneer $xml

    */



    return $return;

  }



  //! geeft aan of de feed uit cache werd gelezen (true) of uit een externe file (false)

  /*!

  @return (bool) boolean die aangeeft of de feed uit een lokaal bestand werd gelezen

  */

  function read_from_file() {

    return $this->from_file;

  }



  //! geeft aan of de laatste gecachede file leeg was - dit zou kunnen inhouden dat de site vanwaar de feed afkomstig is plat ligt

  /*!

  @return (bool) boolean die aangeeft of de laatst gecachede file leeg was

  */

  function read_site_retry() {

    return $this->site_retry;

  }

}

?>

 

I cannot understand why i don't see anything in the browser. I don't think there's anything wrong with the class file.

some extra information:

 

the XML of RSS looks like this according to firefox:

 

<channel>
      <title>NOS.nl nieuws</title>
      <link>http://www.nos.nl/</link>
      <description>NOS.NL nosnieuws</description>
      <language>en-us</language>
      <copyright>Copyright NOS-RTV</copyright>

      <pubDate>Mon, 07 Dec 2009 03:35:03 GMT +0100</pubDate>
	<lastBuildDate>Mon, 07 Dec 2009 03:35:03 GMT +0100</lastBuildDate>
	<category>News</category>
	<managingEditor>nosonline@rtv.nos.nl (redactie NOS-online)</managingEditor>
<geo:lat>52.235</geo:lat><geo:long>5.1742</geo:long><image><link>http://www.nos.nl/</link><url>http://www.nos.nl/static/global/images/icons/ico_nos.png</url><title>NOS | Nederlandse Omroep Stichting</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.nos.nl/nosnieuws" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.nos.nl/nosnieuws" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&contentvalue=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.nos.nl%2Fnosnieuws" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item page="128" sub="1">

  <title>Klimaatconferentie begint vandaag</title>
  <link>http://feeds.nos.nl/~r/nosnieuws/~3/PY8Goc48gVM/art000001CA76D862517A6F.html</link>
  <description>In Kopenhagen begint vanochtend om 10
uur de VN-Klimaatconferentie. Die moet  
een vervolg opleveren voor het Kyoto-  
protocol uit 1997,dat in 2012 afloopt.<img src="http://feeds.feedburner.com/~r/nosnieuws/~4/PY8Goc48gVM" height="1" width="1"/></description>
  <pubDate>Mon, 07 Dec 2009 00:59:03 GMT +0100</pubDate>
  <createDate>Mon, 07 Dec 2009 00:59:03 GMT +0100</createDate>
  <guid isPermaLink="false">http://www.nos.nl/nos/artikelen/2009/12/art000001CA76D862517A6F.html</guid>

<feedburner:origLink>http://www.nos.nl/nos/artikelen/2009/12/art000001CA76D862517A6F.html</feedburner:origLink></item>
<item page="129" sub="1">
  <title>Klimaatappèl van kranten wereldwijd</title>
  <link>http://feeds.nos.nl/~r/nosnieuws/~3/PC8gNwxgMz0/art000001CA76CD860F4B2D.html</link>
  <description>57 kranten uit 46 landen roepen de   
deelnemers aan de VN-Klimaatconferentie
op om de conferentie tot een succes te 
maken. Volgens hen wordt in Kopenhagen  
beslist of het tij van de opwarming van
de aarde kan worden gekeerd.<img src="http://feeds.feedburner.com/~r/nosnieuws/~4/PC8gNwxgMz0" height="1" width="1"/></description>
  <pubDate>Sun, 06 Dec 2009 23:44:03 GMT +0100</pubDate>
  <createDate>Sun, 06 Dec 2009 23:44:03 GMT +0100</createDate>

  <guid isPermaLink="false">http://www.nos.nl/nos/artikelen/2009/12/art000001CA76CD860F4B2D.html</guid>
<feedburner:origLink>http://www.nos.nl/nos/artikelen/2009/12/art000001CA76CD860F4B2D.html</feedburner:origLink></item>

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.