在共享服务器上使用Twitter API - 即使我正在缓存响应,也超过了速率限制

时间:2012-04-25 14:26:03

标签: api twitter oauth limit rate

我编写了一个php脚本,通过为每个帐户提取xml并在我的服务器上缓存它来获取12个不同Twitter帐户的最新状态更新。目前每30分钟运行一次。

不幸的是,我一直在“超出限额。客户每小时的请求数不能超过150个。”错误事件,虽然我只发出了我应该有的24个请求。

我认为这是因为我的域名在共享服务器上,而Twitter正在计算针对我的其他请求。

如何授权我的请求,以便我不受标准IP限制的限制?

我没有OAuth的经验,所以如果可能的话,需要一步一步的说明。

提前致谢!

2 个答案:

答案 0 :(得分:3)

好的,所以我设法充分利用了这项工作,没有以前的API等经验。

以下是我的分步指南:

第1步。 创建Twitter列表。

  1. 转到:https://twitter.com/username/lists
  2. 点击“创建列表”
  3. 输入详细信息并保存。
  4. 转到要添加到列表中的Twitter用户,然后单击齿轮下拉列表并选择“添加或从列表中删除”。勾选列表旁边的复选框。
  5. 第2步。 通过以下方式创建Twitter应用程序:https://dev.twitter.com/apps/new

    1. 使用您的Twitter凭据登录。
    2. 为您的应用提供名称,说明等。
    3. 转到“设置”标签,将“访问类型”更改为“读取和写入”,然后单击“更新此Twitter应用程序的设置”。
    4. 点击页面底部的“创建我的访问令牌”。
    5. 您现在将拥有消费者密钥,消费者密钥,访问令牌和访问令牌密钥。记下这些。

      第3步。创建API令牌。

      1. 从您的服务器下载并安装Abraham Twitter oAuth库:https://github.com/abraham/twitteroauth(我将使用名为“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,并在您的推特帐户上发布“hello world”状态。

      4. 注意:我们之前做过的读/写访问更改使代码发布状态更新,实际上并不需要从API中提取列表,但我这样做是为了确保它正常工作。 (您可以通过返回设置再次关闭此功能。)

        第4步。 创建PHP文件以提取列表并缓存文件。

        1. 创建XML文件(YOUR-FILE-NAME.xml)并将其保存在oAuth文件夹中。
        2. 创建一个PHP文件(YOUR-PHP-FILE.php)并将其保存在oAuth文件夹中
        3. 使用您的Twitter API密钥,文件名和推文列表详细信息编辑以下代码,并将其保存在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

        5. 这应该联系twitter,将列表作为XMl文件拉出并保存到YOUR-FILE-NAME.xml中。通过打开XML文件对其进行测试,它应该具有来自twitter列表中用户的最新状态。

          第5步。 通过Cron作业自动运行PHP脚本(每小时最多350次)。

          1. 打开您的Cpanel并点击“Cron jobs”(通常在“高级”下)。
          2. 您可以使用常用设置选择脚本的规律性。
          3. 在命令字段中添加以下代码:

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

          4. 您的脚本现在将按照您选择的频率运行,从twitter中提取列表并将其保存到YOUR-FILE-NAME.xml中。

            第6步。 您现在可以从缓存的XML文件中提取状态,这意味着访问者不会对API进行不必要的调用。

            如果有人可以提供帮助,我还没有弄清楚如何定位特定的screen_name?

答案 1 :(得分:2)

a)不要检查12个不同的帐户,创建[公共]列表https://twitter.com/lists并仅检查它=>请求数减少12倍

b)使用这个令人敬畏的oAuth lib:https://github.com/abraham/twitteroauth并使用oAuth请求而不是unsigned =>您将获得350个请求,它们不会受到IP限制的影响