Penta creation

ホームへ
2016年10月22日

Processing3でTwitter4J

Processing3でTwitterのAPIが使えるTwitter4Jライブラリを試してみました。

準備

● Twitterアプリケーション登録

Twitter APIを使用する場合はTwitterのアプリケーション登録が必要です。「Twitter APIの使い方まとめ - Syncer」などを参考にして作業して、「Consumer Key、Consumer Secret、Access Token、Access Token Secret」を取得します。

※Twitter APIは、例えば、ホームタイムラインの取得は15分間に最大15回とAPI呼び出し回数に制限があるので注意が必要です。



● Twitter4Jライブラリ追加

Twitter4JはJavaのライブラリで、Processing3はIDEにLibrary Managerがついてますが、公開・配信されていないライブラリは手作業で追加する必要があります。

上記ページの「twitter4j-4.0.4.zip」からライブラリのデータをダウンロードします。解凍するといろいろとデータが入ってますが、今回タイムラインを表示させるだけなので、使用するのは「lib」フォルダの「twitter4j-core-4.0.4.jar」のみです。それを、Processing のLibrariesフォルダに「twitter4j」フォルダを新規作成して、以下「Processing/Libraries/twitter4j/Library/twitter4j-core-4.0.1.jar」のように配置します。

Processingでは、フォルダ階層やフォルダ名があっていないとライブラリを認識してくれないので、「Processing/Libraries/twitter4j/Library/twitter4j.jar」と「twitter4j-core-4.0.1.jar」を「twitter4j.jar」に名前を修正します。

認識されると写真のようにIDEに「twitter4j」と表示されます。



Twitterのタイムラインを表示する

「スケッチ > ライブラリーをインポート > twitter4j」でライブラリーを読み込み、下記のようにプログラミングします。タイムラインは「getHomeTimeline()」で取得することができ、「Consumer Key、Consumer Secret、Access Token、Access Token Secret」は取得したものを入れてください。

import twitter4j.*;
import twitter4j.api.*;
import twitter4j.auth.*;
import twitter4j.conf.*;
import twitter4j.json.*;
import twitter4j.management.*;
import twitter4j.util.*;
import twitter4j.util.function.*;

import java.util.*;

String consumerKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String consumerSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String accessToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String accessSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

Twitter twitter;
List<Status> statuses = null;

void setup(){

    //OAuth認証
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setOAuthConsumerKey(consumerKey);
    cb.setOAuthConsumerSecret(consumerSecret);
    cb.setOAuthAccessToken(accessToken);
    cb.setOAuthAccessTokenSecret(accessSecret);
    
    //TwitterAPIインスタンス取得
    twitter = new TwitterFactory(cb.build()).getInstance();
    
    try{
      //タイムラインを取得
      statuses = twitter.getHomeTimeline();

      for (Status status:statuses){

        //ユーザー名とツイートを取得
        println(status.getUser().getName(),status.getText());
      }
    }catch(TwitterException e){
      println("Get timeline:" + e + "Status code:" + e.getStatusCode());
    }
}

ControlP5ライブラリの使用

タイムラインのツイートを画面に表示させます。Processingのテキストエリアを細かくカスタマイズしたいので、ControlP5ライブラリを使用します。ControlP5はTwitter4Jと違いIDEの「スケッチ > ライブラリーをインポート > ライブラリを追加」から追加することができます。

import twitter4j.*;
import twitter4j.api.*;
import twitter4j.auth.*;
import twitter4j.conf.*;
import twitter4j.json.*;
import twitter4j.management.*;
import twitter4j.util.*;
import twitter4j.util.function.*;

import java.util.*;

//controlP5ライブラリーをインポート
import controlP5.*;

String consumerKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String consumerSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String accessToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String accessSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

Twitter twitter;
List<Status> statuses = null;

//controlP5関連を宣言
ControlP5 cp5;
Textarea tweetText;

void setup(){
    size(800,800);
    background(0);
  
    //OAuth認証
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setOAuthConsumerKey(consumerKey);
    cb.setOAuthConsumerSecret(consumerSecret);
    cb.setOAuthAccessToken(accessToken);
    cb.setOAuthAccessTokenSecret(accessSecret);
    
    //Twitterインスタンス
    twitter = new TwitterFactory(cb.build()).getInstance();
    
    //ControlP5インスタンス
    cp5 = new ControlP5(this);
    
    try{
      statuses = twitter.getHomeTimeline();
     
      //ControlP5のTextareaクラスでツイートを表示
      int i = 0;
      for (Status status:statuses){
        
        tweetText = cp5.addTextarea(
        "label"+ i,
        status.getUser().getName() + "\n" + status.getText(),
        50, 50+(80*i), 700, 70);
         
        tweetText.setColorBackground(color(0));
        tweetText.setFont(createFont("Meiryo",14));
        tweetText.setColor(color(255));
        tweetText.setLineHeight(20);
        
        i++;
      }
    }catch(TwitterException e){
      println("Get timeline:" + e + "Status code:" + e.getStatusCode());
    }
}

● テキストエリアの削除方法

生成したテキストエリアは、「cp5.get("識別子").remove();」で削除することができます。

//テキストエリアの生成
for (int i=0; i<= 10; i++){
    tweetText = cp5.addTextarea(
    "label"+ i,
    status.getUser().getName() + "\n" + status.getText(),
    50, 50+(80*i), 700, 70);
         
    tweetText.setColorBackground(color(0));
    tweetText.setFont(createFont("Meiryo",14));
    tweetText.setColor(color(255));
    tweetText.setLineHeight(20);
}

//テキストエリアの削除
for (int i=0; i<= 10; i++){
    cp5.get("label"+ i).remove();
}
前の記事へ

Raspberry Pi 3BでLeap Motionを使う

次の記事へ

IoT BASIC PROGRAM

ページトップへ