yoppa.org


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する仕組みが必要となるのだが、フォーラムで調べたところ、下記の記事を発見。

HTTP post Processing

この最後の投稿を参考に簡単なサンプルを作成してみた。まず、準備として下記の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]

コードを下記にアップしました。