2012-05-24 3 views
2

WPF .NET 4.0 C# 응용 프로그램에서 TweetSharp를 사용하고 인증 된 Twitter 서비스 개체를 사용하고 있습니다. 모든 단일 프로필을 검색하기 위해 팔로워 목록을 반복하는 데 문제가 있습니다. 나는 다음과 같은 코드를 사용하고 있습니다 :이 글을 쓰는 시점에서 1,271 추종자를 가지고 내 자신의 계정에이를 사용할 때 TweetSharp로 모든 트위터 사용자를 커서를 사용하여 검색하는 방법은 무엇입니까?

TwitterCursorList<TwitterUser> followers = twitterService.ListFollowersOf(userID, -1); 
while (followers != null) 
{ 
    foreach (TwitterUser follower in followers) 
    { 
     //Do something with the user profile here 
    } 
    followers = twitterService.ListFollowersOf(userID, (long)followers.NextCursor); 
} 

내가 이상한 행동을 참조하십시오. 첫 번째 코드를 실행하면 100 명의 팔로어 목록이 생기고 다음 ListFollowersOf 호출에서는 팔로워가 null이고 루프가 끝납니다. 여기

는 이상한 부분이다 : 나는 Visual Studio 및 재시작을 중지하면 같은 응용 프로그램 인스턴스에서, 또는 중요하지 않습니다 여부, 다시이 코드를 실행하면, 나는 하나 추가 ieration을 얻고 지금은 200를 얻을 수 추종자. 만약 내가이 트릭을 다시한다면, 이제 널 추방하기 전에 300 명의 추종자를 얻는다. 위의 코드를 호출 할 때까지 1271 명의 팔로어가 모두 반환 될 때까지이 작업을 여러 번 반복했습니다.

정말 이상한 점은 결국 리셋됩니다. Twitter API 제한 재설정 시간과 관련이 있다고 생각하지만이를 확인하지는 못했습니다. 이것이 API 재설정과 일치하는지 확인해 보겠습니다. 리셋이 발생하면 팔로워 100 명을 얻은 다음 200 명을 얻습니다.

나는 TweetSharp 단위 테스트 다음과 같은 게시물을 검토 한 그들은 나를 위해 작동하지 않았다

+1

'while (followers.NextCursor! = null)'을 사용해 보셨습니까? while 회 돌이는'followers'가'null' 일 때 멈추지 만'NextCursor'가'null' 일 때 연결 한 질문의 다른 예제들은 멈 춥니 다. – Kiril

+0

있습니다. followers.NextCursor는 long을 반환하며, 일단 추종자가 null이되면 (그리고 위에서 설명한 것처럼) null 참조 예외가 발생합니다.에서 [소스 구비 시험 (https://github.com/danielcrenna/tweetsharp/blob/master/src/net40/TweetSharp.Next.Tests/Service/TwitterServiceTests.cs) 검사 – ActiveNick

+0

한'NextCursor'이면 'null' 그리고 여러분은 그것을 오랫동안 주조하고 있습니다, 그래서 그것은 어떤 종류의 참조처럼 보입니다 (나는 그것을 검사 할 코드가 없습니다). 당신은 여전히 ​​followrs'가'null' 인'여부를 확인 할 수 있으며이'null'의 경우를 참조하지 않는',하지만 계속해야 당신의 while 루프처럼 보이는,'Assert.IsNotNull (followers.NextCursor) : 여기에 체크입니다 'NextCursor'가'null'이 될 때까지 ... 적어도 다른 예제들에서 보입니다. – Kiril

답변

0

내가 라이브러리를 가지고 있지 않지만, 기반

TwitterCursorList<TwitterUser> followers = twitterService.ListFollowersOf(userID, -1); 
while (followers.NextCursor != null) 
{ 
    if(followers != null) 
    { 
     foreach (TwitterUser follower in followers) 
     { 
      //Do something with the user profile here 
     } 
    } 
    followers = twitterService.ListFollowersOf(userID, (long)followers.NextCursor); 
} 
: 예 당신이 뭔가를해야처럼 보인다

라이브러리를 가지고 있지 않아 코드를 실행할 수 없지만 (너무 다운로드하기에는 너무 게으름) 라이브러리가 없어도 작동합니다. 당신은 아무것도 얻는 경우 코드가 잘 작동하기 때문에

public static List<TwitterUser> GetFollowers(this TwitterService svc) 
{ 
    List<TwitterUser> ret = new List<TwitterUser>(); 

    var followers = svc.ListFollowers(-1); 
    ret.AddRange(followers); 
    while (followers.NextCursor != null && followers.NextCursor.Value > 0) 
    { 
     followers = svc.ListFollowers(followers.NextCursor.Value); 
     ret.AddRange(followers); 
    } 
    return ret; 
} 

다음

var f = svc.GetFollowers(); 
1

나는 같은 것을 사용합니다.

문제가 무엇인지 쉽게 알아 내고 그에 따라 문제를 해결하기 쉽습니다. 나는 당신이 옳고, 당신이 트위터에 의해 금리가 제한되고 있다고 생각합니다.

당신의 동안 루프 후 코드에 이것을 추가

if(followers == null) { 
    Console.WriteLine("Error " + twitterService.Response.Error); 
} 

는 사실, 언제든지 뭔가 당신이 무엇을 TweetSharp이 잘못이라고 판단하는 것입니다 볼 수 Response 개체의 오류를 확인할 수 있습니다 null을 반환합니다. See this.

관련 문제