Twitter APIへのライブラリとして、Twitter4Jを使わせていただいた。まずは、Twitter4Jの環境を設定する。
3.Twitter4Jの環境設定
Twitter4J - A Java library for the Twitter API
2011年2月14日段階で最新のバイナリは2.1.11。圧縮ファイルをダウンロードして展開する。展開後、libフォルダ内にある以下2つのjarを、Webアプリケーションのライブラリパスに設定する。
- twitter4j-core-2.1.11.jar
- twitter4j-media-support-2.1.11.jar
Twitter4Jでは設定ファイルを作成することが出来る。クラスパスが通っている場所へ、Twitter4Jの設定ファイル「twitter4j.properties」を作成。中身には、Twitterへのアプリケーション登録後に発行された、
- Consumer key
- Consumer secret
※ twitter4j.propertiesには、TwitpicのAPI Keyも設定可能なようだが、自分の場合は、設定しても有効にならなかった(・・;。
4.TwitterでOAuth認証
はじめに、TwitterのOAuth認証の流れを軽くおさえておくとよい。以下のTwitterのページでは、比較的分かりやすくOAuth認証の流れが説明されている。オススメ。
Overview of "Sign in with Twitter" | dev.twitter.com
4.1 Authentication URLへリダイレクト
OAuth認証の第一段階。
<ポイント>
1. 認証リクエスト時には毎回ユニークなRequest Tokenを作成し、TwitterのAuthentication URLへ認証のリクエストを発行する。
以下、サンプルコード。
StringBuffer callbackURL = request.getRequestURL(); int index = callbackURL.lastIndexOf("/"); callbackURL.replace(index, callbackURL.length(), "").append("/twitterCallback.jsp"); twitter4j.Twitter twitter = new twitter4j.TwitterFactory().getInstance(); twitter4j.http.RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString()); request.getSession().setAttribute("twitter", twitter); request.getSession().setAttribute("requestToken", requestToken); response.sendRedirect(requestToken.getAuthenticationURL());
ここから先はTwitter側の処理となる。
4.2 ユーザーによるログイン&接続許可
ユーザーがログインしていなければ、まずはログインが要求される。
続いて、自分のアプリケーションからTwitterアカウントへ、ユーザーが初めて接続する場合は、接続を許可するかどうか確認する画面が表示される。ユーザーが「許可する」をクリックすると、Callback URLとして指定したページへ、Twitter側からレスポンスが返ってくる。
ログインをキャンセルしたり、アプリケーションの接続を拒否したら、アクセスを許否したメッセージがユーザーへ表示される。
4.3 Callback処理
TwitterからCallback URLへレスポンスが返ってくる時には、「oauth_verifier」というパラメーターが含まれている。このVerifierをTwitterオブジェクトに与えて、認証情報を設定する。
<ポイント>
1. Authentication URLへ渡したRequest TokenとVerifierを引数に、twitter4j.TwitterクラスのgetOAuthAccessTokenメソッドを実行する。
2. Request Tokenは今後必要なくなるので、削除する。
以下、サンプルコード。
twitter4j.Twitter twitter = (twitter4j.Twitter) session.getAttribute("twitter"); twitter4j.http.RequestToken requestToken = (twitter4j.http.RequestToken) session.getAttribute("requestToken"); String verifier = request.getParameter("oauth_verifier"); if(verifier == null){ //エラー処理 }else{ twitter.getOAuthAccessToken(requestToken, verifier); session.removeAttribute("requestToken"); response.sendRedirect(request.getContextPath()+ "/twitter.jsp"); }
4.4 Twitpicへ画像をアップロード
いよいよTwitpicへ画像をアップロードする。
なお、Twitterユーザーが、Twitpicを連携アプリとして許可する必要はない。
また、画像のバイト数によってはアップロードに時間がかかる場合があるため、アップロード処理は非同期処理で実装したほうがいい。
<ポイント>
1. Access Token及びAccess Token Secretをコンフィグへ含める。
2. 画像のアップロードサイトとしてTwitpicを指定し、TwitpicのAPI Keyをコンフィグへ含める。
以下、サンプルコード。
twitter4j.Twitter twitter = (twitter4j.Twitter) session.getAttribute("twitter"); twitter4j.http.AccessToken accessToken = null; try{ accessToken = twitter.getOAuthAccessToken(); twitter4j.conf.ConfigurationBuilder cb = new twitter4j.conf.ConfigurationBuilder(); cb.setOAuthAccessToken(accessToken.getToken()); cb.setOAuthAccessTokenSecret(accessToken.getTokenSecret()); cb.setMediaProvider("TWITPIC"); cb.setMediaProviderAPIKey("TwitpicのAPI Key"); twitter4j.conf.Configuration conf = cb.build(); twitter4j.media.ImageUpload upload = new twitter4j.media.ImageUploaderFactory(conf).getInstance(); url = upload.upload(画像のjava.io.Fileオブジェクト); }catch(twitter4j.TwitterException te){ //エラー処理 }
アップロードに成功すれば、uploadメソッドの戻り値として、画像のURLが返ってくる。
さらに、ユーザーが画像URLを含んだツイートを出来るようにするには、ツイート文字列を引数にして、twitter4j.TwitterクラスのupdateStatusメソッドを実行すればよい。
twitter4j.Twitter twitter = (twitter4j.Twitter) session.getAttribute("twitter"); twitter4j.Status status = twitter.updateStatus(text);
0 件のコメント :
コメントを投稿