アーカイブ

2010 年 3 月 のアーカイブ

OpenID RP を Google App Engine (java) で (dyuproject)

2010 年 3 月 18 日 tdtsh Comments off

 
前回も書きましたが、GAE/J上ではSocketが使えない。故にopenid4javaはGAEでは使えない。

でも、dyuprojectは動くし、動かした上にコードを公開されている方もいる。

どうやらGAE/Jの URLフェッチ API を使っている模様。そりゃそれしか方法はないですよね。

私は職業プログラマでは無いので、車輪の再開発どころか、なるべくコードは書きたくないんです。
早速、dyprojectにトライしてみましょう。
 
 


dyuproject-openid-1.1.6-jarjar.jar のダウンロード

dyuprojectDownloadsから、dyuproject-1.1.6.zipをダウンロードします。

JavaDocとか他のライブラリとかデモが不要なら、dyuproject-openid-1.1.6-jarjar.jar でもいいです。
 
 


eclipseのGAEプロジェクトへライブラリを追加する

ダウンロードしたzipファイルの、/dist に、dyuproject-openid-1.1.6-jarjar.jar はあります。
それを、eclipse の /war/WEB-INF/lib/にコピーします。

eclipseを起動して、war/WEB-INF/lib/ の下にコピーしたjarファイルを右クリックして、[ビルド・バス(B)] – [ビルド・パスに追加(A)]をクリックします。

念のため、プロジェクトの[参照ライブラリー]に追加されている事を確認します。
 
 


/WEB-INF/web.xml に追記する

QuickStartOpenid – dyuprojectのんを参考にしながら書きます。
ちょっとだけ手を加え (ログアウト用サーブレットを追加とか) ましたが、基本的に同じです。

<filter>
    <filter-name>openid-filter</filter-name>
    <filter-class>com.dyuproject.openid.OpenIdServletFilter</filter-class>
    <init-param>
        <param-name>forwardUri</param-name>
        <param-value>/</param-value>
    </init-param>
</filter> 

<filter-mapping>
    <filter-name>openid-filter</filter-name>
    <url-pattern>/openid-login</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>openid-filter</filter-name>
    <url-pattern>/openid-logout</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>openid-servlet</servlet-name>
    <servlet-class>my.package.OpenIdLoginServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>openid-servlet</servlet-name>
    <url-pattern>/openid-login</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>openid-logout</servlet-name>
    <servlet-class>my.package.OpenIdLogoutServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>openid-logout</servlet-name>
    <url-pattern>/openid-logout</url-pattern>
</servlet-mapping>

ログイン用サーブレットを作る

QuickStartOpenid – dyuprojectのサンプルコードにほんに少しだけ異常系を付け足しただけです。

package my.package;

import com.dyuproject.openid.RelyingParty;
import com.dyuproject.openid.ext.AxSchemaExtension;
import com.dyuproject.openid.OpenIdUser;

public class OpenIdLoginServlet extends HttpServlet {

    static {
        RelyingParty.getInstance()
        .addListener(new AxSchemaExtension()
            .addExchange("email")
            .addExchange("nickname")
            .addExchange("fullname")
            .addExchange("gender")
            .addExchange("postcode")
            .addExchange("country")
            .addExchange("language")
        );
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        OpenIdUser user = (OpenIdUser) request.getAttribute(OpenIdUser.ATTR_NAME);
        if (user != null) {
            String identity = user.getIdentity();
            HttpSession session = request.getSession();
            session.setAttribute("identity", identity);
            Map axschema = AxSchemaExtension.get(user);
            if (axschema != null && axschema.size() > 0) {
                session.setAttribute("email", axschema.get("email"));
                session.setAttribute("nickname", axschema.get("nickname"));
            } else {
                session.setAttribute("email", "unknown");
                session.setAttribute("nickname", identity);
            }
        } else {
            //
        }
        response.sendRedirect(response.encodeRedirectURL(request.getParameter("redirect_url")));
    }

}

 
 


ログアウト用サーブレットを作る

QuickStartOpenid – dyuprojectにはサンプルが無かったけど、ログインしっぱなしじゃ困るから、ログアウト用サーブレットも作ります。

package my.package;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.RequestDispatcher;

public class OpenIdLogoutServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        HttpSession session = request.getSession(false);
        session.invalidate();
        response.sendRedirect(response.encodeRedirectURL(request.getParameter("redirect_url")));

    }
}

 
 


動かす

あとはHTMLでいいので、OpenIDプロバイダのURLを引数 “openid_identifier”にセットして、サーブレットに渡すAタグなり、フォームなりを書いて実行します。

mixi OpenIDならこんな感じですね。

<a href="openid-login?openid_identifier=https://mixi.jp">mixiでログインします</a>

なんて簡単なんでしょう。

サンプルコードでは、mixi、Google、Yahoo!、openid.ne.jp は動きました。
hatena はうまくいきませんでした。なんでだろう。

nickNameが取れたのはmixiだけでした。

 
 


カテゴリー: Google App Engine, OpenID, java タグ:

Google App Engine for Java で Google Data (GData) API を使う 1

