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=falseoauth.consumerKey=#################oauth.consumerSecret=########################################
† 実行例
上記をコンパイル後、実行可能なjarにまとめて起動させると下記のような感じになります。
java -jar hsurTestApp.jarEnter the PIN(if aviailable) or just hit enter.[PIN]:0254565Showing friends timeline.(ここにTLが表示される)
ポイントはPINを入力する部分になります、この部分は初回起動時のみ表示されます。流れ的にはブラウザが自動的に起動して、許可を与えるかどうかについて同意すると、PINコード(数字の羅列)が表示されるので、これを画面から入力してやればOKです。2回目移行はカレントディレクトリにできている twitter4j.properties というキャッシュファイルを利用するようになっています。


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