しかし、セキュリティサンドボックスの問題により、棚上げしました。
セキュリティサンドボックスも何かまとめないとですね。
って事でWeb側でTwitterにアクセスしてサービスを実現する事にしました。
結局、プロキシになっちゃいました。
まぁ挙動さえ分かってしまえばこっちのもんです。
ちなみにOAuth部分はTwitter4Jに任せてますので
その挙動を見たければsourceを添付してあげて調べてください。
※ソースは一部関数化してるものを平らにしているので
変数名とかはおかしいかも。。。
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(KEY, KEY_SECRET);
try {
RequestToken requestToken = twitter.getOAuthRequestToken();
String url = requestToken.getAuthorizationURL();
requestScope("url",url);
sessionScope("requestToken",requestToken);
} catch (TwitterException e) {
new RuntimeException(e);
}
まず、Twitterオブジェクトを取得してアプリケーションのキー値を設定します。
そこからURLを取得してきます。それを返します。
その後、Pinを取得して処理する場合に新たにRequestTokenを作成すると
おかしくなるのでセッションに設定しました。
※requestScope(),sessionScope()はSlim3のメソッドです。
リクエストやセッションに溜め込んでください。
そのリクエストを元にURLにアクセスします。
私の場合はFlexなので
//リンクを飛ばす
navigateToURL(new URLRequest(oauthUrl));
って感じになりました。
ここにアクセスすると横の画像のWebが別ブラウザで表示されます。
Twitterアカウントを入力すると認証され、
Pinが表示されます。
。。。。画像で表示されます。選択してコピーして
そのPinを自分のWebページなどで入力します。
。。。ここでコールバックなどをうまく使えば
多分何手かUIを改善できそうな気がするんですけどね。
私の場合はそれを元にPinを入力して再度サーバサイドで処理を行いました。
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(KEY, KEY_SECRET);
String pin = requestScope("pin");
RequestToken requestToken = sessionScope("requestToken");
AccessToken accessToken = null;
try {
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
} catch (TwitterException e) {
throw new RuntimeException(e);
}
String token = accessToken.getToken();
String tokenSecret = accessToken.getTokenSecret();
先ほど保存しておいたRequestTokenと取得したPinをリクエストから受け取り、
AccessTokenを取得します。
それによりトークンを取得する事が必要です。
私はここでSlim3 Datastoreを使用して、トークンを永続化しています。
ちなみにですが、私が作ってるのは認証アプリなので
認証をしたUserオブジェクト(GAE)も保存しています。
その後はログインしたユーザを元に
このトークンを取得してきて処理をします。
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(KEY, KEY_SECRET);
AccessToken accessToken = new AccessToken(data.getToken(),data.getTokenSecret());
twitter.setOAuthAccessToken(accessToken);
twitter.updateStatus(tweet);
dataは永続化したオブジェクトです。
updateStatus()はtwitter4jのつぶやく機能です。
こんな感じでサービスを作成しました。
ユーザ情報を保存したくなくて、OAuthに対応しましたが、
色々とツールがあって簡単にできるもんですね。
1 件のコメント:
コールバック化できました。
アプリの設定をBrowserにして
CallbackURLを設定します。
許可するとそのURLに転送されます。
PINの設定もせず、
accessToken = twitter.getOAuthAccessToken(requestToken);
と行うとトークンが取れます。
ちなみに拒否された場合
”denied”が引数に渡ってくるので
そこで判定できます。
※他に方法あるのかも。
コメントを投稿