ColdFusionカフェテリア
SAMURAIZ

 

←前 | ↑一覧 |

Twitter4JとColdFusionとを組み合わせてTwitterを操作する

Twitterには外部プログラムとの連携を行うためのAPIが公開されています。現在のColdFusionにはTwitterに接続して処理を行うようなCFタグや関数は用意されていません。そこで、今回はJavaベースで作られたTwitter APIを呼び出すライブラリ「Twitter4J」をColdFusionで利用し、Twitterと連携した処理を試してみたいと思います。

このページ(ColdFusion 実験室)で紹介する内容について

ColdFusion 実験室で公開している情報は、ColdFusionの標準の機能では無いため動作の保証外(未サポート)となります。下記の事項も含めてそれらを予めご認識頂いた上で、参考にされるかどうかをご判断下さい。

  • このページ内容や参考プログラムは、内容の正確さや最新さを保証するものではありません
  • 今後メーカーより提供されるアップデートやバージョンアップなどで、この記事の内容が動作しなくなるかもしれません
  • 紹介している外部のライブラリ等についての使用許諾範囲は、ライブラリのダウンロードサイト等にて各自ご確認下さい
  • 特に記載が無い限りは、Windows 64bit OS上の 64bit 版ColdFusion10 評価版で試しています。それ以外の異なるOS(32bit/64bit)やエディションなどでは確認していませんので、動き等が異なる場合はご了承下さい

最初に

今回使用したTwitter4Jライブラリは、Twitter APIのバージョンが変わったことによって認証ルールの制限や変更が行われています。今回紹介したプログラムも、今後の変更によってそのままでは動かなくなる場合もあります。予めご了承下さい。

参考にしたWebサイト

Twitter4Jライブラリを初め、 このページを作成している時点でのTwitter API のバージョンは 1.1 です。APIの呼び出し回数等の制限については、Twitterの公式サイトやユーザーサイトで情報を確認下さい。
http://www.forest.impress.co.jp/docs/serial/moritalk/20120911_558641.html
http://blog.jp.twitter.com/2012/08/twitter-api-v11aip.html

 

