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します。
メインのスケッチ
TweetStewgate ts; String token = "[取得したトークンを記入]"; void setup() { size(400, 400); ts = new TweetStewgate(token); } void draw() { } void mouseReleased() { ts.tweetMsg("hello hello"); }
TweetStewgate.pde
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(); } } }
コードを下記にアップしました。