スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[GAE] twitter4j & OAuthでつぶやくサンプルを作ってみる

今回はGoogleAppEngineのアプリケーションで試しに作ってみましたー(´ω`)
※EclipseでGoogleAppEngineのSDK&プラグインを取得しているのを前提にしています。

まず、Twitterでアプリの登録をします。※Twitterアカウントを既に取得している事
OAuth01.png
「アプリケーション名」、「アプリケーションの説明」は適当。
重要なのは「アプリケーションの種類」と「コールバックURL」の設定。

OAuth認証後にPIN(暗証番号)を発番し、PINを使ってアクセストークンを取得する場合は
「クライアントアプリケーション」なのですが、
アクセストークンをWeb上から取得する場合は「ブラウザアプリケーション」になります。

「コールバックURL」はHTTP GETでoauth_verifierパラメータを送付するURLになります。
(oauth_verifierパラメータからアクセストークンを取得する)

登録が終わると以下のようにコンシューマーキーとコンシューマーシークレットが発行されます。
OAuth02.png

続いてEclipseでGAEの「Webアプリケーションプロジェクト」を作成します。
※作成時は「Google Web ツールキットを使用」チェックを外す。

構成は以下の通り。
OAuth03.png

■twitter4j-core-x.jar
 Twitter4jから最新の「Twitter4j Core」のjarを入手。
 プロジェクトの war/WEB-INF/lib/ に突っ込んで、ビルドパスを通しておきます。

■サーブレット
・TwitterSignin.java
 最初にアクセスするサーブレットです。
 TwitterのOAuth認証ページにリダイレクトします。

private static String consumerKey;
private static String consumerSecret;

public void init(ServletConfig config)
throws ServletException
{
super.init(config);

// web.xmlで設定したコンシューマーのキー&シークレットを取得
consumerKey = config.getInitParameter("consumerKey").trim();
consumerSecret = config.getInitParameter("consumerSecret").trim();
}

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
req.getSession().setAttribute("twitter", twitter);

try
{
// ※以下のコールバックURLは事前にTwitterで登録しておく必要がある
String callbackURL = req.getRequestURL().toString();
callbackURL = callbackURL.replace("TwitterSignin", "TwitterCallback");

// コールバックURLをリクエストトークンにセット
RequestToken reqToken = twitter.getOAuthRequestToken(callbackURL);
req.getSession().setAttribute("requestToken", reqToken);

// 承認ページにリダイレクト
res.sendRedirect(reqToken.getAuthenticationURL());
}
catch (TwitterException e)
{
throw new ServletException(e);
}
}

・TwitterCallback.java
 Twitterのアプリケーション設定で入力したコールバックURLのサーブレットです。

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// セッションからTwitterオブジェクトとリクエストトークンを取得
Twitter twitter = (Twitter) req.getSession().getAttribute("twitter");
RequestToken reqToken = (RequestToken) req.getSession().getAttribute("requestToken");
String verifier = req.getParameter("oauth_verifier");

try
{
// アクセストークンを取得
twitter.getOAuthAccessToken(reqToken, verifier);
req.getSession().removeAttribute("requestToken");
}
catch (TwitterException e)
{
throw new ServletException(e);
}

// アクセストークン取得後のページへリダイレクト
res.sendRedirect(req.getContextPath() + "/TwitterMain");
}

・TwitterMain.java
 コールバックURLからリダイレクトされる認証後のサーブレットです。

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// セッションからTwitterオブジェクトを取得
Twitter twitter = (Twitter) req.getSession().getAttribute("twitter");

try
{
// アクセストークンを取得
AccessToken accToken = twitter.getOAuthAccessToken();
res.getWriter().println("AccessToken = " + accToken.getToken());
res.getWriter().println("AccessTokenSeclet = " + accToken.getTokenSecret());

// つぶやいてみる
java.util.Date date = new java.util.Date();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat();
sdf.applyPattern("yyyy'年'MM'月'dd'日 'hh'時'mm'分'ss'秒'");

Status status = twitter.updateStatus(sdf.format(date) + "のつぶやき~");
res.getWriter().println(status.getText());
}
catch (TwitterException e)
{
throw new ServletException(e);
}
}

■XML系
・web.xml
サーブレットとURLのマッピング、及びコンシューマーキーとシークレットを設定。


xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

TwitterCallback
com.taepon.TwitterCallback


TwitterCallback
/TwitterCallback



TwitterMain
com.taepon.TwitterMain


TwitterMain
/TwitterMain



TwitterSignin
com.taepon.TwitterSignin

consumerKey
=== INSERT CONSUMER KEY HERE ===


consumerSecret
=== INSERT CONSUMER SECRET HERE ===



TwitterSignin
/TwitterSignin





・appengine-web.xml
※sessions-enabledをtrueにする所だけ。



taepon01
1






true



ここまで出来たらプロジェクトをGoogleAppEngineにデプロイします。
ホントはローカル(http://localhost:8888)でテストできるとイイのですが、
コールバックURLにローカルホストを指定出来ないのでテストできない。。。(;´Д`)

実際の動作確認は以下のURLでどうそー。
http://taepon01.appspot.com/TwitterSignin

ソースコード(SVNリポジトリ)-TwitterSample
http://taeponsamples.googlecode.com/svn/trunk/
関連記事
スポンサーサイト

Pagination

Trackback

Trackback URL

http://morado106.blog106.fc2.com/tb.php/59-9e3b7668

Comment

超初心者

こんにちは。貴プログラムをまねてJavaの勉強をしようと思い立ったものです。
あつかましいお願いですが、教えていただきたく・・

質問内容 : Google AP! の実行方法について。Deployしても

Error: Not Found

The requested URL /taepon was not found on this server.

と出てしまうのです。
  • URL
  • 2011/03/30 18:06
  • Edit

taepon

どーもでーす。
このアプリケーションはGoogle App Engine 上に配置するのを前提に作っています。
が、基本サーブレットの知識とTwitter4jさえあれば、GAEじゃなくてもおkの筈です。

具体的な内容が書かれていないので何とも言えないですが、
内容を見ると自身のGoogle App Engine上の領域にデプロイしようとしてコケているような気がするのですが、
その場合は簡単なGAEプロジェクトを作成→デプロイして実行できるかどうか試してみてください。
それでも失敗する場合は、eclipse上でデプロイするプロジェクトを右クリック→Google→Appエンジン設定
の、アプリケーションIDを確認してみてください。
  • URL
  • 2011/03/30 21:25

Post Your Comment

コメント登録フォーム
公開設定

Utility

プロフィール

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。