2009-11-24 7 views
0

Ayant quelques problèmes en sélectionnant certains noeuds dans le flux rss pour la recherche de twitterlecture twitter avec XML simple

l'url rss est ici

http://search.twitter.com/search.rss?q=twitfile 

chaque élément ressemble à ce

<item> 
    <title>RT @TwittBoy: TwitFile - Comparte tus archivos en Twitter (hasta 200Mb) http://bit.ly/xYNsM</title> 
    <link>http://twitter.com/MarielaCelita/statuses/5990165590</link> 
    <description>RT &lt;a href=&quot;http://twitter.com/TwittBoy&quot;&gt;@TwittBoy&lt;/a&gt;: &lt;b&gt;TwitFile&lt;/b&gt; - Comparte tus archivos en Twitter (hasta 200Mb) &lt;a href=&quot;http://bit.ly/xYNsM&quot;&gt;http://bit.ly/xYNsM&lt;/a&gt;</description> 
    <pubDate>Mon, 23 Nov 2009 22:45:39 +0000</pubDate> 
    <guid>http://twitter.com/MarielaCelita/statuses/5990165590</guid> 
    <author>[email protected] (M.Celita Lijer&#243;n)</author> 
    <media:content type="image/jpg" width="48" height="48" url="http://a3.twimg.com/profile_images/537676869/orkut_normal.jpg"/> 
    <google:image_link>http://a3.twimg.com/profile_images/537676869/orkut_normal.jpg</google:image_link> 
</item> 

Mon php est inférieur à

foreach ($twitter_xml->channel->item as $key) { 
$screenname = $key->{"author"}; 
$date = $key->{"pubDate"}; 
$profimg = $key->{"google:image_link"}; 
$link = $key->{"link"}; 
$title = $key->{"title"}; 
echo" 
         <li> 
         <a href=$link><img width=48 height=48 src=\"$profimg\"></a> 
         <h5><a href=$link>$author</a></h5> 
         <p class=info><a href=$link>$title</a></p> 
         </li> 
"; 

problème est rien est fait l'écho, je veux dire de flux rss, s'il y a 20 résultats, ses 20 fois en boucle, seulement aucune donnée

Répondre

2
  1. Dans le code, screenname $ est attribué une valeur, mais vous êtes auteur faisant écho $.
  2. Pour obtenir des éléments dans les espaces de noms comme google:image_link, vous devrez le faire:

$g = $key->children("http://base.google.com/ns/1.0"); $profimg = $g->{"image_link"};

Si vous vous demandez où ai-je reçu "http://base.google.com/ns/1.0" de, l'espace de noms est mentionné dans la deuxième ligne du flux rss.

$url="http://search.twitter.com/search.rss?q=twitfile"; 
$twitter_xml = simplexml_load_file($url); 

foreach ($twitter_xml->channel->item as $key) { 
    $author = $key->{"author"}; 
    $date = $key->{"pubDate"}; 
    $link = $key->{"link"}; 
    $title = $key->{"title"}; 
    $g = $key->children("http://base.google.com/ns/1.0"); 
    $profimg = $g->{"image_link"}; 
    echo" 
          <li> 
          <a href=$link><img width=48 height=48 src=\"$profimg\"></a> 
          <h5><a href=$link>$author</a></h5> 
          <p class=info><a href=$link>$title</a></p> 
          </li> 
    "; 
    $xml = $twitter_xml; 
} 

Ce code fonctionne.

1

Set error_reporting(E_ALL); et vous verrez que $author n'est pas défini.

Vous ne pouvez pas accéder <google:image_link/> cette façon, vous devrez utiliser XPath ou enfants()

$key->children("google", true)->image_link; 

Si vous utilisez SimpleDOM, il y a un raccourci qui renvoie le premier élément d'un résultat XPath:

$key->firstOf("google:image_link"); 
0
if (!$xml = simplexml_load_file('http://search.twitter.com/search.atom?q='.urlencode  ($terms))) 
    { 
     throw new RuntimeException('Unable to load or parse search results feed'); 
    } 
    if (!count($entries = $xml->entry)) 
    { 
     throw new RuntimeException('No entry found'); 
    } 
    for($i=0;$i<count($entries);$i++) 
    { 
     $title[$i] = $entries[$i]->title; 
     //etc.. continue description,,,,, 

    } 
0

Je l'ai fait et ça fonctionne :)) sea_name de $ est le mot-clé que vous cherchez ...

<?php 
function twitter_feed($sea_name){ 
    $endpoint = 'http://search.twitter.com/search.rss?q='.urlencode($sea_name); // URL to call 
    $resp = simplexml_load_file($endpoint); 

    // Check to see if the response was loaded, else print an error 
    if ($resp) { 
     $results = ''; 
     $counter=0; 
     // If the response was loaded, parse it and build links 
     foreach($resp->channel->item as $item) { 
      //var_dump($item); 
      preg_match("/\((.*?)\)/", $item->author, $blah); 
      $content = $item->children("http://search.yahoo.com/mrss/"); 
         $imageUrl = getXmlAttribute($content, "url"); 
      echo ' 
      <div class="twitter-item"> 
       <img src="'.$imageUrl.'" /> 
       <span class="twit">'.$blah[1].'</span><br /> 
       <span class="twit-content">'.$item->title.'</span> 
       <br style="clear:both; line-height:0;margin:0;padding:0;"> 
      </div>'; 
      $counter++; 
     } 
    } 
    // If there was no response, print an error 
    else { 
     $results = "Oops! Must not have gotten the response!"; 
    } 
    echo $results; 
} 

function getXmlAttribute(SimpleXMLElement $xmlElement, $attribute) { 
    foreach($xmlElement->attributes() as $name => $value) { 
     if($name == $attribute) { 
     return (string)$value; 
     } 
    } 
} 
?> 

L'objet contiendra somthing comme:

<!-- SimpleXMLElement Object 
(
    [title] => Before I go to bed, I just want to say I've just seen Peter Kay's CIN cartoon video for the 1st time... one word... WOW. 
    [link] => http://twitter.com/Alex_Segal/statuses/5993710015 
    [description] => Before I go to bed, I just want to say I&apos;ve just seen <b>Peter</b> <b>Kay</b>&apos;s CIN cartoon video for the 1st time... one word... WOW. 
    [pubDate] => Tue, 24 Nov 2009 01:00:00 +0000 
    [guid] => http://twitter.com/Alex_Segal/statuses/5993710015 
    [author] => [email protected] (Alex Segal) 
) 
--> 

Vous pouvez utiliser l'une des à l'intérieur du foreach regarder et leur faire écho comme $ item-> auteur, $ item-> lien, etc .... tous les autres attributs que vous pouvez utiliser la fonction getattribute ...

+0

et oui l'utilisation de twits (auteurs) et ce qu'ils disent a tendance à être la plupart du temps "blah" lik e contenu, ne frappez donc pas les noms des variables! :) –