前回の「まずは、絵文字でHello World!」のときに「build.xml」を実行して、コントローラクラスとJSPファイルを作成した要領で、今度はサービスクラスを作成します。
Eclipseで「build.xml」を選択し、[Run (実行)]→[Ant Build (Ant ビルド)](3番目の項目)を選択します。
ダイアログで、「gen-service」を選択し、[Run(実行)]ボタンを押下します。ダイアログに「TwitterService」と入力し、[OK]ボタンを押下します。
「com.hayato.gpstweet.service.TwitterService」クラスと「com.hayato.gpstweet.service.TwitterServiceTest」クラスが作成されます。
package com.hayato.gpstweet.service; public class TwitterService { public static final String consumerKey = "Twitterアプリの値を設定"; public static final String consumerSecret = "Twitterアプリの値を設定"; }
consumerKeyとconsumerSecretには、先どどメモしたTwitterアプリの設定情報の「ConsumerKey」と「ConsumerSecret」を指定します。
次に、RequestTokenを取得するコントローラクラスを作成します。「build.xml」を実行し、「gen-controller」で、ダイアログに「/twitter/requestToken」を指定します。
「com.hayato.gpstweet.controller.twitter.RequestTokenController」を以下のように、編集します。
package com.hayato.gpstweet.controller.twitter; import org.slim3.controller.Controller; import org.slim3.controller.Navigation; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationContext; import twitter4j.http.OAuthAuthorization; import twitter4j.http.RequestToken; import com.hayato.gpstweet.service.TwitterService; public class RequestTokenController extends Controller { @Override public Navigation run() throws Exception { Configuration conf = ConfigurationContext.getInstance(); OAuthAuthorization oauth = new OAuthAuthorization(conf, TwitterService.consumerKey, TwitterService.consumerSecret); // Twitterの認証画面からの戻り先を指定します。 // AccessTokenコントローラを指定します。 String callbackURL = "http://localhost:8888/twitter/accessToken"; RequestToken requestToken = oauth.getOAuthRequestToken(callbackURL); // RequestTokenをセッションに保存しておきます。 sessionScope("RequestToken", requestToken); // Twitterの認証画面へリダイレクトします。 return redirect(requestToken.getAuthenticationURL()); } }
次に、AccessTokenを取得するコントローラクラスを作成します。「build.xml」を実行し、「gen-controller」で、ダイアログに「/twitter/accessToken」を指定します。
「com.hayato.gpstweet.controller.twitter.AccessTokenController」を編集します。
package com.hayato.gpstweet.controller.twitter; import org.slim3.controller.Controller; import org.slim3.controller.Navigation; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationContext; import twitter4j.http.AccessToken; import twitter4j.http.OAuthAuthorization; import twitter4j.http.RequestToken; import com.hayato.gpstweet.service.TwitterService; public class AccessTokenController extends Controller { @Override public Navigation run() throws Exception { Configuration conf = ConfigurationContext.getInstance(); // セッションからRequestTokenを取得します。 RequestToken requestToken = sessionScope("RequestToken"); // RequestTokenから認証前のAccessTokenを作成します。 AccessToken accessToken = new AccessToken(requestToken.getToken(), requestToken.getTokenSecret()); OAuthAuthorization oauth = new OAuthAuthorization(conf, TwitterService.consumerKey, TwitterService.consumerSecret, accessToken); // Twitterから送られるVerifierを使用して、認証されたAccessTokenを取得します。 String verifier = requestScope("oauth_verifier"); accessToken = oauth.getOAuthAccessToken(verifier); requestScope("accessToken", accessToken); return forward("accessToken.jsp"); } }
「war/twitter/accessToken.jsp」を以下のように編集します。
<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@taglib prefix="f" uri="http://www.slim3.org/functions"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>twitter AccessToken</title> </head> <body> <p>AccessToken:${accessToken.token}</p> <p>AccessTokenSecret:${accessToken.tokenSecret}</p> </body> </html>
${accessToken.token}と${accessToken.tokenSecret}で、取得したAccessTokenを表示します。
Webブラウザで、「http://localhost:8888/twitter/requestToken」にアクセスし、Twitter認証画面で「許可する」を選択してください。
表示されるAccessTokenをメモします。
以降、このAccessTokenを使用して、Twitterを携帯Webサイトから操作します。
それでは、先ほど取得したAccessTokenを使用して、ケータイからTwitterにつぶやく機能を実装しましょう。
「com.hayato.gpstweet.service.TwitterService」を以下のように編集します。
package com.hayato.gpstweet.service; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.http.AccessToken; public class TwitterService { public static final String consumerKey = "Twitterアプリの値を設定"; public static final String consumerSecret = "Twitterアプリの値を設定"; // AccessTokenのキー private static final String tokenKey = "取得したAccessTokenのキーを設定"; // AccessTokenの値 private static final String tokenSecret = "取得したAccessTokenの値を設定"; // Twitterインスタンスの取得 private Twitter getTwitter() { TwitterFactory factory = new TwitterFactory(); AccessToken at = new AccessToken(tokenKey, tokenSecret); // AccessTokenによる認証 return factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret, at); } // つぶやく public void tweet(String tokenKey) throws TwitterException { Twitter twitter = getTwitter(); twitter.updateStatus(message); } }
Twitter4Jを使用して、つぶやくためには、まずTwitterの認証を取得する必要があります。Twitterの認証に先ほど取得したAccessTokenを使用します。簡単にするため、AccessTokenをTwiterServiceに定数として保持します。
次に、TwitterFactoryクラスを作成しgetOAuthAutherizedInstance()を呼び出し、Twitterインスタンスを取得します。引数には、アプリケーションのConsumerKeyとConsumerSecretとAccessTokenが必要です。
Twitterインスタンスを取得すれば、つぶやくのは簡単です。TwitterインスタンスのupdateStatus()にメッセージを指定して呼び出すだけです。
次に、つぶやくためのコントローラクラスを作成します。「build.xml」を実行し、「gen-controller」で、ダイアログに「/twitter/tweet」を指定します。
「com.hayato.gpstweet.controller.twitter.TweetController」を以下のように編集します。
package com.hayato.gpstweet.controller.twitter; import org.slim3.controller.Controller; import org.slim3.controller.Navigation; import com.hayato.gpstweet.service.TwitterService; public class TweetController extends Controller { private TwitterService service = new TwitterService(); @Override public Navigation run() throws Exception { // メッセージ String message = requestScope("message"); // TwitterServiceのtweetを呼び出す service.tweet(message); requestScope("result", "つぶやきました。"); // index.jspに遷移する return forward("index.jsp"); } }
先ほど作成したTwitterServiceのtweet()を呼び出しています。
次ページでは引き続きつぶやく機能を実装し、タイムライン取得機能やエラーハンドリングも追加して、実際に動かしてみます。
Copyright © ITmedia, Inc. All Rights Reserved.