我编写了一个php脚本,通过为每个帐户提取xml并在我的服务器上缓存它来获取12个不同Twitter帐户的最新状态更新。目前每30分钟运行一次。
不幸的是,我一直在“超出限额。客户每小时的请求数不能超过150个。”错误事件,虽然我只发出了我应该有的24个请求。
我认为这是因为我的域名在共享服务器上,而Twitter正在计算针对我的其他请求。
如何授权我的请求,以便我不受标准IP限制的限制?
我没有OAuth的经验,所以如果可能的话,需要一步一步的说明。
提前致谢!
答案 0 :(得分:3)
好的,所以我设法充分利用了这项工作,没有以前的API等经验。
以下是我的分步指南:
第1步。 创建Twitter列表。
第2步。 通过以下方式创建Twitter应用程序:https://dev.twitter.com/apps/new
您现在将拥有消费者密钥,消费者密钥,访问令牌和访问令牌密钥。记下这些。
第3步。创建API令牌。
从您的服务器下载并安装Abraham Twitter oAuth库:https://github.com/abraham/twitteroauth(我将使用名为“twitter”的文件夹)。
创建一个新文件,在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"));
现在已授权您的Twitter应用程序获取API,并在您的推特帐户上发布“hello world”状态。
注意:我们之前做过的读/写访问更改使代码发布状态更新,实际上并不需要从API中提取列表,但我这样做是为了确保它正常工作。 (您可以通过返回设置再次关闭此功能。)
第4步。 创建PHP文件以提取列表并缓存文件。
使用您的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);?>
将文件路径复制到浏览器中并进行测试。 (例如http://www.yourwebsite.com/twitter/YOUR-PHP-FILE.php)
这应该联系twitter,将列表作为XMl文件拉出并保存到YOUR-FILE-NAME.xml中。通过打开XML文件对其进行测试,它应该具有来自twitter列表中用户的最新状态。
第5步。 通过Cron作业自动运行PHP脚本(每小时最多350次)。
在命令字段中添加以下代码:
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?
答案 1 :(得分:2)
a)不要检查12个不同的帐户,创建[公共]列表https://twitter.com/lists
并仅检查它=>请求数减少12倍
b)使用这个令人敬畏的oAuth lib:https://github.com/abraham/twitteroauth
并使用oAuth请求而不是unsigned =>您将获得350个请求,它们不会受到IP限制的影响