読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Twitter4jで特定のユーザのツイートのリツイート数、お気に入られ数を一気に取得する

<スポンサーリンク>

好きなユーザーのツイートの過去分を取得したいというときがある。
そして、できれば膨大な過去のツイートから、お気に入られ数やリツイート数の多いものから並べてみたいということもあるだろう。
そんなときに使えるサンプルを作ってみた。

Javaでツイッターをいじるには、Twitter4jを使うのが早い。
Twitter4jでリツイートされた数やお気に入られ数を取得するには現時点で最新の3.0.4以上を使う必要がありそう。
http://twitter4j.org/ja/index.html#snapshot
「twitter4j-3.0.4-SNAPSHOT.zip」

サンプル

保守性とかデザインパターンは考慮していない。まず動かすだけ。
pageというのは、1ページごとに20ツイート取得できるというもの。
最新が1ページ目で、kazuki_fujisawaさんについては170ページ分取得できた。

package twittersample;

import java.text.SimpleDateFormat;

import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;

public class TwitterSample {
    private final int PAGE_LIMIT = 100;
    private Twitter twitter;
    
    public Twitter getTwitter() {
        return twitter;
    }

    public void setTwitter(Twitter twitter) {
        this.twitter = twitter;
    }

    public void getUserTimeLine(String userName) {
        try {
            //int firstPage = 1;
            int firstPage = 150;
            int tweetCount = 1;
            for (int i = 1; i < PAGE_LIMIT; i++) {
                ResponseList<Status> statuses = twitter.getUserTimeline(userName, new Paging(firstPage));
                System.out.println("-------" + firstPage + "ページ目----------");
                for (Status status : statuses) {
                    System.out.println("(" + tweetCount + ")@" + status.getUser().getName() + "--" + status.getText());
                    System.out.println("お気に入られ数:" + status.getFavoriteCount());
                    System.out.println("リツイート数:" + status.getRetweetCount());
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd:H:m:s");
                    System.out.println("ツイート日時:" + sdf.format(status.getCreatedAt()));
                    tweetCount++;
                    firstPage++;
                }
            }
        } catch (TwitterException e) {
            e.printStackTrace();
            System.out.println("失敗");
            
        }
    }
}

こいつを使う側のMainはこんな感じ。
ちゃんとやるならコンシューマーキーとかはプロパティにする。
このサンプルはとりあえず動かす版。ユーザ名をkazu_fujisawaと指定している。

package twittersample;

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;

public class Main {
    public static void main(String[] args) {
        Twitter twitter = new TwitterFactory().getInstance();
        String consumerKey = "XXXXXXXX";
        String consumerSecret = "YYYYYYY";
        String accessToken = "ZZZZZZZ";
        String accessTokenSecret = "JJJJJJJJJJ";
        
        twitter.setOAuthConsumer(consumerKey, consumerSecret);
        twitter.setOAuthAccessToken(new AccessToken(accessToken,accessTokenSecret));
        
        TwitterSample sample = new TwitterSample();
        sample.setTwitter(twitter);
        sample.getUserTimeLine("kazu_fujisawa");

    }
}

抜粋だけど、こんな感じで過去のツイートを取得できる。だいたい170ページ。
3400ツイート分くらいまでは遡れそう。
以下は取得した藤沢数希さんのツイート達。

(5)@Kazuki Fujisawa--僕の観察によると、年収1500万円〜2500万円ぐらいが一番お金持ちに「見える」と思う。俺プチ金持ちになったぜみたいな高揚感と、ちょっとだけ見せびらかしたい欲求と、実際にそれぐらいできるからだと思うけど、年収4000万円ぐらい超えてくると、逆にそういうのがなくなるんだよね。
お気に入られ数:70
リツイート数:51
ツイート日時:2012/05/27:12:20:46
(6)@Kazuki Fujisawa--お金持ちのお金の使い方の特徴は、絶対額では決して見ないことだと思う。1000万単位の支出も、それが将来もっと増えて返ってきたり、それだけの価値があると思えば即決するし、500円のものでも、その価値がないと思えば決して払わない。
お気に入られ数:179
リツイート数:112
ツイート日時:2012/05/27:12:10:9

今度はこのツイートたちをDBに突っ込んで、お気に入られ数+リツイート数の多い順にランキングしてみたい。

参考

Twitter API ポケットリファレンス (POCKET REFERENCE)

Twitter API ポケットリファレンス (POCKET REFERENCE)

感謝のプログラミング

今回で感謝のプログラミングは【641時間目】
10000時間まで、あと【9359時間】