чтение RSS-ленты twitter rss с простым xml

Имея некоторые проблемы с выбором некоторых узлов в rss-канале для поиска twitter

rss url здесь

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

каждый элемент выглядит следующим образом:

 <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>MarielaCelita@twitter.com (M.Celita Lijerón)</author> <media:content type="image/jpg" width="48" height="48" url="http://img.ruphp.com/php/orkut_normal.jpg"/> <google:image_link>http://img.ruphp.com/php/orkut_normal.jpg</google:image_link> </item> 

Мой php ниже

  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> "; 

Проблема в том, что ничего не отражается, я имею в виду из rss-канала, если есть 20 результатов, его цикл 20 раз, просто нет данных

  1. В коде $ screenname присваивается значение, но вы эхом отзываете $ author.
  2. Чтобы получить элементы в пространствах имен, таких как google:image_link , вам нужно будет сделать это:

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

Если вам интересно, откуда я получил "http://base.google.com/ns/1.0" , пространство имен упоминается во второй строке 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; } 

Этот код работает.

Установите error_reporting(E_ALL); и вы увидите, что $author не определен.

Вы не можете получить доступ к <google:image_link/> таким образом, вам придется использовать XPath или children ()

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

Если вы используете SimpleDOM , есть ярлык, который возвращает первый элемент результата XPath:

 $key->firstOf("google:image_link"); 
 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,,,,, } 

Я сделал это, и он работает :)) $ sea_name – это ключевое слово, которое вы ищете …

 <?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; } } } ?> 

Объект будет содержать somthing как:

 <!-- 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] => Alex_Segal@twitter.com (Alex Segal) ) --> 

Вы можете использовать любой из них внутри вида foreach и эхо их, например $ item-> author, $ item-> link и т. Д. … любые другие атрибуты, которые вы можете использовать функцию getattribute …