2

私は、ユーザーが都市または国のトップ 10 の Twitter トレンドを検索できる Web サイトに取り組んでいます。最初は Twitter の Rest API だけに頼っていましたが、多くのレート制限の問題がありました (学校では、レート制限を使用するよりも早くなくなります)。API 呼び出しを認証すると、この問題により適切に対処できることがわかっています (認証された API 呼び出しは、認証ユーザーの制限に対して課金されますが、認証されていない API 呼び出しは、呼び出し IP アドレスの割り当てから差し引かれます)。

@abraham の PHP ライブラリ ( https://github.com/abraham/twitteroauth ) を実装しましたが、残念ながら API 呼び出しが認証されていません。@abraham の PHP ライブラリを実装したことはわかっています。これは、ユーザー情報が最後に出力されるためです。その下に Twitter トレンド検索がありますが、API 呼び出しが認証されていません。これを修正する方法がわかりません。助けていただければ幸いです。

これは、国別の上位 10 のトレンドを取得するために使用するものです。

function showContent(){

// we're going to point to Yahoo's APIs
$BASE_URL = "https://query.yahooapis.com/v1/public/yql";

// the following code should only run if we've submitted a form
if(isset($_REQUEST['location']))
{
    // set a variable named "location" to whatever we passed from the form
    $location = $_REQUEST['location'];

    // Form YQL query and build URI to YQL Web service in two steps:

    // first, we show the query
    $yql_query = "select woeid from geo.places where text='$location'";
    // then we combine the $BASE_URL and query (urlencoded) together
    $yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json";

    //var_dump($location);

    // show what we're calling
    // echo $yql_query_url;

    // Make call with cURL (curl pulls webpages - it's very common)
    $session = curl_init($yql_query_url);
    curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
    $json = curl_exec($session);

    // Convert JSON to PHP object 
    $phpObj = json_decode($json);

    // Confirm that results were returned before parsing
    if(!is_null($phpObj->query->results)){


      // Parse results and extract data to display
      foreach($phpObj->query->results as $result){
    //var_dump($result);    
     $woeid = $result[0]->woeid;


     if (is_numeric ($location)) 
         {
    echo "<span style='color:red; padding-left: 245px;'>Please enter a city or a country</span>";
    } 
    else if(empty($result)){
     echo "No results found";
    }
    else {
    /*  echo "The woeid of $location is $woeid <br />"; */
     }  
    } 
    }

    $jsontrends=file_get_contents("http://api.twitter.com/1/trends/".$woeid.".json"); 

    $phpObj2 = json_decode($jsontrends, true);

    echo "<h3 style='margin-top:20px'>TRENDS: ".$phpObj2[0]['locations'][0]['name']."</h3> \r\n";

    $data = $phpObj2[0]['trends']; 

    foreach ($data as $item) { 

    echo "<br /><a href=\"".$item['url']."\" target=\"_blank\">".$item['name']."</a>\r\n";

    echo "<br /> \r\n"; 

    }
    if(empty($item)){
    echo "No results found";
    }

    }
    }

次に、それを @abraham の html.inc ファイルに追加し (レート制限のステータスを確認するためのいくつかの php と共に)、html.inc を index.php に含めます。

<h1>Top Twitter Trends</h1>                 
<form name='mainForm' method="get">
<input name='location' id='location' type='text'/><br/>
<button id='lookUpTrends'>Submit</button>
</form>

<?php showContent(); 

$ratelimit = file_get_contents("http://api.twitter.com/1/account/rate_limit_status.json"); 

echo $ratelimit; 
?>  
</div>

@abraham の index.php ファイルには呼び出しの例がいくつかあります。私の呼び出しはこのようには見えないので、おそらくそれが認証されていない理由だと思います。

    /* Some example calls */

    //$connection->post('statuses/update', array('status' => date(DATE_RFC822)));
    //$connection->post('statuses/destroy', array('id' => 5437877770));
    //$connection->post('friendships/create', array('id' => 9436992));
    //$connection->post('friendships/destroy', array('id' => 9436992));

API 呼び出しが認証されるように、何を修正する必要があるかを教えてください。

10-21 を更新

認証された API 呼び出しを行うには、次のようなコードを含める必要があると思います。

$connection->get('trends/place', array('id' => $woeid));

それは私の問題を解決しませんでしたが、おそらく正しい方向に進んでいますか?

4

1 に答える 1

1

まず、PHP と HTML を分離しておくと、コードを合理化し、論理的な問題を分離するのに本当に役立つことがわかります (データの集約と表示は 2 つの異なる問題です) (多くの PHP 愛好家はMVCを好みます)。

あなたが共有したコードは正しいようです。私の推測では、問題は次のような OAuth 接続の作成にあると思われます。

    <?php
    /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
    $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $token,$secret);

どこCONSUMER_KEYで とCONSUMER_SECRETは Trends Test アプリからのもので、$token$secretはユーザーが twitter にサインインしてアプリの許可を許可したものです。TwitterOAuthオブジェクトを作成すると、これらすべての値が表示されますか?

また、twitteroauth.phpファイル内の構成項目を必ず更新してください (具体的には、21 行目を 1.1 API を使用するように設定し、29 行目を「json」に設定する必要があります)。

于 2012-10-23T17:41:46.240 に答える