ColdFusion女史(※以前のTwitter APIバージョンでの接続方法の記事。
http://www.cf-girl.net/tec/27

 

その他の参考サイト
http://cfmlblog.adamcameron.me/2012/10/sending-tweets-via-coldfusion-via.html
http://twitter4j.org/ja/configuration.html

※注意※

Twitter APIでの呼び出し回数には制限があります。制限を超える回数の呼び出しを行った場合はTwitter APIからエラーが返され、再び呼び出せるようになるまで待つ必要が出てきます。

準備

  • Twitter4Jライブラリをダウンロードします。
    ※こちらでTwitter4Jをダウンロードしたサイトはhttp://twitter4j.orgで、バージョンは3.0.4でした。

  • ダウンロードしたファイルを解凍すると、複数のライブラリファイルやフォルダが存在します。それぞれのファイル・フォルダの役割や内容については、ダウンロードサイトやreadme.txtファイルで確認して下さい。今回の実験では、twitter4j-core(twitter4j-core-x.x.x.jar)ライブラリを使用します。

  • ColdFusionサービスを停止し、ColFusion クラスパスにtwitter4j-coreファイルを配置します。
    ※こちらのテスト環境では、[cf10_root]/cfusion/lib内にファイルを配置しました。このフォルダには多くのライブラリが置かれていますのでメンテナンス時(例えば、配置したファイルを削除しようとした際)には、誤って別のファイルを操作しないように注意して下さい。
    ※ColdFusion 10ではApplication.cfcでライブラリのパスを指定することができますので、他のライブラリとは別のフォルダにファイルを配置したい場合はこちらもお試し下さい。
    http://help.adobe.com/ja_JP/ColdFusion/10.0/Developing/WSe61e35da8d318518-106e125d1353e804331-7fff.html

  • ColdFusionを起動し、ColdFusion Administratorの[システム情報ページ(右上の i アイコン)]ページで追加した jar ファイルが「CF サーバー Java クラスパス」に含まれていることを確認します。
    ※ColdFusion 10で Javaライブラリのパスを指定している場合は、一覧では確認できません。

  • Twitter APIを利用するためには「Twitterアカウント」を持っていることと、そのアカウントでの「Twitterアプリケーション」の登録が必要です。アプリケーションを登録することによって発行される認証用の4つの値(consumerKey, consumerSecret, accessToken, accessTokenSecret)を使ってColdFusion(Twitter4J)プログラムから認証と各種操作を行います。
    「Twitterアプリケーション」の登録方法は、ネット上に数多くの記事が掲載されていますので、それらを参考の上、認証に必要な4つの値を取得して下さい。
    ※私の場合は、下記のユーザー・サイト等を参考にしました。
    http://www.atmarkit.co.jp/ait/articles/1102/08/news122.html
    http://kikutaro777.hatenablog.com/entry/2013/07/19/195626

  • Twitter4Jの配置と、consumerKey, consumerSecret, accessToken, accessTokenSecret の値を入手できれば、いよいよプログラミング開始です。

 

Twitter4Jを使ってTwitterと接続する

Twitter4Jライブラリの公式サイトを確認すると、Twitter4Jを介してOAuth認証を行う方法がいくつかあるようです。私は、Twitter4Jの下記のページを参考にして、ConfigurationBuilder クラスを使った接続を試してみました。

http://twitter4j.org/ja/configuration.html

 

<cfscript>
objTwt4jConf = createObject("java", "twitter4j.conf.ConfigurationBuilder");
objTwt4jConf.setOAuthConsumerKey("*********************"); // consumerKey
objTwt4jConf.setOAuthConsumerSecret("******************************************"); // consumerSecret
objTwt4jConf.setOAuthAccessToken("**************************************************"); // accessToken
objTwt4jConf.setOAuthAccessTokenSecret("******************************************"); // accessTokenSecret

objTwitterFactory = createObject("java", "twitter4j.TwitterFactory").init(objTwt4jConf.build());
objTwitter = objTwitterFactory.getInstance();
</cfscript>

 

前述の準備で取得した4つの値をConfigurationBuilderにセットし、それをTwitterFactoryのインスタンスを生成する際に引数に指定します。その後、getInstanceメソッドを呼び出してTwitterオブジェクトを生成しています。

 

実験: Twitterのタイムラインからを検索する

このサンプルでは、タイムラインからツイート検索してその結果を取得します。Twitter4Jの公式サイトに記載されているように、Queryクラスと Twitterオブジェクトのsearchメソッドで検索を行います。
(参考: 4. Tweetの検索)http://twitter4j.org/ja/code-examples.html

 

<cfscript>
objTwt4jConf = createObject("java", "twitter4j.conf.ConfigurationBuilder");
objTwt4jConf.setOAuthConsumerKey("*********************"); // consumerKey
objTwt4jConf.setOAuthConsumerSecret("******************************************"); // consumerSecret
objTwt4jConf.setOAuthAccessToken("**************************************************"); // accessToken
objTwt4jConf.setOAuthAccessTokenSecret("******************************************"); // accessTokenSecret

objTwitterFactory = createObject("java", "twitter4j.TwitterFactory").init(objTwt4jConf.build());
objTwitter = objTwitterFactory.getInstance();

//検索する言葉を変数に指定する
searchWord = '"ColdFusion" OR "Cold Fusion" OR "コールドフュージョン"';

//twitter4j.Queryクラスのオブジェクトを生成し、検索語を指定する
objTwt4jQuery = createObject("java", "twitter4j.Query").init(searchWord);

//Twitterオブジェクトのsearchメソッドを実行
objResult = objTwitter.search(objTwt4jQuery);

</cfscript>

 

※デフォルトの設定では1度の呼び出しで15件のツイートを取得しています。取得個数や言語の絞り混みを twitter4j.Queryクラスの setCount や setLang で変更ができるようです(この取得件数もTwitter APIでの制限があるようです)。
objTwt4jQuery.setCount(50);
objTwt4jQuery.setLang("ja");

 

検索結果のオブジェクトにどのようなメソッドがあるかを参照します。<cfdump>やWriteDump()でオブジェクトを指定して確認下さい。

 

例:writeDump(objResult);
     

 

検索した結果の情報は、objResultオブジェクトのgetTweets()メソッドを実行すると取得できます。実行結果は配列で戻され、それぞれの配列の項目には多くのメソッドを持つオブジェクトが配置されていることがわかります。検索結果が何件戻されたかを確認する場合は、配列に対してColdFusionのArrayLen()関数を使用するとよいでしょう。

 

例:writeDump(objResult.getTweets());
     

 

各配列の値にはオブジェクトが格納されていて、getXXXメソッドなどを呼び出すことで情報を取得できるようです。

今回は、下記のメソッドを呼び出して、取得した情報の一覧を表示してみました。
(※ objResult = objTwitter.search(objTwt4jQuery); の後に下記のコードを追加します)

<cfscript>
//Twitterの検索結果を取得
aResultSearch=objResult.getTweets();
for (idx=1; idx LTE ArrayLen(aResultSearch); idx=idx+1) {
    WriteOutput(aResultSearch[idx].getCreatedAt() & "<br>");
    WriteOutput(aResultSearch[idx].getUser().getName() & "<br>");
    WriteOutput(aResultSearch[idx].getText() & "<br>");
    WriteOutput("<hr>");
}
</cfscript>

 

上記で出力される情報以外にも、ユーザのプロフィール画像やリツイート数、フォロー・フォロワーの数など、さまざまな情報も取得することが可能です。

実験: タイムラインに投稿する

このサンプルでは、タイムラインへ投稿をツイートします。認証が通った状態で、下記のようにプログラミングすることで、投稿をツイートすることができます。投稿は、getInstanceメソッドを呼び出して生成したTwitterオブジェクトのupdateStatusメソッドを実行します。

 

<cfscript>
objTwt4jConf = createObject("java", "twitter4j.conf.ConfigurationBuilder");
objTwt4jConf.setOAuthConsumerKey("*********************"); // consumerKey
objTwt4jConf.setOAuthConsumerSecret("******************************************"); // consumerSecret
objTwt4jConf.setOAuthAccessToken("**************************************************"); // accessToken
objTwt4jConf.setOAuthAccessTokenSecret("******************************************"); // accessTokenSecret

objTwitterFactory = createObject("java", "twitter4j.TwitterFactory").init(objTwt4jConf.build());
objTwitter = objTwitterFactory.getInstance();

//今回の実験で追加したのは下記の1行だけです。
status = objTwitter.updateStatus('Hello Twitter4j & CF!');
</cfscript>

 

ColdFusionでフォーム処理を行い、updateStatus に入れる文字を動的に指定することで、アプリケーションとしての機能を高めることができます。

まとめ

今回の実験室はいかがだったでしょうか?今回は「検索」と「ツイート(投稿)」のTwitter4J ライブラリのほんのさわりの部分のみの紹介だったのですが、ライブラリをColdFusionから呼び出す例として参考にして頂ければと思います。

ただ、ちょっと直しては確かめるという方法を繰り返すとすぐにTwitter API制限に達してしまって次の処理までしばらく待たされることにもなります。このあたりが今回の一番難しいところだと思います。インターネットにはTwitter4Jに関する有益な情報が数多く公開されています。それらを有効的に活用して頂くと良いと思います。

ColdFusionの各種情報の配信


最新情報
■2017/3/27
ColdFusion 2016 対応
インストール セットアップ情報
CFサーバーのインストール
CFビルダーのインストール

■2016/9/20
『ColdFusion 2016 リリース
Enterprise Edition 活用資料』
記事一覧

■2016/3/30
『ColdFusion 実験室』
実験4、実験5

■2015/8/10 〜
『ColdFusion クリニック』
記事一覧(随時更新中)

■2015/4/8
『JasperReportsによる帳票出力』
2. JasperReportsによる帳票出力【後編】

■2015/3/12
アップクロス株式会社
西元 貞昭様
『JasperReportsによる帳票出力』
1. JasperReportsによる帳票出力【前編】


■2015/2/25
『ColdFusionでエクセルを使いこなそう!』
4. 【上級】ColdFusionのエクセル機能を利用したPDF帳票の紹介

ColdFusionトレーニング


ColdFusionユーザーグループ
ColdFusionユーザーグループ
Copyright 2012 Samuraiz Corporation. All Rights Reserved.