duanjia2415
2017-05-08 21:04 阅读 70

从Twitter api获取热门话题

As a php noob I'm trying to solve a problem with Twitter's api. What I want to do is get the Twitter trending topics and display them as a list on a website. What I have so far:

<?php
require_once('TwitterAPIExchange.php');
 
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
    'oauth_access_token' => "xxxxxx",
    'oauth_access_token_secret' => "xxxxxxx",
    'consumer_key' => "xxxxxxxxxx",
    'consumer_secret' => "xxxxxxxxxxx"
);
$url = "https://api.twitter.com/1.1/trends/place.json";
$requestMethod = "GET";
$getfield = '?id=23424829&count=10';
$twitter = new TwitterAPIExchange($settings);
$string = json_decode($twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest(),$assoc = TRUE);
if($string["errors"][0]["message"] != "") {echo "<h3>Sorry, there was a problem.</h3><p>Twitter returned the following error message:</p><p><em>".$string[errors][0]["message"]."</em></p>";exit();}
foreach($string as $items)
    {
        echo "Hashtag: ".$items['name']."<br />";
        
    }

?>

I can get the correct results in JSON and decode them as an array. But as soon as I try to loop around the array with foreach, it shows me a blank page, just showing the "Hashtag:" but no results.

The start of the decoded JSON looks like this:

