Processing + Twitter

たまにはプログラミングの話。
ProcessingからTwitterに投稿する方法について

ふつうにJava

hwhack: Processingでtwitterと http認証 (basic auth)

  1. Authenticatorで認証
  2. http://twitter.com/statuses/update.xmlを指定し、URLConnectionでPOST

ってだけだが、POSTした後ちゃんと受信をしないとうまくいかないみたい。

import java.net.*;

//ユーザ名とパスワード
String user = "user";
String pass = "password" ;

//リクエストURL。update.xmlを指定
String url = "http://twitter.com/statuses/update.xml" ;
  
//認証まわり
class BasicAuth extends java.net.Authenticator{
  private String user;
  private String pass;
  public BasicAuth(String user, String pass)
  {
    this.user = user;
    this.pass = pass;
  }

  protected PasswordAuthentication getPasswordAuthentication()
  {
    return new PasswordAuthentication(user,pass.toCharArray());
  }

}


void setup() {

  BasicAuth tw_authenticator = new BasicAuth(user, pass);
  Authenticator.setDefault(tw_authenticator);

  try{
      URL helloURL = new URL("http://twitter.com/statuses/update.xml");
            
      URLConnection con = helloURL.openConnection();
      con.setDoOutput(true);

      PrintWriter out = new PrintWriter(con.getOutputStream());
      
      //POSTするメッセージ
      out.print("status= test");
      out.close();

      //POSTした後は受信
      InputStreamReader	in = new InputStreamReader(con.getInputStream());
      BufferedReader	br = new BufferedReader(in);

      String line;
      while((line=br.readLine()) != null)
      {
	System.out.println(line);
      }
      br.close();
      in.close();      
  }catch (IOException e) {
      e.printStackTrace();
    }
}

void draw() {
}

twitter4jを使う

Twitter API - TwitterまとめWiki
Twitter APIJavaラッパを書いた人がいるのでそれを使わせてもらう。
http://yusuke.homeip.net/twitter4j/ja/index.html

準備として、libraries/twitter4j/library/
内にjarファイルを放り込んでおく。
Processingが認識してくれないっぽいので、twitter4j.jarにリネームする必要があるみたい。

import twitter4j.*;

void setup(){
  try{
    //ユーザ名とパスワード
    Twitter twitter = new Twitter("user","password");
    //メッセージ
    Status status = twitter.update("test");
   //投稿したメッセージを表示
    System.out.println(status.getText() + " POSTED");	
  }catch(Exception e){
    System.out.print(e.getMessage());
  }
}

void draw(){
}

圧倒的に簡単になりましたね。