Blog
StewGate 1 (SG-1) を使用して、ProcessingからTwitterにつぶやいてみた
ちょっと授業でも必要なので、ProcessingからTwitterにメッセージを投稿する仕組みをつくってみた。備忘録として…
最初は、Twitter APIのJavaをでラッパーしたTwitter4Jを使用して、真面目にoAuth認証をしてTweetする仕組みを目指したのだが、認証の手続きのあまりの煩雑さに挫折…
困ってTwitterにつぶやいたら、@arms22 さんから耳寄りな情報が。StewGateというOAuth に対応していないクライアントから Twitter にアクセスするためのプロキシがあるらしい。早速これを採用してみた。
StewGateを使用するには、まずアクセスのためのトークンを発行してもらう必要がある。Twitterに自分のアカウントでログインした状態で、トークン発行のURLにアクセスしてトークンを取得しメモしておく。
次に、ProcessingからhttpサーバにPOSTする仕組みが必要となるのだが、フォーラムで調べたところ、下記の記事を発見。
この最後の投稿を参考に簡単なサンプルを作成してみた。まず、準備として下記のJavaライブラリをダウンロードしておく。
http://hc.apache.org/httpclient-3.x/
次にProcessingのスケッチを新規に作成して、Sketch > Add File… を選択し先程ダウンロードしたhttpclientのフォルダの中にある「lib/httpcore-4.1.jar」を選択し、ファイルを追加しておく。マウスをクリックするとTweetします。
メインのスケッチ
[code language=”java”]
TweetStewgate ts;
String token = "[取得したトークンを記入]";
void setup() {
size(400, 400);
ts = new TweetStewgate(token);
}
void draw() {
}
void mouseReleased() {
ts.tweetMsg("hello hello");
}
[/code]
TweetStewgate.pde
[code language=”java”]
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
class TweetStewgate {
String token;
TweetStewgate(String _token) {
token = _token;
}
void tweetMsg(String msg) {
println("Tweet msg : " + msg);
String url = "http://stewgate.appspot.com/sg1/post/";
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost( url );
List nameValuePairs = new ArrayList(2);
nameValuePairs.add(new BasicNameValuePair("_t", token));
nameValuePairs.add(new BasicNameValuePair("msg", msg));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
println( "executing request: " + httpPost.getRequestLine() );
HttpResponse response = httpClient.execute( httpPost );
HttpEntity entity = response.getEntity();
println( response.getStatusLine() );
if ( entity != null ) entity.writeTo( System.out );
if ( entity != null ) entity.consumeContent();
httpClient.getConnectionManager().shutdown();
}
catch( Exception e ) {
e.printStackTrace();
}
}
}
[/code]
コードを下記にアップしました。