0

約150.000人のフォロワーがいるTwitterアカウントからすべてのfollowersIDを取得しようとしています。後でそれらの場所をマップしたいのですが、最初にそれらすべてのIDが必要です。

現在、私はこのコードを使用しています:

long lCursorIDs = -1;
    long[] fArray = new long[100];

    do
    {               
        fArray = twitter.getFollowersIDs(name, lCursorIDs).getIDs();            
    } while (twitter.getFollowersIDs(name, lCursorIDs).hasNext ()); 

    try
    {
        PrintWriter pr = new PrintWriter(filenameOutput);    

        for (int i=0; i<fArray.length ; i++)
        {
            pr.println(fArray[i]);
        }
        pr.close();
        System.out.println("Follower IDs collected and saved to file: " + filenameOutput );
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.out.println("No such file exists.");
    }

これは、フォロワーが少ないユーザーに対して機能します。しかし、その数が多いと、常にエラーメッセージが返されます-レート制限を超えました。1時間に特定の数のフォロワーIDのみを取得することを考えていましたが、その方法がわからず、最初のフォロワーから1時間ごとに開始するわけではありません。また、1回のリクエストで何人のフォロワーを獲得できるかわかりません。「lookupUser」メソッドと同様に100かもしれませんが、よくわかりません。アイデアや提案はありますか?

編集:わかりました、2700人のフォロワーを持つアカウントのfollowerIDを取得しようとしましたが、テキストファイルに正しく保存されました。また、1つのリクエストのみを「コスト」します。アカウント名を15500フォロワーのアカウントに変更したところ、レート制限を超えたというメッセージが表示されて再びクラッシュしました。フォロワーの数は約6倍しかないので、理由はわかりませんが、残りのリクエストはすべて費やされます。私が間違っていることについて何かアイデアはありますか?

4

1 に答える 1

1

答え:

 int numberOfFollowers; 
    numberOfFollowers = user.getFollowersCount(); 

            //CREATE ARRAYS FOR FOLLOWER IDS
    long cursor = -1;
    long[] fArray = new long[numberOfFollowers];
    long[] local = new long[5000];


    IDs ids = twitter.getFollowersIDs(name, cursor);
    int j = 0;

            int x = 5000;
    int durchgang = 1;
    int d_anzahl = 1 + numberOfFollowers / 5000;
    //STROE FOLLOWER IDS IN ARRAYS
    do 
    {                       
        ids = twitter.getFollowersIDs(name, cursor);            
        local = twitter.getFollowersIDs(name, cursor).getIDs();
        System.out.println("Durchgang: " + durchgang + " / " + d_anzahl );          
        System.arraycopy(local, 0, fArray, j * x , local.length);           
        j++;
        durchgang++;

        cursor = ids.getNextCursor();           
    } while (ids.hasNext());

これにより、TwitterユーザーのすべてのフォロワーIDを含む配列が取得されます。すべてのフォロワーIDを取得するために必要なループの数を計算し、5000 IDの各配列を、最後にすべてのIDを持つ新しい配列にコピーします。

于 2012-05-18T16:04:28.507 に答える