Home > Java | Web > Play FrameworkでOAuth認証利用 その1:Twitter

Play FrameworkでOAuth認証利用 その1:Twitter

  • 2011-12-19 (月) 0:47
  • Java | Web

 最近、プライベートを圧迫していた急ぎの仕事が一段落したので、MA7の興奮が冷めないうちにPlay Frameworkを使って何かWebサービスを制作したいと考えています。
 何を作るかはまだ何も考えていないのですが、下準備としてPlay FrameworkでのOAuth認証を実装していきたいと思います。
 まずはTwitterアカウントによる認証を実装します。 → サンプルページ

1.事前準備

 /conf/application.conf の85行目 #db=mem のコメントアウトを解除します。

2.Twitter

 TwitterアカウントによるOAuth認証を実装します。
 TwitterのOAuth認証は、Playの配布物にサンプルプロジェクトが含まれているので、特に悩む所もなく、簡単に実装できました。

1)アプリケーションの登録

 TwitterのMy Applicationsで、アプリケーションを登録しました。

2)User.javaの実装

 ユーザーのモデルとして、以下のようなUser.javaを実装しました。

package models;

import javax.persistence.Entity;
import play.db.jpa.Model;

@Entity
public class User extends Model {
	public long uid;
	public String username;
	public String token;
	public String secret;

	public User(String username) {
		this.username = username;
	}

	public User(long u){
		uid=u;
	}

	public static User findOrCreate(String username) {
		User user = User.find("username", username).first();
		if (user == null) {
			user = new User(username);
		}
		return user;
	}

	public static User get(long id) {
		return find("uid", id).first();
	}

	public static User createNew() {
		long uid = (long)Math.floor(Math.random() * 10000);
		User user = new User(uid);
		user.create();
		return user;
	}
}

3)TwitterAuth.javaの実装

 Twitterは、以下のとおり実装。ほぼ、サンプルプログラムのとおりです。

package controllers;

import java.util.HashMap;
import java.util.Map;

import models.User;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import play.Logger;
import play.libs.OAuth;
import play.libs.OAuth.ServiceInfo;
import play.libs.WS;
import play.mvc.Controller;

public class TwitterAuth extends Controller {

	private static final ServiceInfo TWITTER = new ServiceInfo(
			"http://twitter.com/oauth/request_token",
			"http://twitter.com/oauth/access_token",
			"http://twitter.com/oauth/authorize",
			"*********************",
			"*********************"
	);

	public static void authenticate() {
		User user = getUser();
		if (OAuth.isVerifierResponse()) {
			OAuth.Response oauthResponse =
			 OAuth.service(TWITTER).retrieveAccessToken(user.token, user.secret);
			if (oauthResponse.error == null) {
				user.token = oauthResponse.token;
				user.secret = oauthResponse.secret;
				user.save();
			} else {
				Logger.error("Error connecting to twitter: " + oauthResponse.error);
			}
			Application.index();
		}
		OAuth twitt = OAuth.service(TWITTER);
		OAuth.Response oauthResponse = twitt.retrieveRequestToken();
		if (oauthResponse.error == null) {
			user.token = oauthResponse.token;
			user.secret = oauthResponse.secret;
			user.save();
			redirect(twitt.redirectUrl(oauthResponse.token));
		} else {
			Logger.error("Error connecting to twitter: " + oauthResponse.error);
			Application.index();
		}
	}

	public static Map<String,String> getUserInfo(){
		Map<String,String> ret=new HashMap<String,String>();
		String url = "http://twitter.com/statuses/user_timeline.xml";
		 Document info =
			WS.url(url).oauth(
				TWITTER, getUser().token, getUser().secret).get().getXml();
		 Element user=(Element)info.getElementsByTagName("user").item(0);
		if(user!=null){
			ret.put("auth", "twitter");
			ret.put("name",
			((Element)user.getElementsByTagName(
				"name").item(0)).getTextContent());
			ret.put("screenname",
			((Element)user.getElementsByTagName(
				"screen_name").item(0)).getTextContent());
			ret.put("imageurl",
			((Element)user.getElementsByTagName(
				"profile_image_url").item(0)).getTextContent());
		}
		return ret;
	}

	public static User getUser() {
		return User.findOrCreate("guest");
	}
}

Related posts:

  1. Play framework
  2. GAEでbit.lyの短縮URLサービスを利用してみた。
  3. Project Euler Problem88 #ProjectEuler
  4. ZipIO
  5. CSVFileReader

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://termat.sakura.ne.jp/java/play-framework%e3%81%a7oauth%e8%aa%8d%e8%a8%bc%e5%88%a9%e7%94%a8%e3%80%80%e3%81%9d%e3%81%ae1%ef%bc%9atwitter/trackback/?_wpnonce=078d54d358
Listed below are links to weblogs that reference
Play FrameworkでOAuth認証利用 その1:Twitter from TM's Workspace

Home > Java | Web > Play FrameworkでOAuth認証利用 その1:Twitter

Google Analyticator

119
Unique
Visitors
Powered By Google Analytics

Return to page top