2010 年 3 月 11 日 tdtsh Comments off

Google App Engine/Java (以下 GAE/J) のアプリケーションから、Google Calender とか、Google Mapとか、Picasa Web Albums とかと連携したい。

なんでも、Google Data (GData) APIなるものを使えば良いらしい。

Google Data (GData) APIとは

GData APIとはなんでしょう。
Google Data (GData) APIのサイトによると、
「Google DATA API では、Web 上のデータを読み書きするシンプルな標準プロトコルを提供します。」ということです。

サポートされているGoogleのサービスは、こんなにあります。(2010年3月現在)


Google Data (GData) API クライアント ライブラリ

GAE/JなのでJava版を使いますけど、phpやJavaScriptでもイケるので簡単に試せますね。

Downloads – gdata-java-client – Project Hosting on Google Codeからライブラリをダウンロードします。
サンプルは要らないので、gdata-src.java-1.40.3.zip にしましたが、ライブラリが欲しいだけならどっちでもいいです。

ダウンロードしたzipファイルの、gdata/java/lib に、たくさんjarファイルがあります。
利用したいGoogleのサービスに対し、jarファイルの名称から何が必要かなんとなく想像がつきますね。

gdata-analytics-2.1.jar
gdata-analytics-meta-2.1.jar
gdata-appsforyourdomain-1.0.jar
gdata-appsforyourdomain-meta-1.0.jar
gdata-base-1.0.jar
gdata-blogger-2.0.jar
gdata-blogger-meta-2.0.jar
gdata-books-1.0.jar
gdata-books-meta-1.0.jar
gdata-calendar-2.0.jar
gdata-calendar-meta-2.0.jar
gdata-client-1.0.jar
gdata-client-meta-1.0.jar
gdata-codesearch-2.0.jar
gdata-codesearch-meta-2.0.jar
gdata-contacts-3.0.jar
gdata-contacts-meta-3.0.jar
gdata-core-1.0.jar
gdata-docs-3.0.jar
gdata-docs-meta-3.0.jar
gdata-finance-2.0.jar
gdata-finance-meta-2.0.jar
gdata-gtt-2.0.jar
gdata-gtt-meta-2.0.jar
gdata-health-2.0.jar
gdata-health-meta-2.0.jar
gdata-maps-2.0.jar
gdata-maps-meta-2.0.jar
gdata-media-1.0.jar
gdata-photos-2.0.jar
gdata-photos-meta-2.0.jar
gdata-projecthosting-2.1.jar
gdata-projecthosting-meta-2.1.jar
gdata-sidewiki-2.0.jar
gdata-sidewiki-meta-2.0.jar
gdata-sites-2.0.jar
gdata-sites-meta-2.0.jar
gdata-spreadsheet-3.0.jar
gdata-spreadsheet-meta-3.0.jar
gdata-webmastertools-2.0.jar
gdata-webmastertools-meta-2.0.jar
gdata-youtube-2.0.jar
gdata-youtube-meta-2.0.jar

gdata/java/deps にも、こんなんいてはります。

google-collect-1.0-rc1.jar
jsr305.jar

疲れたから次回に続きます。

カテゴリー: Google App Engine, java タグ:

Picnik が Google に買収された

2010 年 3 月 4 日 tdtsh Comments off

Picnik が Google に買収された。

Google、クラウド画像編集サービスPicnikを買収 – スラッシュドット・ジャパン

日本ではあまり知名度高くないかもしれないけど、愛好家として嬉しいような残念なような複雑な気持ちです。
Firefoxにプラグイン入れておけば、ブラウザのスクリーンショットとる時とかに非常に便利なので、これを気に普及してくれたら良いと思う。

カテゴリー: web タグ:

ゲームクリエイターとソーシャルアプリケーション

2010 年 3 月 1 日 tdtsh Comments off

先日、昔在籍したゲーム開発会社のメンバとの懇親会に参加しました。

私自信はゲームをクリエイトする能力も立場でも無かったんですが、何故ゲーム開発会社に行ったのか?と問われると、大げさに言うと、日本の国際競争力の向上に繋がりそうだ、という想いがあったんですね。私なりにですが志をもっちゃってた訳です。

ゲーム開発に携わる人は、プレイヤー(開発者、クリエイター)として非常に優秀な人が多いです。

日本のこういう人達のスキルとパワーが、もうちょっとソーシャルアプリケーションにシフトしてくれたら、もっとブラウザのプラットフォーム化が早まり、Google様の野望実現が早まったりしながら、ウェブの世界でも日本の存在感も高まるんじゃ無いかなぁ、なんて思いました。

HTML5を使えば、SketchPadみたいなアプリケーションも実際に作れる訳だし、手っ取り早くFlushだって良いんです。
OpenSocialに準拠しといてとりあえずmixiアプリでもイイし、なんならfacebookアプリで3憶人のマーケットへ参入してもイイ。

個人的には、アプリやろうぜ!by GMOみたいな動きがもっと盛り上がってもいいのになぁ、と思っています。

カテゴリー: knowledge, management, web タグ: