日々常々

ふつうのプログラマがあたりまえにしたいこと。

GaelykでTwitter4JのOAuth認証を使ってみる

微妙に難しいとか面倒とか感じるOAuth認証ですが、やってみたらあっさりでした
やってる事はサンプルを殆どそのままですが、Groovyで省略できるところを省略して書いてみたので、ノイズが少なくなってると思います。その分例外処理とかも無いので、Twitterがエラー返したらずっこけますが。

実装

oauth.groovy にアクセスするとTwitterの認証画面に移動します。

def twitter = new twitter4j.TwitterFactory().instance
request.session.setAttribute "twitter", twitter

def callbackURL = request.requestURL
callbackURL.replace(callbackURL.lastIndexOf("/"), callbackURL.length(), "")
callbackURL.append "/callback.groovy"

def requestToken = twitter.getOAuthRequestToken callbackURL.toString()
request.session.setAttribute "requestToken", requestToken
response.sendRedirect requestToken.authenticationURL

認証が通ったら callback.groovy に戻ってきます。

def twitter = request.session.getAttribute "twitter"

def requestToken = request.session.getAttribute "requestToken"
def verifier = request.getParameter "oauth_verifier"
twitter.getOAuthAccessToken requestToken, verifier
request.session.removeAttribute "requestToken"

response.sendRedirect(request.contextPath + "/timeline.groovy")

timeline.groovy では homeTimeline を取得するだけ。

def twitter = request.session.getAttribute "twitter"
request.setAttribute 'timeline', twitter.homeTimeline

forward '/timeline.gtpl'

timeline.gtpl で表示して終了。

<% include '/WEB-INF/includes/header.gtpl' %>

<h1>Twitter Timeline</h1>

<%
request.getAttribute('timeline').each {
	out.print "@${it.user.screenName} ${it.text}<br>"
}
%>

<% include '/WEB-INF/includes/footer.gtpl' %>

これだけです。
とりあえず認証はいけたので、色々出来るようになりました。

ソース

一応GitHubに放り投げてます。consumerKey/consumerSecret を書けばそのままで多分動きます。
https://github.com/irof/gaelyk-sandbox