我刚刚建立了一个带有新主机的网站,并上传了比特和bob,但却发现我的脚本让特定用户的推文破了。我被告知我超过了我对twitter api的150个电话的限制。
当时这可能是有意义的,因为我正在测试所有内容并重新加载页面。然而,我今天只做了几次尝试,但我得到的只是同样的错误。我甚至重新编写了我的代码,以便它缓存我要求的所有推文一小时,这意味着每小时最多1次调用,但它仍然没有改变。下面是用于获取,缓存和检索推文的代码;
function getUrl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
function getContent($file, $url, $hours = 1)
{
//vars
$CurrentTime = time();
$ExpireTime = $hours * 60 * 60;
$FileTime = filemtime($file);
if(file_exists($file) && ($CurrentTime - $ExpireTime < $FileTime))
{
//echo 'returning from cached file';
return json_decode(file_get_contents($file), true);
}
else
{
$content = getUrl($url);
$fh = fopen($file, 'w');
fwrite($fh, $content);
fclose($fh);
//echo 'retrieved fresh from '.$url.':: '.$content;
return json_decode($content, true);
}
}
$NumTweets = 3;
$AccountName = "TWITTERUSERNAME"; //this can be any username
$URL = "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=".$AccountName."&count=".$NumTweets;
$XML = getContent('./lib/inc/tweets.txt', $URL);
然后我使用以下内容来定义推文和创建时间,然后以类似的方式打印出来;
for($i = 0; $i < $NumTweets; $i++)
{
$Tweet['text'][$i] = formatTwitString($XML[$i]['text']);
$Tweet['time'][$i] = formatTwitTime($XML[$i]['created_at']);
}
格式功能无关紧要,我知道它们工作正常。
问题是,如果我手动输入在我的浏览器中生成的$ URL var,我可以毫无问题地加载推文,只有当我通过网站加载它时我才会收到错误,我试着复制内容使用此方法并将其保存到另一个Web服务器上的文件,并将twitter $ URL替换为其他服务器URL,并且工作正常,
所以我不认为我的代码有什么问题,但不知怎的,我对twitter的调用正在被冲洗,这可能是同一主机上的其他网站(iPage.com)以某种方式使用这些调用推特吗? 我有点迷茫,请帮忙, 感谢。
答案 0 :(得分:1)
您的Twitter请求可能是使用服务器的主要共享IP进行的,从而导致您的速率限制与服务器上的其他用户共享。您可以通过在发出API请求时向Twitter进行身份验证来解决此问题。
https://dev.twitter.com/docs/rate-limiting#rest
通过身份验证,无论使用何种IP地址,您都可以获得自己的速率限制。