我正在尝试使用某个标签获取最新推文的文本和用户名(在此示例中为#stackoverflow)。返回的错误是Invalid argument supplied for foreach()
。我认为这是因为$content
实际上不是关联数组。
function get_twitter($hashtag) {
$json_url = "http://search.twitter.com/search.json?q=%23" . $hashtag . "&rpp=1&result_type=recent";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$returned_content = get_twitter('stackoverflow');
$content = json_decode($returned_content);
foreach ($content['results'] as $tweet) {
echo $tweet['text'];
echo $tweet['from_user'];
}
Twitter返回的JSON示例如下:
{
"completed_in":0.099,
"max_id":210895419549548544,
"max_id_str":"210895419549548544",
"next_page":"?page=2&max_id=210895419549548544&q=%23stackoverflow&rpp=1&result_type=recent",
"page":1,
"query":"%23stackoverflow",
"refresh_url":"?since_id=210895419549548544&q=%23stackoverflow&result_type=recent",
"results":[
{
"created_at":"Fri, 08 Jun 2012 00:46:00 +0000",
"from_user":"Beseeker",
"from_user_id":334048944,
"from_user_id_str":"334048944",
"from_user_name":"Italo Iv\u00e1n",
"geo":null,
"id":210895419549548544,
"id_str":"210895419549548544",
"iso_language_code":"es",
"metadata":{"result_type":"recent"},
"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1611497833\/imagen-perfil-fb_normal.jpg",
"profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1611497833\/imagen-perfil-fb_normal.jpg",
"source":"<a href="http:\/\/twitter.com\/">web<\/a>",
"text":"podr\u00eda pasar horas y horas en #StackoverFlow",
"to_user":null,
"to_user_id":0,
"to_user_id_str":"0",
"to_user_name":null
}
],
"results_per_page":1,
"since_id":0,
"since_id_str":"0"
}
提前感谢您的任何想法!
答案 0 :(得分:3)
此功能不会'用户oAuth,可能不再有效。
答案 1 :(得分:2)
function getTweets($hash_tag) {
$url = 'http://search.twitter.com/search.atom?q='.urlencode($hash_tag) ;
echo "<p>Connecting to <strong>$url</strong> ...</p>";
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
$xml = curl_exec ($ch);
curl_close ($ch);
//If you want to see the response from Twitter, uncomment this next part out:
//echo "<p>Response:</p>";
//echo "<pre>".htmlspecialchars($xml)."</pre>";
$affected = 0;
$twelement = new SimpleXMLElement($xml);
foreach ($twelement->entry as $entry) {
$text = trim($entry->title);
$author = trim($entry->author->name);
$time = strtotime($entry->published);
$id = $entry->id;
echo "<p>Tweet from ".$author.": <strong>".$text."</strong> <em>Posted ".date('n/j/y g:i a',$time)."</em></p>";
}
return true ;
}
像这样使用:
getTweets('#yankees');
答案 2 :(得分:0)
错误发生在你的“foreach”循环中。它应该是:
foreach($status->results as $tweet) {
echo $tweet->text;
echo $tweet->from_user;
}