Array
(
    [0] => stdClass Object
        (
            [trends] => Array
                (
                    [0] => stdClass Object
                        (
                            [name] => #NakedAttraction
                            [url] => http://twitter.com/search?q=%23NakedAttraction
                            [promoted_content] => 
                            [query] => %23NakedAttraction
                            [tweet_volume] => 
                        )

This is the code I used before to decode the JSON:

<?php
require_once('TwitterAPIExchange.php');
 
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
    'oauth_access_token' => "XXXXXXXXXX",
    'oauth_access_token_secret' => "XXXXXXXX",
    'consumer_key' => "XXXXXXXX",
    'consumer_secret' => "XXXXXXXXXX"
);
$url = "https://api.twitter.com/1.1/trends/place.json";
$requestMethod = "GET";
$getfield = '?id=23424829&count=10';
$twitter = new TwitterAPIExchange($settings);
$string = json_decode($twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest(),$assoc = FALSE);
if($string["errors"][0]["message"] != "") {echo "<h3>Sorry, there was a problem.</h3><p>Twitter returned the following error message:</p><p><em>".$string[errors][0]["message"]."</em></p>";exit();}
echo "<pre>";
print_r($string);
echo "</pre>";

?>

After changing the code to

$string = json_decode($twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(), TRUE);
var_dump($string);

I received this

array(1) { [0]=> array(4) { ["trends"]=> array(49) { [0]=> array(5) { ["name"]=> string(16) "#NakedAttraction" ["url"]=> string(46) "http://twitter.com/search?q=%23NakedAttraction" ["promoted_content"]=> NULL ["query"]=> string(18) "%23NakedAttraction" ["tweet_volume"]=> NULL } [1]=> array(5) { ["name"]=> string(13) "#hartaberfair" ["url"]=> string(43) "http://twitter.com/search?q=%23hartaberfair" ["promoted_content"]=> NULL ["query"]=> string(15) "%23hartaberfair" ["tweet_volume"]=> NULL } [2]=> array(5) { ["name"]=> string(7) "#EBSFCU" ["url"]=> string(37) "http://twitter.com/search?q=%23EBSFCU" ["promoted_content"]=> NULL ["query"]=> string(9) "%23EBSFCU" ["tweet_volume"]=> NULL } [3]=> array(5) { ["name"]=> string(8) "#4Blocks" ["url"]=> string(38) "http://twitter.com/search?q=%234Blocks" ["promoted_content"]=> NULL ["query"]=> string(10) "%234Blocks" ["tweet_volume"]=> NULL } [4]=> array(5) { ["name"]=> string(11) "#LuchaTele5" ["url"]=> string(41) "http://twitter.com/search?q=%23LuchaTele5" ["promoted_content"]=> NULL ["query"]=> string(13) "%23LuchaTele5" ["tweet_volume"]=> NULL } [5]=> array(5) { ["name"]=> string(11) "Diego Costa" ["url"]=> string(45) "http://twitter.com/search?q=%22Diego+Costa%22" ["promoted_content"]=> NULL ["query"]=> string(17) "%22Diego+Costa%22" ["tweet_volume"]=> int(13267) } [6]=> array(5) { ["name"]=> string(11) "Wochenstart" ["url"]=> string(39) "http://twitter.com/search?q=Wochenstart" ["promoted_content"]=> NULL ["query"]=> string(11) "Wochenstart" ["tweet_volume"]=> NULL } [7]=> array(5) { ["name"]=> string(17) "Deutsche Konzerne" ["url"]=> string(51) "http://twitter.com/search?q=%22Deutsche+Konzerne%22" ["promoted_content"]=> NULL ["query"]=> string(23) "%22Deutsche+Konzerne%22" ["tweet_volume"]=> NULL } [8]=> array(5) { ["name"]=> string(7) "Session" ["url"]=> string(35) "http://twitter.com/search?q=Session" ["promoted_content"]=> NULL ["query"]=> string(7) "Session" ["tweet_volume"]=> int(69911) } [9]=> array(5) { ["name"]=> string(18) "Schleswig-Holstein" ["url"]=> string(46) "http://twitter.com/search?q=Schleswig-Holstein" ["promoted_content"]=> NULL ["query"]=> string(18) "Schleswig-Holstein" ["tweet_volume"]=> NULL } [10]=> array(5) { ["name"]=> string(7) "#CHEMID" ["url"]=> string(37) "http://twitter.com/search?q=%23CHEMID" ["promoted_content"]=> NULL ["query"]=> string(9) "%23CHEMID" ["tweet_volume"]=> int(51187) } [11]=> array(5) { ["name"]=> string(19) "#GoodbyeDeutschland" ["url"]=> string(49) "http://twitter.com/search?q=%23GoodbyeDeutschland" ["promoted_content"]=> NULL ["query"]=> string(21) "%23GoodbyeDeutschland" ["tweet_volume"]=> NULL } [12]=> array(5) { ["name"]=> string(16) "#BladeRunner2049" ["url"]=> string(46) "http://twitter.com/search?q=%23BladeRunner2049" ["promoted_content"]=> NULL ["query"]=> string(18) "%23BladeRunner2049" ["tweet_volume"]=> int(33497) } [13]=> array(5) { ["name"]=> string(13) "#DWTStockholm" ["url"]=> string(43) "http://twitter.com/search?q=%23DWTStockholm" ["promoted_content"]=> NULL ["query"]=> string(15) "%23DWTStockholm" ["tweet_volume"]=> int(22936) } [14]=> array(5) { ["name"]=> string(11) "#SallyYates" ["url"]=> string(41) "http://twitter.com/search?q=%23SallyYates" ["promoted_content"]=> NULL ["query"]=> string(13) "%23SallyYates" ["tweet_volume"]=> int(247812) } [15]=> array(5) { ["name"]=> string(14) "#BlognBurger60" ["url"]=> string(44) "http://twitter.com/search?q=%23BlognBurger60" ["promoted_content"]=> NULL ["query"]=> string(16) "%23BlognBurger60" ["tweet_volume"]=> NULL } [16]=> array(5) { ["name"]=> string(7) "#Pegida" ["url"]=> string(37) "http://twitter.com/search?q=%23Pegida" ["promoted_content"]=> NULL ["query"]=> string(9) "%23Pegida" ["tweet_volume"]=> NULL } [17]=> array(5) { ["name"]=> string(5) "#lobo" ["url"]=> string(35) "http://twitter.com/search?q=%23lobo" ["promoted_content"]=> NULL ["query"]=> string(7) "%23lobo" ["tweet_volume"]=> NULL } [18]=> array(5) { ["name"]=> string(7) "#usaswe" ["url"]=> string(37) "http://twitter.com/search?q=%23usaswe" ["promoted_content"]=> NULL ["query"]=> string(9) "%23usaswe" ["tweet_volume"]=> NULL } [19]=> array(5) { ["name"]=> string(12) "#TheVampsVIP" ["url"]=> string(42) "http://twitter.com/search?q=%23TheVampsVIP" ["promoted_content"]=> NULL ["query"]=> string(14) "%23TheVampsVIP" ["tweet_volume"]=> int(20397) } [20]=> array(5) { ["name"]=> string(9) "#LTW17nrw" ["url"]=> string(39) "http://twitter.com/search?q=%23LTW17nrw" ["promoted_content"]=> NULL ["query"]=> string(11) "%23LTW17nrw" ["tweet_volume"]=> NULL } [21]=> array(5) { ["name"]=> string(14) "#NiemalsAllein" ["url"]=> string(44) "http://twitter.com/search?q=%23NiemalsAllein" ["promoted_content"]=> NULL ["query"]=> string(16) "%23NiemalsAllein" ["tweet_volume"]=> NULL } [22]=> array(5) { ["name"]=> string(8) "#Juncker" ["url"]=> string(38) "http://twitter.com/search?q=%23Juncker" ["promoted_content"]=> NULL ["query"]=> string(10) "%23Juncker" ["tweet_volume"]=> NULL } [23]=> array(5) { ["name"]=> string(6) "#mcb17" ["url"]=> string(36) "http://twitter.com/search?q=%23mcb17" ["promoted_content"]=> NULL ["query"]=> string(8) "%23mcb17" ["tweet_volume"]=> NULL } [24]=> array(5) { ["name"]=> string(8) "#ltwsh17" ["url"]=> string(38) "http://twitter.com/search?q=%23ltwsh17" ["promoted_content"]=> NULL ["query"]=> string(10) "%23ltwsh17" ["tweet_volume"]=> NULL } [25]=> array(5) { ["name"]=> string(16) "#TagderBefreiung" ["url"]=> string(46) "http://twitter.com/search?q=%23TagderBefreiung" ["promoted_content"]=> NULL ["query"]=> string(18) "%23TagderBefreiung" ["tweet_volume"]=> NULL } [26]=> array(5) { ["name"]=> string(19) "#Presidentielle2017" ["url"]=> string(49) "http://twitter.com/search?q=%23Presidentielle2017" ["promoted_content"]=> NULL ["query"]=> string(21) "%23Presidentielle2017" ["tweet_volume"]=> int(216803) } [27]=> array(5) { ["name"]=> string(7) "#GERRUS" ["url"]=> string(37) "http://twitter.com/search?q=%23GERRUS" ["promoted_content"]=> NULL ["query"]=> string(9) "%23GERRUS" ["tweet_volume"]=> NULL } [28]=> array(5) { ["name"]=> string(9) "#freubier" ["url"]=> string(39) "http://twitter.com/search?q=%23freubier" ["promoted_content"]=> NULL ["query"]=> string(11) "%23freubier" ["tweet_volume"]=> NULL } [29]=> array(5) { ["name"]=> string(7) "#SCFS04" ["url"]=> string(37) "http://twitter.com/search?q=%23SCFS04" ["promoted_content"]=> NULL ["query"]=> string(9) "%23SCFS04" ["tweet_volume"]=> NULL } [30]=> array(5) { ["name"]=> string(6) "#dmb17" ["url"]=> string(36) "http://twitter.com/search?q=%23dmb17" ["promoted_content"]=> NULL ["query"]=> string(8) "%23dmb17" ["tweet_volume"]=> NULL } [31]=> array(5) { ["name"]=> string(15) "#Frankreichwahl" ["url"]=> string(45) "http://twitter.com/search?q=%23Frankreichwahl" ["promoted_content"]=> NULL ["query"]=> string(17) "%23Frankreichwahl" ["tweet_volume"]=> NULL } [32]=> array(5) { ["name"]=> string(25) "#SignOfTheTimesMusicVideo" ["url"]=> string(55) "http://twitter.com/search?q=%23SignOfTheTimesMusicVideo" ["promoted_content"]=> NULL ["query"]=> string(27) "%23SignOfTheTimesMusicVideo" ["tweet_volume"]=> int(396869) } [33]=> array(5) { ["name"]=> string(17) "#muttertagswunsch" ["url"]=> string(47) "http://twitter.com/search?q=%23muttertagswunsch" ["promoted_content"]=> NULL ["query"]=> string(19) "%23muttertagswunsch" ["tweet_volume"]=> NULL } [34]=> array(5) { ["name"]=> string(9) "#AnneWill" ["url"]=> string(39) "http://twitter.com/search?q=%23AnneWill" ["promoted_content"]=> NULL ["query"]=> string(11) "%23AnneWill" ["tweet_volume"]=> NULL } [35]=> array(5) { ["name"]=> string(11) "#Polizeiruf" ["url"]=> string(41) "http://twitter.com/search?q=%23Polizeiruf" ["promoted_content"]=> NULL ["query"]=> string(13) "%23Polizeiruf" ["tweet_volume"]=> NULL } [36]=> array(5) { ["name"]=> string(8) "#Framing" ["url"]=> string(38) "http://twitter.com/search?q=%23Framing" ["promoted_content"]=> NULL ["query"]=> string(10) "%23Framing" ["tweet_volume"]=> NULL } [37]=> array(5) { ["name"]=> string(7) "#Tuchel" ["url"]=> string(37) "http://twitter.com/search?q=%23Tuchel" ["promoted_content"]=> NULL ["query"]=> string(9) "%23Tuchel" ["tweet_volume"]=> NULL } [38]=> array(5) { ["name"]=> string(18) "#dasperfektedinner" ["url"]=> string(48) "http://twitter.com/search?q=%23dasperfektedinner" ["promoted_content"]=> NULL ["query"]=> string(20) "%23dasperfektedinner" ["tweet_volume"]=> NULL } [39]=> array(5) { ["name"]=> string(6) "#Fritz" ["url"]=> string(36) "http://twitter.com/search?q=%23Fritz" ["promoted_content"]=> NULL ["query"]=> string(8) "%23Fritz" ["tweet_volume"]=> NULL } [40]=> array(5) { ["name"]=> string(19) "#frenchelection2017" ["url"]=> string(49) "http://twitter.com/search?q=%23frenchelection2017" ["promoted_content"]=> NULL ["query"]=> string(21) "%23frenchelection2017" ["tweet_volume"]=> int(52362) } [41]=> array(5) { ["name"]=> string(8) "#tasteup" ["url"]=> string(38) "http://twitter.com/search?q=%23tasteup" ["promoted_content"]=> NULL ["query"]=> string(10) "%23tasteup" ["tweet_volume"]=> NULL } [42]=> array(5) { ["name"]=> string(16) "#Montagslaecheln" ["url"]=> string(46) "http://twitter.com/search?q=%23Montagslaecheln" ["promoted_content"]=> NULL ["query"]=> string(18) "%23Montagslaecheln" ["tweet_volume"]=> NULL } [43]=> array(5) { ["name"]=> string(7) "#vfbaue" ["url"]=> string(37) "http://twitter.com/search?q=%23vfbaue" ["promoted_content"]=> NULL ["query"]=> string(9) "%23vfbaue" ["tweet_volume"]=> NULL } [44]=> array(5) { ["name"]=> string(11) "#Kofferraum" ["url"]=> string(41) "http://twitter.com/search?q=%23Kofferraum" ["promoted_content"]=> NULL ["query"]=> string(13) "%23Kofferraum" ["tweet_volume"]=> NULL } [45]=> array(5) { ["name"]=> string(15) "#ParisAgreement" ["url"]=> string(45) "http://twitter.com/search?q=%23ParisAgreement" ["promoted_content"]=> NULL ["query"]=> string(17) "%23ParisAgreement" ["tweet_volume"]=> NULL } [46]=> array(5) { ["name"]=> string(7) "#cl2025" ["url"]=> string(37) "http://twitter.com/search?q=%23cl2025" ["promoted_content"]=> NULL ["query"]=> string(9) "%23cl2025" ["tweet_volume"]=> NULL } [47]=> array(5) { ["name"]=> string(10) "#MTVAwards" ["url"]=> string(40) "http://twitter.com/search?q=%23MTVAwards" ["promoted_content"]=> NULL ["query"]=> string(12) "%23MTVAwards" ["tweet_volume"]=> int(1306553) } [48]=> array(5) { ["name"]=> string(16) "#TattoosForShawn" ["url"]=> string(46) "http://twitter.com/search?q=%23TattoosForShawn" ["promoted_content"]=> NULL ["query"]=> string(18) "%23TattoosForShawn" ["tweet_volume"]=> int(31256) } } ["as_of"]=> string(20) "2017-05-08T21:46:50Z" ["created_at"]=> string(20) "2017-05-08T21:43:18Z" ["locations"]=> array(1) { [0]=> array(2) { ["name"]=> string(7) "Germany" ["woeid"]=> int(23424829) } } } }

Could any of you wise coding monks be so merciful to help me out?

</div>
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    duangu9666 duangu9666 2017-05-08 21:58

    I'm not sure if PHP supports this parameter passing or not so change:

    $string = json_decode($twitter->setGetfield($getfield)
                  ->buildOauth($url, $requestMethod)
                  ->performRequest(), $assoc = TRUE);
    

    to:

    $string = json_decode($twitter->setGetfield($getfield)
                  ->buildOauth($url, $requestMethod)
                  ->performRequest(), TRUE);
    

    This will make sure that the JSON is being converted to an associated array.

    Then you need to select the right part of the array to loop over, so change your loop to:

    foreach($string[0]["trends"] as $items)
    {
        echo "Hashtag: ".$items['name']."<br />";
    
    }
    
    点赞 评论 复制链接分享

相关推荐