Comment faire apparaitre les news Yahoo en contenu dynamique

WRInaute impliqué
Bonjour à tous
Tout d'abord bonne année 2008 en vous souhaitant à tous prospérité sur le net :wink:

Voilà mon problème, J'en ai marre de prendre les news yahoo sur un sujet que je reçois par email et que je tape une a une tout les mois.
Je cherche un moyen de faire apparaitre en contenu dynamique de façon automatique sur mon site internet.

Je sais pas trop où m'orienter pour trouver un script ... une page explication ..? un moyen spécifique ?

Pourriez vous m'aider ?

D'avance je vous remercie
G.Bruno
 
WRInaute impliqué
J'ai aussi entendu parlé de lamooche ... ou un truc dans le genre ... :roll: :roll: :roll: qu'en pensez vous ?

Merci pour ton intervention ... je vais jeter un oeil :D
 
WRInaute passionné
cheloniologue a dit:
J'ai aussi entendu parlé de lamooche ... ou un truc dans le genre ... :roll: :roll: :roll: qu'en pensez vous ?
Non, c'est bien ça... Mais ajouteencore un o
C'est un excellent annuaire de Flux RSS.
Par contre, je préfère utiliser les flux direct que de passer par lamoooche.
 
WRInaute accro
cheloniologue a dit:
Quel en est l'inconvénient ?

:roll: :roll: :roll: :roll:

Il y en a plusieurs :

1) tu ne gère pas les fréquences de mise à jour
2) si lamoooche est indisponible, tu n'as plus d'accès directement au flux

Perso je préfère faire comme Koxin-L, aller chercher moi-même le flux d'origine (et soit recréer ensuite le fichier xml en local, où le sauvegarder en base de donnée, de manière à me prémunir de toute indisponibilité sur le site distant).
 
WRInaute occasionnel
Si tu peux faire du PHP 5, tu peux utiliser SimpleXML.

Un exemple :
Code:
<?php 
// Chargement du flux RSS
$xml = simplexml_load_file ('http://fr.news.yahoo.com/rss/');

// On récupère tous les éléments item
$item = $xml -> channel -> item;

// Affichage des entrées (titre, résumé, lien et date)
foreach ($item as $valeur)
{
  // Formatage de la date
  // Conversion du format RSS 2.0 au format timestamp Unix
  $timestamp = strtotime ((string) $valeur -> pubDate);
  // Conversion du timestamp Unix en date compréhensible par un humain
  setlocale (LC_TIME, 'fr_FR');
  $date = strftime ('%A %e %B %Y à %Hh%M', $timestamp);
  // Sous Windows, remplacer les deux lignes ci-dessus par celles-ci
  setlocale (LC_TIME, 'fra');
  $date = strftime ('%A %d %B %Y à %Hh%M', $timestamp);
?>
<h2><?php echo htmlspecialchars ((string) $valeur -> title, ENT_COMPAT, 'UTF-8') ?></h2>
<p><?php echo htmlspecialchars ((string) $valeur -> description, ENT_COMPAT, 'UTF-8') ?></p>
<p>Publié le <?php echo $date ?> - <a href="<?php echo $valeur -> link ?>">Lire la suite</a></p>
<?php 
}
?>
 
WRInaute impliqué
Cela reste encore du chinois mais merci pour cet aide ....

Connaissez vous une page d'explication de qualité ? Etape par etape ...

D'avance je vous en remercie

Bien cordialement
 
WRInaute accro
Victor BRITO a dit:
Si tu peux faire du PHP 5, tu peux utiliser SimpleXML.

Un exemple :
Code:
<?php 
// Chargement du flux RSS
(...)
<?php 
}
?>


@victor
dans ton exemple comment fais tu pour acceder l'url quand le flux se presente sous cette forme :

