3

それぞれの xml をプルしてサーバーにキャッシュすることで、12 の異なる Twitter アカウントの最新のステータス更新を取得する php スクリプトを作成しました。これは現在、30 分ごとに実行されます。

残念ながら、「Rate limit exceeded. Clients may not make more than 150 requests per hour.」というメッセージが表示され続けます。エラー イベントが発生しましたが、必要な 150 件のリクエストのうち 24 件しかリクエストしていません。

これは、私のドメインが共有サーバー上にあり、Twitter が私に対する他のリクエストをカウントしているためだと思います。

標準の IP 制限によって制限されないように、リクエストを承認するにはどうすればよいですか?

私は OAuth の経験がないので、可能であれば段階的な手順が必要です。

前もって感謝します!

4

2 に答える 2

3

わかりましたので、APIなどの以前の経験がなくても、この作業を最大限に活用することができました.

これが私のステップバイステップガイドです:

ステップ 1. Twitter リストを作成します。

  1. 移動: https://twitter.com/username/lists
  2. 「リストを作成」をクリック
  3. 詳細を入力して保存します。
  4. リストに追加したい Twitter ユーザーに移動し、歯車のドロップダウンをクリックして、[リストから追加または削除] を選択します。リストの横にあるチェックボックスにチェックを入れます。

ステップ 2. https://dev.twitter.com/apps/new から Twitter アプリを作成します。

  1. Twitter 資格情報を使用してログインします。
  2. アプリに名前、説明などを付けます。
  3. [設定] タブに移動し、[アクセス タイプ] を [読み取りと書き込み] に変更してから、[この Twitter アプリケーションの設定を更新する] をクリックします。
  4. ページの下部にある [アクセス トークンを作成] をクリックします。

これで、コンシューマ キー、コンシューマ シークレット、アクセス トークン、およびアクセス トークン シークレットが作成されます。これらをメモします。

ステップ 3. API トークンを作成します。

  1. https://github.com/abraham/twitteroauthから Abraham Twitter oAuth ライブラリをダウンロードしてサーバーにインストールします(「twitter」というフォルダーを使用します)。

  2. 新しいファイルを作成し、oAuth フォルダーに authorise.php という名前を付けて、次のコードを内部に配置します (名前付きテキストの代わりに生成されたキーを使用します)。(コードを < ? PHP と ?> ブラケットの間に入れます)。

    // Create our twitter API object
    require_once("twitteroauth/twitteroauth.php");
    $oauth = new TwitterOAuth('Put-Consumer-Key-here', 'Put-Consumer-secret-here', 
    'Put-Access-Token-here', 'Put-Access-token-secret-here');
    // Send an API request to verify credentials
    $credentials = $oauth->get("account/verify_credentials");
    echo "Connected as @" . $credentials->screen_name;
    // Post our new "hello world" status
    $oauth->post('statuses/update', array('status' => "hello world"));
    
  3. これで、Twitter アプリが API に対して承認され、Twitter アカウントに「hello world」ステータスが投稿されました。

注: 以前に行った読み取り/書き込みアクセスの変更により、コードがステータスの更新を投稿できるようになりました。実際には API からリストをプルする必要はありませんが、正常に動作していることを確認するために行いました。([設定] に戻ると、これを再びオフにすることができます)。

ステップ 4. PHP ファイルを作成してリストを取得し、ファイルをキャッシュします。

  1. XML ファイル (YOUR-FILE-NAME.xml) を作成し、oAuth フォルダーに保存します。
  2. PHP ファイル (YOUR-PHP-FILE.php) を作成し、oAuth フォルダーに保存します。
  3. Twitter API キー、ファイル名、および Twitter リストの詳細を使用して以下のコードを編集し、PHP ファイルに保存します。(コードを < ? PHP および ?> 括弧内に入れます)。

    /* Twitter keys & secrets here */
    $consumer_key = 'INSERT HERE';
    $consumer_secret = 'INSERT HERE';
    $access_token = 'INSERT HERE';
    $access_token_secret = 'INSERT HERE';
    
    // Create Twitter API object
    require_once('twitteroauth/twitteroauth.php');
    // get access token and secret from Twitter
    $oauth = new TwitterOAuth($consumer_key, $consumer_secret, $access_token,                 $access_token_secret);
    // fake a user agent to have higher rate limit
    $oauth->useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9';
    
    // Send an API request to verify credentials
    $credentials = $oauth->get('account/verify_credentials');
    echo 'Connected as @' . $credentials->screen_name . '\n';
    
    // Show API hits remaining
    $remaining = $oauth->get('account/rate_limit_status');
    echo "Current API hits remaining: {$remaining->remaining_hits}.\n";
    
    $ch = curl_init();
    $file = fopen("YOUR-FILE-NAME.xml", "w+");
    curl_setopt($ch, CURLOPT_URL,'https://api.twitter.com/1/lists/statuses.xml?slug=INSERT-LIST-NAME&owner_screen_name=INSERT-YOUR-TWITTER-USERNAME-HERE&include_entities=true');
    curl_setopt($ch, CURLOPT_FILE, $file);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    fclose($file);?>
    
  4. ファイル パスをブラウザにコピーしてテストします。(例: http://www.yourwebsite.com/twitter/YOUR-PHP-FILE.php )

これは twitter に連絡し、リストを XML ファイルとして取得し、YOUR-FILE-NAME.xml に保存します。XML ファイルを開いてテストします。Twitter リストのユーザーからの最新のステータスが含まれているはずです。

ステップ 5. Cron ジョブを介して PHP スクリプトを自動化し、好きな回数 (1 時間あたり最大 350 回) 実行します。

  1. Cpanel を開き、[Cron ジョブ] をクリックします (通常は [詳細設定] の下にあります)。
  2. 共通設定を使用して、スクリプトの規則性を選択できます。
  3. コマンド フィールドに次のコードを追加します。

    php /home/CPANEL-USERNAME/public_html/WEBSITE/twitter/YOUR-PHP-FILE.php >/dev/null 2>&1

スクリプトは選択した回数だけ実行され、Twitter からリストを取得して YOUR-FILE-NAME.xml に保存します。

ステップ 6. キャッシュされた XML ファイルからステータスを取得できるようになりました。これは、訪問者が API に対して不要な呼び出しを行わないようにすることを意味します。

特定の screen_name をターゲットにする方法をまだ考えていませんが、誰かが助けてくれますか?

于 2012-07-30T14:03:59.810 に答える
2

a) 12 の異なるアカウントをチェックせず、[パブリック] リストhttps://twitter.com/lists を作成し、それのみをチェック => 12 分の 1 のリクエスト

b) この素晴らしい oAuth ライブラリを使用します:https://github.com/abraham/twitteroauth署名なしの代わりに oAuth リクエストを使用します => 350 のリクエストを取得し、IP 制限の影響を受けません

于 2012-05-09T07:31:14.400 に答える