Twitter にポストするアプリが作れるかと聞かれたので、前々から興味があった Twitter 連携アプリを作り方を調べてみました。最近 Java ばかり使っているので、今回はTwitter4Jを利用することにします。
基本的な操作は「Twitter4J - コード例」を参考にすれば問題なさそうです。ごく簡単なアプリを書いてみましたが、Javaがある程度使いこなせれば簡単ですね。調子に乗ってウザイbotとか作ってみたくなりますが、これは自重しておきましょう。
以下、作業メモ。
† アプリを登録する
最初に躓きそうなところとしてはOAuth 認可の部分でしょうか。これを使うには New Twitter Application | dev.twitter.com から自分のアプリケーションを登録して、Consumer keyとConsumer secretをあらかじめ取得しておく必要があります。
† TwitterのTLを取得するサンプル
下記は一番簡単と思われるTLを取得するサンプル。ほとんどサンプルのパッチワークでできています。
twitter4j.propertiesの方のoauth.consumerKeyとoauth.consumerSecretは上記で登録したアプリのものに差し替えておきます。
HsurTestApp.java
import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Properties;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
public class HsurTestApp {
/**
* @param args
* @throws TwitterException
* @throws IOException
* @throws FileNotFoundException
* @throws URISyntaxException
*/
public static void main(String[] args) throws TwitterException, IOException {
final String CONF_NAME = "twitter4j.properties";
Twitter twitter;
Properties prop = new Properties();
try {
prop.load(new InputStreamReader(new FileInputStream(CONF_NAME)));
twitter = new TwitterFactory(".").getInstance();
} catch (FileNotFoundException e) {
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(CONF_NAME);
prop.load(is);
twitter = new TwitterFactory().getInstance();
RequestToken requestToken = twitter.getOAuthRequestToken();
AccessToken accessToken = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (null == accessToken) {
try {
Desktop.getDesktop().browse(new URI(requestToken.getAuthorizationURL()) );
} catch (URISyntaxException urise) {
urise.printStackTrace();
System.err.println("Bad Authorization URL.");
System.exit(1);
}
System.out.println();
System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
String pin = br.readLine();
try{
if(pin.length() > 0){
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
}else{
accessToken = twitter.getOAuthAccessToken();
}
} catch (TwitterException te) {
if(401 == te.getStatusCode()){
System.out.println("Unable to get the access token.");
}else{
te.printStackTrace();
}
}
}
prop.put("oauth.accessToken", accessToken.getToken());
prop.put("oauth.accessTokenSecret", accessToken.getTokenSecret());
prop.store(new FileWriter(CONF_NAME), "Autogenerated by HsurTestApp");
twitter = new TwitterFactory().getInstance(accessToken);
}
List<Status> statuses = twitter.getFriendsTimeline();
System.out.println("Showing friends timeline.");
for (Status status : statuses) {
System.out.println(status.getUser().getName() + ":"
+ status.getText());
}
}
}
twitter4j.properties
debug=false
oauth.consumerKey=#################
oauth.consumerSecret=########################################
† 実行例
上記をコンパイル後、実行可能なjarにまとめて起動させると下記のような感じになります。
java -jar hsurTestApp.jar
Enter the PIN(if aviailable) or just hit enter.[PIN]:0254565
Showing friends timeline.
(ここにTLが表示される)
ポイントはPINを入力する部分になります、この部分は初回起動時のみ表示されます。流れ的にはブラウザが自動的に起動して、許可を与えるかどうかについて同意すると、PINコード(数字の羅列)が表示されるので、これを画面から入力してやればOKです。2回目移行はカレントディレクトリにできている twitter4j.properties というキャッシュファイルを利用するようになっています。


ここまでで作業時間は作業時間は1時間強といったところでした。