Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

ProcessingとTwitterの連携

先日、『ARプログラミング?Processingでつくる拡張現実感のレシピ?』を読み終えたので、実際にサンプルを入力しながら学習を進めています。
第7章まで順調にきたのですが、第8章「Twitterと連携する」で躓きました。

Twitter4Jの3.03をインストールしたのですが、

  • 本で使われているgetProfileImage()メソッドが3.0.xで廃止されている
  • Twitter API 1.1では、以前のバージョンと異なり全てのメソッドコールはOAuth認可が必須

なので、p75のリスト3.13、p79のリスト3.14が動作しませんでした。
参考サイトを参考に、以下のように書き換えることで実行することができました。

List3_13

import twitter4j.*;
import twitter4j.conf.*;

Twitter twitter;

String consumer_key = "dev.twitter.comで取得した値をここに入力";
String consumer_secret = "dev.twitter.comで取得した値をここに入力";
String oauth_token = "dev.twitter.comで取得した値をここに入力";
String oauth_token_secret = "dev.twitter.comで取得した値をここに入力";

PImage icon = null;
String tweet = "";
String user_name = "tenkijp";

void setup() {
  size(640, 480);
  PFont myFont = createFont("Osaka", 48);
  textFont(myFont);
  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setDebugEnabled(true)
    .setOAuthConsumerKey(consumer_key)
    .setOAuthConsumerSecret(consumer_secret)
    .setOAuthAccessToken(oauth_token)
    .setOAuthAccessTokenSecret(oauth_token_secret);
  TwitterFactory tf = new TwitterFactory(cb.build());
  twitter = tf.getInstance();    
  
  try {
    icon = loadImage(twitter.showUser(user_name).getOriginalProfileImageURL(), "png");
    ResponseList <Status> statusList = twitter.getUserTimeline(user_name);
    if (statusList.size() > 0) {
      tweet = statusList.get(0).getText();
    }
  } catch(TwitterException e) {
    println(e.getStatusCode());
  }
  noLoop();
}

void draw() {
  background(128);
  translate(width / 2, height / 2);
  drawTweet(icon, tweet);
}

void drawTweet(PImage icon_image, String tweet_text) {
  pushMatrix();
    image(icon_image, 0, 0, 100, 100);
    noStroke();
    fill(255, 255, 255);
    rect(-150, -130, 400, 110);
    triangle(40, -20, 50, -10, 60, -20);
    
    fill(0, 0, 0);
    textSize(15);
    translate(0, 0, 1);
    text(tweet_text, -145, -125, 400, 200);
  popMatrix();
}


List3_14

import twitter4j.*;
import twitter4j.conf.*;

Twitter twitter;

String consumer_key = "dev.twitter.comで取得した値をここに入力";
String consumer_secret = "dev.twitter.comで取得した値をここに入力";
String oauth_token = "dev.twitter.comで取得した値をここに入力";
String oauth_token_secret = "dev.twitter.comで取得した値をここに入力";

void setup() {
  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setDebugEnabled(true)
    .setOAuthConsumerKey(consumer_key)
    .setOAuthConsumerSecret(consumer_secret)
    .setOAuthAccessToken(oauth_token)
    .setOAuthAccessTokenSecret(oauth_token_secret);
  TwitterFactory tf = new TwitterFactory(cb.build());
  twitter = tf.getInstance();  
}

void draw() {
  background(0);
  stroke(255, 255, 255);
  line(mouseX, 0, mouseX, height);
  line(0, mouseY, width, mouseY);
}

void mousePressed() {
  try {
    twitter.updateStatus( "座標(" + mouseX + ", " + mouseY + ") -- AR練習中" );
  } catch (TwitterException e) {
    println(e.getMessage());
  }
}