8710 sujets

Développement web côté serveur, CMS

Bonjour à tous !

Je souhaite récupérer des publications scientifiques disponibles sur le site http://www.ncbi.nlm.nih.gov/pubmed. Ces publications sont disponibles et exportables depuis un flux RSS dans un fichier XML.

Ce que je souhaite effectuer par la suite est l'affichage de ce(s) fichier(s) XML dans une page HTML avec l'aide de PHP (je suppose).

Comment puis-je procéder ? Avez vous des exemples à disposition afin que je puisse débuter ?

A priori, ça a l'air faisable avec SimpleXML mais je n'ai jamais manipulé la chose, help anyone Smiley sweatdrop ?

Merci d'avance à tous !
Modifié par georgelarace (08 Apr 2013 - 15:20)
Ouep, faut que tu lises le flux RSS avec CURL puis tu le sauves dans un fichier pour le mettre en cache. Ensuite tu parses tes news avec simpleXML et tu les affiches.

Doc de curl : http://www.php.net/manual/fr/book.curl.php
Doc de simpleXML : http://www.php.net/manual/fr/book.simplexml.php

Un exemple simple :


<?php

/**
 * Paramètres
 */
$filename = 'pubmednews.rss';
$rss_url = 'http://www.ncbi.nlm.nih.gov/feed/rss.cgi?ChanKey=PubMedNews';

/**
 * On lit le fichier RSS depuis le cache si il existe et a moins de 12 heures.
 * Sinon on le récupère avec cURL depuis le site.
 */
if (file_exists($filename) && time() - filemtime($filename) < 3600 * 12) {

  $rss = file_get_contents($filename);  

} else {

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $rss_url);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $rss = curl_exec($ch);
  curl_close($ch);
  
  if (false === $rss) {
    die('Erreur lors de la lecture du flux RSS.');
  } else {
    file_put_contents($filename, $rss);
  }
}

/**
 * Si tout s'est bien passé on transforme le flux RSS en objet simpleXML.
 */
libxml_use_internal_errors(true);

try {
  $news = new SimpleXMLElement($rss);
} catch(Exception $e) {
  die($e->getMessage());
}

/**
 * On affiche le résultat dans le template.
 */
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8" />
  <title>Les news</title>
</head>
<body>

  <h1>Les news scientifiques de NCBI</h1>

  <?php foreach ($news->channel->item as $post): ?>

  <h2>
    <a href="<?php echo $post->link; ?>"><?php echo $post->title; ?></a>
  </h2>

  <p><small>Publié le : <?php echo $post->pubDate; ?></small></p>

  <p><?php echo $post->description; ?></p>

  <hr>

  <?php endforeach; ?>

</body>
</html>