2012-01-05 1 views
1

나는 트위터 계정의 수를 추종자 카운트를 포함하는 간단한 작업이 주어졌다. 내가 만들고있는 응용 프로그램이 각 사용자의 팔로워 수를 계산하고 합산하기로되어있는 1000 개의 트위터 사용자 이름이있을 수 있습니다.트위터 속도 제한

쉬운 작업처럼 보였으므로 Twitter API 호출 (은 C# 클라이언트)을 사용하여 각 사용자에게 필요한 정보를 얻었습니다.

이가 (속도와 목적을 자족의 측면에서) 크게 작동
string target = "http:twitter.com/users/" + userName + ".xml"; 
Console.WriteLine("UserName: " + userName); 

WebClient client = new WebClient(); 

Stream stream = client.OpenRead(target); StreamReader reader = new 
StreamReader(stream); 
XmlTextReader xml_read = new XmlTextReader(stream); 

while (xml_read.Read()) { 
    xml_read.MoveToElement(); 
    if (xml_read.Name == "name") {   
     Console.WriteLine("Name: " + xml_read.ReadInnerXml().ToString()); 
    } 

    if (xml_read.Name == "followers_count"){ 
     Console.WriteLine("Followers: " + 
             xml_read.ReadInnerXml().ToString());   
      Console.WriteLine(); 
     } 
} 

그러나이 속도 문제가있다 : 난 후 해요 정보 단지 일부 공공 데이터 특별한 것이 없기 때문에, 나는 인증되지 않은 calls.Like이 사용 제한. 즉, 시간당 100 개 이상의 요청을 처리 할 수 ​​없습니다. 1000 명의 사용자는이 간단한 작업을 수행하는 데 10 시간이 필요합니다. ..

나는 다른 경로로 가려고했다. 내가 필요로하는 정보가 공개되어 있기 때문에 추종자 (그리고 실명)를 얻기 위해 각 트위터 계정의 HTML 페이지를 다운로드하기로 결정했다. 이렇게 :

WebRequest myWebRequest = WebRequest.Create("http://twitter.com/" + userName); 
WebResponse myWebResponse = myWebRequest.GetResponse(); 
Stream ReceiveStream = myWebResponse.GetResponseStream(); 
Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 
StreamReader readStream = new StreamReader(ReceiveStream, encode); 
string strResponse = readStream.ReadToEnd(); 

다음 간단한 문자열 구문 분석을 사용하여 추종자 수와 실제 이름을 얻습니다.

이 솔루션은 유효합니다 .. 그러나 전체 HTML 파일 (300kb + 크기)을 다운로드하는 것은 실제로 그것을하는 현명한 방법이 아닙니다. 또한 작업을 완료하는 데 약 2 시간이 걸립니다.

내가 원하는 것은 무엇입니까?

트위터에서 공개 정보를 얻는 더 스마트하고 효율적인 방법이 있기를 희망합니다.

+0

처음으로 데이터가 필요한 앱의 Twitter 계정을 어떻게 얻었습니까? 계정이 있다면 앱에서 계정에 액세스 할 수 있습니까? 원하는 정보가 공개 된 것으로 알고 있는데, 계정에 토큰이 있다면 토큰을 반복하여 각 계정의 정보를 개별적으로 검색 할 수 있으므로 속도 제한을 피할 수 있습니다. 제한된 계정 당 요청 수.속도 제한이있는 이유 중 일부는 사람들이 승인없이 Twitter 데이터를 구축 할 수 없기 때문입니다. – phreak3eb

답변

2

은 어쩌면 당신은이 솔루션을 사용할 수 있습니다 : 그것은 당신에게 최대 100 사용자 이름에 대한 데이터를 요청할 수있는 기능을 제공합니다 https://dev.twitter.com/docs/api/1/get/users/lookup

을 (쉼표로 구분)과 같이 : https://api.twitter.com/1/users/lookup.json?screen_name=bloodyairtimer,geertvdc

결과를 xml 또는 json으로 만들 것인지 결정할 수 있습니다. 아마도 json의 크기는 xml보다 작을 것입니다.

+0

고마워요! .. 이것은 내가 필요한 것입니다. (답변으로 표시) \. – aamran

+0

도움이되어 주셔서 감사합니다. 지저귀다 api에는 동일한 결과를 오기 위하여 약간 도로가 있고있다. – ChristiaanV

1

동일한 문제가 있습니다. 개발자 포럼을 통해 트위터 지원을 요청했지만 유용한 응답을받지 못했습니다. 모든 API 메소드에는 속도 제한이 있습니다. 일반적으로 인증하는 경우 더 큰 값을 가질 수 있지만 (공용 메소드의 경우 150, 인증의 경우 350) 큰 값은 아닙니다.

두 개 이상의 IP 주소를 사용할 수있는 경우 요청 수는 다를 수 있지만이 경우 IP는 아니지만 사용자를위한 것이기 때문에 인증을 사용하여 API를 호출하면 더 좋습니다.

트위터 속도 제한 정책은 정의된다 : https://dev.twitter.com/docs/rate-limiting/faq

+0

감사합니다. 두 가지 유형을 알고 있지만 둘 다 사용 사례에 충분하지 않습니다. 내가 얻으려는 정보가 속도 제한없이 지저귀다 웹 사이트를 통해 공개적으로 액세스 될 수 있기 때문에 나는 무제한 솔루션을 원했습니다. – aamran

0

당신은 Gnip과 같은 서비스를 사용할 수도 있습니다

그들은 모두 트위터를 저장했습니다!