Target
一番リツイート数が多いツイートを自動的にリツイートする。Environment
- OS
- Linux 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
- JDK
- 1.7.0_55
- Apache Maven
- 3.0.4
- twitter4j
- 4.0.2
Develop
まず、mavenで環境整備する。準備
以下のコマンドでプロジェクトを作成する。twitter4jを利用できるようにするために、pom.xmlを更新する。mvn archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false \ -DgroupId=com.example.twitter \ -DartifactId=get-popular-tweet
ここで “maven-compiler-plugin” と “maven-assembly-plugin”というプラグインも追加しているが、<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.twitter</groupId> <artifactId>get-popular-tweet</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>get-popular-tweet</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.twitter4j</groupId> <artifactId>twitter4j-core</artifactId> <version>4.0.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>fully.qualified.MainClass</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build> </project>
それは以下の理由から。
- maven-compiler-plugin
- mavenはデフォルトでJDK1,3を使おうとするから、これでJDKバージョンを指定できる。
- maven-assembly-plugin
- コンパイルすると、依存ライブラリを含めたjarファイルを生成してくれる。
ここに、twitter4jのコンフィグを設定する。設置場所は”pom.xml”と同じディレクトリ。
以下のauthキーはtwitterのデベロッパーサイトから取得する。
]debug=false oauth.consumerKey=xxxxxxx oauth.consumerSecret=xxxxxxx oauth.accessToken=xxxxxx oauth.accessTokenSecret=xxxxxx
# tree . ├── pom.xml ├── twitter4j.properties └── src ├── main │   └── java │   └── com │   └── example │   └── twitter │   └── App.java └── test └── java └── com └── example └── twitter └── AppTest.java 11 directories, 3 files
これで準備は完了。
プログラミング
“src/main/java/com/example/twitter/App.java” このファイルを変更して開発する。“Query.ResultType.popular”を選んだ場合なぜか15件だけしか取得できないため、注意が必要。 結果package com.example.twitter; import java.util.List; import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.User; import twitter4j.Query; import twitter4j.QueryResult; import twitter4j.Query.ResultType; public class App { public static void main( String[] args ) { Twitter twitter = new TwitterFactory().getInstance(); Query query = new Query("ラーメン"); query.setCount(100); query.setResultType(Query.ResultType.mixed); // Must use mixed. not popular. query.until("2014-12-21"); query.since("2014-12-20"); QueryResult result; int numHits = 0; int curPage = 1; Status popularTweet = null; while (true) { try { result = twitter.search(query); } catch (Exception e) { System.out.println(e); break; } numHits += result.getCount(); List<Status> tweets = result.getTweets(); for (Status tweet : tweets) { // Save most popular tweet if (popularTweet == null || popularTweet.getRetweetCount() < tweet.getRetweetCount()) { popularTweet = tweet; } } // Go to next page (set page limit to 5) if (!result.hasNext()) break; query = result.nextQuery(); curPage += 1; if (curPage >= 5) break; } System.out.println("Number of Hits : " + numHits); System.out.println("User : " + popularTweet.getUser().getScreenName()); System.out.println("Tweet : " + popularTweet.getText()); System.out.println("Number of Retweeted : " + popularTweet.getRetweetCount()); System.out.println("Date : " + popularTweet.getCreatedAt()); // Retweet most popular tweet if (popularTweet != null) Status status = twitter.retweetStatus(popularTweet.getId()); } }
# 依存ライブラリも含めたjarファイルを生成 $ mvn clean compile assembly:single # 実行 $ java -cp target/get-popular-tweet-1.0-SNAPSHOT-jar-with-dependencies.jar com.example.twitter.App [/home/hidetomo/work/get-popular-tweet] Number of Hits : 400 User : iori_iori Tweet : RT @Pirate_Radio_: 大好きなラーメン屋がネットで酷評されてて足が遠ざかった。観たいと思ってた映画を評論家が★1つで「時間の無駄」と書かれてて観なかった経験がある。先日久々に食べたラーメンは旨くDVDで観た映画は面白かった。基準を外に託すと誰かに聞かないと幸せか… Number of Retweeted : 26318 Date : Sun Dec 21 08:58:39 JST 2014
美味しいラーメンのお店情報が得られるかと思ったけど、
関係ないツイートだった(-_-;) twitterでtwitter4j.propertiesに設定したアカウントを見ると、上記のツイートがリツイートされているのが分かる。