即使我最多只有1小时/小时,也会超过推特电话

时间:2011-12-14 22:07:34

标签: php twitter curl

我刚刚建立了一个带有新主机的网站,并上传了比特和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)以某种方式使用这些调用推特吗? 我有点迷茫,请帮忙, 感谢。

1 个答案:

答案 0 :(得分:1)

您的Twitter请求可能是使用服务器的主要共享IP进行的,从而导致您的速率限制与服务器上的其他用户共享。您可以通过在发出API请求时向Twitter进行身份验证来解决此问题。

https://dev.twitter.com/docs/rate-limiting#rest

通过身份验证,无论使用何种IP地址,您都可以获得自己的速率限制。