<item>
<media:content url="http://d.yimg.com/eur.yimg.com/ng/ne/zonenumerique/20080102/19/1108511164-optimus-tactus-clavier-polymorphe-dalle-tft-tactile.jpg" height="75" width="90"></media:content>
<title><![CDATA[Optimus Tactus: clavier polymorphe à dalle TFT tactile]]></title>
(...)
<media:credit role="publishing company">Zone Num&#xE9;rique</media:credit>
</item>

j'ai cherché dans la php doc mais je sèche lamentablement. le flux est ici au cas ou ... -http://fr.news.yahoo.com/rss/fc/hardware.xml
 
WRInaute occasionnel
Pour les éléments qui utilisent un préfixe, il faut passer par la méthode children () en indiquant comme paramètre l'espace de nom de ces élements (en gros, la valeur de l'attribut xmlns:prefixe pour les éléments dont le nom commence par prefixe:).

Dans ton cas, il s'agit des éléments à préfixe media:, dont l'espace de nom est renseigné par l'attribut xmlns:media de l'élément racine du fil RSS (pour info, l'élément racine est rss et l'espace de nom cherché est http://search.yahoo.com/mrss/). Étant donné que les éléments media:content sont vides (Yahoo! aurait pu les coder sous la forme "<media:content />" :roll: ), seuls ses attributs nous intéressent, auxquels on peut accéder grâce à la méthode attributes ().

Autrement dit, et en reprenant mon code :
Code:
<?php
// Chargement du flux RSS
$xml = simplexml_load_file ('http://fr.news.yahoo.com/rss/fc/hardware.xml');

// On récupère tous les éléments item
$item = $xml -> channel -> item;

// Affichage des entrées (titre, résumé, lien et date)
foreach ($item as $valeur)
{
  // Récupération des élements media:
  // On renseigne l'espace de nom de ces éléments
  $media = $valeur -> children ('http://search.yahoo.com/mrss/');
  foreach ($media as $nom => $element)
  {
    if ($nom == 'credit') $credit = htmlspecialchars ((string) $element, ENT_COMPAT, 'UTF-8');
    // Récupération des attributs de l'élément media:content
    if ($nom == 'content')
    {
      foreach ($element -> attributes () as $attribut => $valeur_attribut)
      {
        // On force PHP à interpréter la valeur de chaque attribut comme une chaîne de caractère et non comme un objet
        $media_content[$attribut] = (string) $valeur_attribut;
      }
    }
  }
  // Formatage de la date
  // Conversion du format RSS 2.0 au format timestamp Unix
  $timestamp = strtotime ((string) $valeur -> pubDate);
  // Conversion du timestamp Unix en date compréhensible par un humain
  setlocale (LC_TIME, 'fr_FR');
  $date = strftime ('%A %e %B %Y à %Hh%M', $timestamp);
  // Sous Windows, remplacer les deux lignes ci-dessus par celles-ci
  setlocale (LC_TIME, 'fra');
  $date = strftime ('%A %d %B %Y à %Hh%M', $timestamp);
?>
<h2><?php echo htmlspecialchars ((string) $valeur -> title, ENT_COMPAT, 'UTF-8') ?></h2>
<p><img src="<?php echo $media_content['url'] ?>" alt="<?php echo htmlspecialchars ((string) $valeur -> title, ENT_COMPAT, 'UTF-8') ?>" width="<?php echo $media_content['width'] ?>" height="<?php echo $media_content['height'] ?>" /></p>
<p><?php echo htmlspecialchars ((string) $valeur -> description, ENT_COMPAT, 'UTF-8') ?></p>
<p>Publié le <?php echo $date ?> par <?php echo $credit ?> - <a href="<?php echo $valeur -> link ?>">Lire la suite</a></p>
<?php
}
?>
 
WRInaute accro
@Victor BRITO merci pour le coup de pouce, j'aurais pu chercher encore un moment, ton code est divinement bien commenté.

Encore MERCI :wink:
 
Discussions similaires
Haut