3

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

不幸的是,我不断收到“超出速率限制。客户每小时发出的请求不得超过 150 个。” 错误事件虽然我只从我应该有的 150 个请求中发出 24 个请求。

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

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

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

提前致谢!

4

2 回答 2

3

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

这是我的分步指南:

步骤 1. 创建一个 Twitter 列表。

  1. 转到:https ://twitter.com/username/lists
  2. 点击“创建列表”
  3. 输入详细信息并保存。
  4. 转到您希望添加到列表中的 Twitter 用户,然后单击齿轮下拉菜单并选择“从列表中添加或删除”。勾选列表旁边的复选框。

第 2 步。 通过以下方式创建 Twitter 应用程序:https ://dev.twitter.com/apps/new

  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 脚本,使其尽可能频繁地运行(每小时最多 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 进行不必要的调用。

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

于 2012-07-30T14:03:59.810 回答
2

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

b) 使用这个很棒的 oAuth 库:https://github.com/abraham/twitteroauth并使用 oAuth 请求而不是 unsigned => 你将收到 350 个请求,它们不会受到 IP 限制的影响

于 2012-05-09T07:31:14.400 回答