2015年3月18日水曜日

Processing + Twitter4j で OAuth 認証 - その2

前回の続きを見て行きましょう。今回は PIN コードを入力するフォームの作成や accessToken の取得など、大切なのは部分がいくつかあります。


  • getPIN() 関数

PIN コードを入力するためのテキストフィールドを表示する関数です。また、入力された文字列を一時的に保存します。

setLayout で null を引数にすると、レイアウトマネージャが無効になります。これにより、手動で指定した位置にテキストフィールドを置けるようになります。new でテキストフィールドオブジェクトを生成して、setBounds で位置や大きさを決めます。入力された文字は、add で inputLine に加えていきます。

参考1:テキストを入力しよう
参考2:Processing で日本語入力フォーム(Swingアプリケーション利用)

  • マウスをクリックした時の処理

マウスをクリックした時の処理を書いています。ちょっと長いですが、ひとつずつ確認していきましょう。

まずクリックの有効範囲を指定します。次に、inputLine に保持していた情報を String 型の変数 pin に代入し、この pin と requestToken を引数にして Twitter から accessToken を取得します。さらに accessToken オブジェクトから aToken と aSecret を取得しますが、この2つがはじめの変数の宣言で省略した accessToken, accessSecret に相当します。これで準備が整いました。setProperties() 関数でこれらの情報を使って Twitter にアクセスし、getTimeline() 関数でタイムラインの上位5つを画面に表示させます。今回も try - catch 構文を使いましょう。


  • setProperties() 関数、getTimeline() 関数

これまでのエントリで見てきた処理と同じ内容です。

Twitter にアクセスできる状態になった場合は、certificatoin を true にしておきましょう。そうしなければ、OAuth 認証が成功しても、draw() 関数で設定した認証ボタンがそのまま描写され続けてしまいます。その他に変更点はありません。


  • すべてのコード

長くなりましたが、全体としてはこんな感じです。createWriter()createReader() を使うと Twitter へのアクセス権を保存でき、次回から PIN コードの入略を省略することも可能になります。興味のある人は挑戦してみてください。

2015年3月16日月曜日

Processing + Twitter4j で OAuth 認証 - その1

ご無沙汰しております。卒論に追い回されたり虫垂炎の手術を受けたりで、気づけば3月もなかば。もう社畜へのカウントダウンが始まってるよ。春からはSEの卵として頑張りながらも、勉強したことをちょこちょこ書き留めていければいいな。

さて、今回は OAuth に挑戦です。OAuth の仕組みについては、参考で上げている解説ページにて分かりやすく説明されています。つまり、Twitter 側にリクエストを送って、特定のアカウントへのアクセスの許可をもらう仕組みですね。セキュリティを考慮して、PIN コードによる認証を使っていきたいと思います。そして最後に、タイムラインを画面に表示してみましょう。

参考:Java で Twitter を OAuth 認証して使える Twitter4J とは (1/3)
参考:OAuth 認証に WebView を使うのはやめよう

  • ライブラリをインポート&変数の宣言

前回までとは違って、とても多いですね。詳しく見ていきましょう。

まず、accessToken と accessSecret は指定しません。これらは認証に成功すると、Twitter から送られてきます。certification は、Twitter から認証されたことを判別する boolean 型の変数です。certification, iterations, displayGUI は繰り返しを制御するための変数ですが、細かいことは後ほど。TexeField は PIN を入力するためのテキストフィールドを扱う型で、入力された文字列を inputLine として保持し、最後に文字列の pin に代入します。


  • setup() 関数、draw() 関数

setup() 関数、draw() 関数をまとめて確認しましょう。

setup() 関数では、オブジェクトの代入や画像の読み込みを行います。当然ですが、はじめは Twitter へのアクセスの許可が得られていないので、doOAuth() を実行してリクエストを送ります。draw() 関数では、certification が false のときだけボタンを表示するようにしています。また、次回で解説する getPIN() の実行やテキストフィールドの表示も1回でいいので、displayGUI を false にして同じ処理が繰り返されないようにします。


  • doOAuth() 関数

認証画面へ遷移させます。

Twitter から認証されるまでは、accessToken は null です。requestToken は、try - catch 構文で取得します。例外に TwitterException を指定しないとダメみたいですね。その後、requestToken を使って認証画面のURLを発行し、ブラウザからアクセスします。アクセスは1回でいいので、iterations を false にします。そうしないと、この url に毎フレームアクセスし続けてしまい、ブラウザの新規タブが増えてパソコンが大変なことになります(経験者は語る)。

余談になりますが、今回のエントリから文字が両端揃えになっています。WebKit系ブラウザでは文字の両端揃えが難しいということを紹介しているサイトもあって少しビビっていたのですが、<p align = "justify"></p> で問題なく表示できました。完全に整ってはいませんが、ずいぶん見やすくなりました。よかったよかった。こんなに更新頻度の低いブログでも、少しずつ進化しております。

参考:WebKit 系ブラウザ(Chrome / Safari)で両端揃えはできないの? jQuery で検証してみた

次回はPIN コードを入力するためのテキストフィールドを表示する関数や、マウスをクリックした時の処理を書き加えて、プログラムを完成させましょう。