2011-12-14 7 views
2

방금 ​​새 호스트로 웹 사이트를 설정하고 비트와 밥을 업로드하여 특정 사용자의 트윗이 깨지는 것을 알 수있었습니다. 나는 내가 트위터 API에 150 콜의 한도를 초과했다는 말을 들었다.1 시간/1 시간 만 지났는데도 트위터 통화가 많습니다.

내가 모든 것을 테스트하고 많은 페이지를 다시로드 할 때이 의미가되었을 수 있습니다. 그러나 나는 오늘 단지 두어 번의 시도를 해왔지만, 내가 얻은 모든 것은 똑같은 오류입니다. 심지어 코드를 다시 작성하여 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를 입력하면 문제가없는 트윗을로드 할 수 있습니다. 웹 사이트를 통해로드 할 때만 오류가 발생합니다. 콘텐츠를이 방법을 사용하고 다른 웹 서버의 파일에 저장하고 트위터 $ URL을 다른 서버 URL로 바꾸면 괜찮습니다.

그래서 내 코드가 잘못됐다고 생각하지 않지만 어떻게 든 내 트위터 이 호스트를 다른 웹 사이트 (iPage.com)로 사용할 수 있습니까? 조금 길어졌습니다. 도와주세요, 고마워요.

+0

확실하지 않지만 사용자 에이전트를 변경하려고 시도 할 수는 있지만 jitter를 잡아서 반환하는 다른 서버 (꼬임이있는 무료 서버)에 넣을 수있는 작은 API 스크립트를 만들 수는 없습니다. 주 스크립트에서 배열을 가지고 무작위로 API를 선택하고 결과/오류를 확인하거나 다른 것을 시도 할 수 있습니다. 짐을 퍼 뜨리고있어. –

+0

불행히도 그 도움이되지 않은 임의의 사용자 에이전트 배열을 사용해 보았습니다. 당신이 제안한대로 트윗을 제공하기 위해 다른 웹 사이트를 사용하고 싶지는 않지만 작동하는 빠른 테스트를 사용하고, 느린 초기의 트윗 캐싱 이후에는 빠르지 만 이상적으로는 여전히 트윗을 얻고 있습니다. 트위터에서 직접. – Novocaine

답변

1

트위터에 대한 요청이 서버의 기본 공유 IP로 이루어져 서버의 다른 사용자와 속도 제한이 공유 될 수 있습니다. API 요청을 할 때 Twitter에 인증하여이 문제를 해결할 수 있습니다. 인증으로

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

, 당신은 상관없이 사용되는 IP 주소의 자신의 속도 제한을받을.

+0

OAuth를 사용하여 전화를 걸어야 할 필요가 있다는 것을 의미합니까? 간단히 말해서 이것에 대한 언급을 간략하게 보았습니다. 그러나 이것이 필요한 경로인지 확실하지 않았습니다. 즉 위의 함수를 완전히 다시 작성하거나 OAuth를 사용하도록 조정할 수 있습니까? – Novocaine

+0

OAuth를 추가하면 처음에는 Twitter에서 OAuth 토큰을 가져 오는 추가 코드와 OAuth 토큰을 나타내는 요청 URI의 추가 매개 변수가 추가됩니다. OAuth를 지원할 라이브러리가 있습니다. – lunixbochs

관련 문제