Имея некоторые проблемы с выбором некоторых узлов в 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 <a href="http://twitter.com/TwittBoy">@TwittBoy</a>: <b>TwitFile</b> - Comparte tus archivos en Twitter (hasta 200Mb) <a href="http://bit.ly/xYNsM">http://bit.ly/xYNsM</a></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 раз, просто нет данных
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've just seen <b>Peter</b> <b>Kay</b>'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 …