classファイルをjarファイルでまとめるのですが、方法がわからなかったので、調べました。
JAR ファイルへの圧縮
via:JARファイル
ディレクトリ pack を pack.jar に圧縮するためには、次のコマンドを発行します。
>jar cvf pack.jar pack
これで、jarファイルの作成にこまらないぞと
常にテンパってます。
classファイルをjarファイルでまとめるのですが、方法がわからなかったので、調べました。
JAR ファイルへの圧縮
via:JARファイル
ディレクトリ pack を pack.jar に圧縮するためには、次のコマンドを発行します。
>jar cvf pack.jar pack
dosからjavaを起動する上で今まで、
javac hoge.java java hoge |
●javaコマンドの使い方を表示する
via:Javaプログラミングの前提知識
“-?”または“-help”
axis2は、JDKのバージョンが1.4以上でないと動かないみたいです。
Java Development Kit (JDK)
via:System Requirements
1.4 or later
コマンドラインを開いて、コマンド "java -version" を入力して Enter ボタンを押下してください。
via:Java 環境のセットアップ
マッシュアップアワードに作品を出展する際に、セッション変数がほしかったので、その設定方法について
<cfapplication name="test" sessionManagement="yes" |
<!--- セッション変数に値をセット ---> |
CFで年齢計算を行う処理について考えてみました。
<cfset a1ymd = "19821123"> <cfset a2ymd = "20080827"> <cfset age = Left(a2ymd,4) - Left(a1ymd,4)> <cfif Right(a2ymd,4) lt Right(a1ymd,4)> <cfset age = age -1> </cfif> |
開発をしているときに陥りがちなのですが、あるクラス、メソッドを使うときに、文字を正しくかかないとコンパイルエラーになってしまいます。
geoapを使ったプログラムの修正をしていたところ、CourseDistanceOfAdrToStationというメソッドを使う際に、最初の大文字の「C」を小文字「c」で書いてしまい、「シンボルを解決できません」というコンパイルエラーが起こしてしまったんですね。
最初、このエラーが発生したとき、「シンボルを解決できません。」といわれてしまい、何がなんだか全然わからなかったので、ぐぐってみると、
Javaの部屋に
このエラーはこの指定方法で綴りを間違った場合に発生します。
via:シンボルを解決できません
ぐるなびのwebサービスを使った解説も最後かもしれない。
今回は、お店の情報を取得する方法について
<cfparam name="requrl" default="http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=取得したAPIキー"> <cfparam name="hit_per_page" default=500> <cfparam name="ret" default=""> <cfset store="和民"> <cfset requrl = requrl&"&hit_per_page="&hit_per_page> <cfset requrl = requrl&"&name="&URLEncodedFormat(store,"utf-8")> <cfhttp url="#requrl#" method="get"/> <cfoutput>var data ="";</cfoutput> <!--- xmlの解析 ---> <cfset ret = XmlParse(cfhttp.fileContent)> <!--- 問合わせがエラーを返した場合 ---> <cfif XmlChildPos(ret,"gnavi",1) neq -1> <!--- コードの値を取得 ---> <cfset retCode = ret.gnavi.error.code.xmlText> <cfoutput> <!--- コードが600の場合、呼び出し元に検索結果(0件)を返す ---> <cfif retCode eq "600"> data = {"error":null,"total":0}; <!--- エラーコードを返す ---> <cfelse> data = {"error":"#ret.gnavi.error.code.xmlText#"}; </cfif> </cfoutput> <!--- 問合わせ結果が、正常な場合 ---> <cfelse> <!--- 検索結果の合計数 ---> <cfset TotalCnt = ret.response.total_hit_count.XmlText> <!--- responseタグまで取得 ---> <cfset Response = ret.response> <!--- JSON形式でリターン ---> <cfoutput> date = { "error":null <!--- 検索結果の合計数 ---> , "total":#totalCnt# <cfloop index="i" from="1" to="#totalCnt#"> <cfset Ret_rest = Response.rest[i]> , #i#:{ <!--- 店舗ID ---> "id":"#Ret_rest.id.XmlText#" <!--- 店舗名 ---> , "name":"#Ret_rest.name.XmlText#" <!--- PCサイトURL ---> , "url":"#Ret_rest.url.XmlText#" <!--- 店舗画像画像1がある場合 ---> <cfif Ret_rest.image_url.shop_image1.XmlText neq ""> <!--- 店舗画像画像1のURL ---> , "shop_image1":"#Ret_rest.image_url.shop_image1.XmlText#" <!--- 店舗画像画像1がない場合 ---> <cfelse> , "shop_image1":null </cfif> <!--- 店舗画像画像2がある場合 ---> <cfif Ret_rest.image_url.shop_image2.XmlText neq ""> <!--- 店舗画像画像2のURL ---> , "shop_image2":"#Ret_rest.image_url.shop_image2.XmlText#" <!--- 店舗画像画像2がない場合 ---> <cfelse> , "shop_image2":null </cfif> <!--- QRコード画像のURLがある場合 ---> <cfif Ret_rest.image_url.qrcode.XmlText neq ""> <!--- QRコード画像のURL ---> , "qrcode":"#Ret_rest.image_url.qrcode.XmlText#" <!--- QRコード画像のURLがない場合 ---> <cfelse> , "qrcode":null </cfif> <!--- 住所 ---> , "address":"#Ret_rest.address.XmlText#" <!--- 電話番号 ---> , "tel":"#Ret_rest.tel.XmlText#" <!--- 緯度(度分秒十進数) ---> , "latitude":#Ret_rest.latitude.XmlText# <!--- 経度(度分秒十進数) ---> , "longitude":#Ret_rest.longitude.XmlText# } </cfloop> }; </cfoutput> </cfif> |
ここまで、でかいお祭りは生まれて初めてかもしれない。
普通の屋台に加え、各県の名産物もあって、ものすごい人だかりができていました。
上は、秋田のきりたんぽ!!
めっちゃおいしかった。
上は、山梨の白ワインが入っていた樽。
ものすごく甘くてぶどうの味がしました。
名産物のみだけでなく、世界各地の食べ物を出している屋台もあって、ガーナのお豆の入ったビーフシチューと焼肉の入ったナンを食べて、まじ幸せでした。
食べるって本当にいいですね(故水野さんっぽく)
昨日に引き続き、今日もぐるなびのwebサービス
今回は、都道府県情報の取得をします。
<cfparam name="requrl_pref" default="http://api.gnavi.co.jp/ver1/PrefSearchAPI/?keyid=取得したAPIキー"> <cfhttp url="#requrl_pref#"/> <!--- xmlの解析 ---> <cfset ret = XmlParse(cfhttp.fileContent)> <!--- 問合わせがエラーを返した場合 ---> <cfif XmlChildPos(ret,"gnavi",1) neq -1> <!--- コードの値を取得 ---> <cfset retCode = ret.gnavi.error.code.xmlText> <!--- エラーコードの表示 ---> <cfoutput>#retCode#</cfoutput> <!--- 問合わせ結果が、正常な場合 ---> <cfelse> <cfset response = ret.response> <cfoutput> <cfloop index="i" from="1" to="#ArrayLen(response.XmlChildren)#"> <cfset res_pref = response.pref[i]> #res_pref.pref_code.XmlText#<br> #res_pref.pref_name.XmlText#<br> #res_pref.area_code.XmlText# </cfloop> </cfoutput> </cfif> |
ぐるなびWebサービスを利用して、エリア情報を取得したいと思います。
<cfparam name="requrl" default="http://api.gnavi.co.jp/ver1/AreaSearchAPI/?keyid=取得したAPIキー"> <!--- httpリクエスト ---> <cfhttp url="#requrl#"/> <!--- xmlの解析 ---> <cfset ret = XmlParse(cfhttp.fileContent)> <!--- 問合わせがエラーを返した場合 ---> <cfif XmlChildPos(ret,"gnavi",1) neq -1> <!--- コードの値を取得 ---> <cfset retCode = ret.gnavi.error.code.xmlText> <!--- エラーコードの表示 ---> <cfoutput>#retCode#</cfoutput> <!--- 問合わせ結果が、正常な場合 ---> <cfelse> <cfset response = ret.response> <cfoutput> <cfloop index="i" from="1" to="#ArrayLen(response.XmlChildren)#"> <cfset res_area = response.area[i]> <!--- エリアコード ---> #res_area.area_code.XmlText#<br> <!--- エリア名称 ---> #res_area.area_name.XmlText# </cfloop> </cfoutput> </cfif> |
昨日の[scheme]なぜかバグるんだよなぁー。で、バグがでていたのですが、教科書とおりにやってみたら、できた!!
(define (element-of-set? x set) |
どうして、これがバグちゃうんだろう~~~。
(define (element-of-set? x set) |
東京タワーの帰りに、水天宮前駅にあるロイヤル・パーク・ホテルに宿泊しました。
(嫁のおごりです。)
晩御飯は、1Fのシンフォニーというところで、バイキング
今までいった中で、京王プラザホテルのバイキングが一番おいしいかなと思っていたのですが、ここも最高だった。
めっちゃうまくて、食べ過ぎて、夜中吐きそうになりました。
フォアグラも食べ放題で、上の写真は、シェフが焼いているところ。
デザートもたくさんありました。
甘党にも最高ぉ~~~。
今年、生誕20周年ということで、登りました。
下を覗くとものすごく怖かったです。
ちょうど、晴れていたので、ながめは最高でした。
ちょーど、今の妻と付き合うときに、東京タワーに行ったのですが、その時に最上階にはいかなかったので、懐かしいなーと思いつつ、最上階の景色を楽しみました。
夜景などうなんだろう??
やっぱキレイなのかな??
あ”-、今年で終わってしまうのかー、お台場冒険王
というわけで、今年もいきました♪”
今年は、めちゃいけプロデュースの海の家にいくこともできました。
最上階の展望台で、SPORTのアナウンサー体験をすることができました。
1500円で、DVDにしてくれるのですが、買っておけばよかったなーorz
あまりにも恥ずかしすぎて、買うのに躊躇しました。
コンバット2お台場冒険王スペシャルを見ました。
オバ芸最高
唯一の後悔は、ゲゲゲの鬼太郎のアトラクションにいけなかった。
朝早くから並んでおけばよかったのかも。
あと、ドラゴンアイスの量が少ないような気がします。
最初、小学生が持っているのを見て、めちゃめちゃ量があるように見えたのですが。。。
うーん、入場料、1500円は、相変わらず高いかも。
だいぶ前に、妻が買った、本を読んでいます。
相談者の悩みに、高田純次が答えるという作品。
その回答が、本当に適当すぎて、お腹が痛くなってしまうほど笑いが止まりませんでした。
あまりにも適当すぎてあっという間に読み終わってしまいました。
目次 第1章 「肉・からだ」の巻 第2章 「マネー」の巻 第3章 「仕事」の巻 第4章 「家族」の巻 第5章 「青春」の巻 第6章 「哲学・社会」の巻 |
今回は、Associationの確立方法について。
簡単に言ってしまうと、前々回に取得したOP EndPoint URLにhttpリクエスト(POST)を出せばオッケーなのですが、その際に、以下のパラメーターを送信する必要があります。
openid.ns openid.mode openid.assoc_type openid.session_type openid.dh_modulus openid.dh_gen openid.dh_consumer_public |
任意精度の整数は big-endian signed two's complement binary で符号化されなければならない (MUST)。従って、"btwoc" は任意精度の整数を引数としてとり、最小の big-endian two's complement representation として返す関数である。Diffie-Helman 鍵交換で使われる整数は全て正である。これは、the two's complement representation 最左ビットは常にゼロでなければならない (MUST) ことを意味する。
via:4.2. 整数表現 (Integer Representations)
1:10進数を16進数に変換 2:2桁ずつ区切り、それぞれの頭に「\x」を付ける 3:先頭の数字を2進数に変換してみて、1だった場合、一番先頭に「\x00」を追加する |
10進数:0 16進数:0 2進数:0→\x00 10進数:127 16進数:7F 2進数:0110 1111→\x7F 10進数:128 16進数:80 2進数:1000 0000→\x00\x80 |
<cfset KeyValue = "付録Bの値"> <cfparam name="tempKeyValue" default = ""> <cfparam name="KeyValueRest" default = "#KeyValue#"> <cfloop index="i" from="1" to="#Len(keyValue)/2#"> <!--- 左から2文字分を抜き出し、文字列結合する ---> <cfset tempKeyValue = tempKeyValue&"\x"&Left(KeyValueRest,2)> <!--- テンポラリー文字列の長さが2文字よりも小さくなるまで行う ---> <cfif Len(KeyValueRest) gte 2> <!--- 左から3番目以降の文字列を抜き出す ---> <cfset KeyValueRest = Mid(KeyValueRest,3,Len(KeyValueRest) - 2) > </cfif> </cfloop> <!--- 頭に「\00」をつけ、Base64に変換を行う ---> <cfset dh_modulus = ToBase64("\x00"&tempKeyValue)> |
<cfset KeyValue = "付録Bの値"> <cfparam name="tempKeyValue" default = ""> <cfparam name="KeyValueRest" default = "#KeyValue#"> <cfloop index="i" from="1" to="#Len(keyValue)/2#"> <!--- 左から2文字分を抜き出し、文字列結合する ---> <cfset tempKeyValue = tempKeyValue&"\x"&Left(KeyValueRest,2)> <!--- テンポラリー文字列の長さが2文字よりも小さくなるまで行う ---> <cfif Len(KeyValueRest) gte 2> <!--- 左から3番目以降の文字列を抜き出す ---> <cfset KeyValueRest = Mid(KeyValueRest,3,Len(KeyValueRest) - 2) > </cfif> </cfloop> <!--- 頭に「\00」をつけ、Base64に変換を行う ---> <cfset dh_modulus = ToBase64("\x00"&tempKeyValue)> <cfset dh_gen = ToBase64("\x02")> <cfset tempKeyValue = 0> <cfset KeyValueRest = KeyValue> <cfloop index="i" from="1" to="#Len(keyValue)#"> <!--- 右から一文字抜き出して10進数変換を行う ---> <cfset tempKeyValue = tempKeyValue + InputBaseN(Right(#KeyValueRest#,1),16) * (16^(#i#-1))> <cfif i lt Len(keyValue)> <cfset KeyValueRest = Mid(KeyValueRest,1,Len(KeyValueRest)-1)> </cfif> </cfloop> <cfset dh_consumer_public = ToBase64("任意の数字")> <!--- httpリクエスト ---> <cfhttp url="#ReqUrl#" method="post" redirect="yes"> <cfhttpparam type="formField" name="openid.ns" value="http://specs.openid.net/auth/2.0" > <cfhttpparam type="formField" name="openid.mode" value="associate"> <cfhttpparam type="formField" name="openid.assoc_type" value="HMAC-SHA1"> <cfhttpparam type="formField" name="openid.session_type" value="DH-SHA1"> <cfhttpparam type="formField" name="openid.dh_modulus" value="#dh_modulus#"> <cfhttpparam type="formField" name="openid.dh_gen" value="#dh_gen#"> <cfhttpparam type="formField" name="openid.dh_consumer_public" value="#dh_consumer_public#"> </cfhttp> |
今はもう更新を行っていないのですが、このブログを始める前に、アメーバブログをやっていました。
日々、書く、えいが、おんがく、DTM。。。
で、画像のみですが、上のブログが雑誌に掲載されました。
マイクロソフトの社員に誘っていただいたイベントに参加したのですが、その時、模様が掲載されています。
セカンドライフに関することが書かれているので、興味ある方は、是非どうぞ!!
そりゃーないよー。
すっげー楽しみにしていたのに。。。orz
このたび、20世紀フォックスTV米国本社より、「24SEASON Ⅶ・第1話」の制作が大幅に遅れ、8/31お台場映画王での上映に間に合わせることが不可能である旨の連絡がありました
via:24 SEASON Ⅶワールドプレミア について
もうかれこれ、2ヶ月前ほどに、結婚式をあげました。
[思い出]昨日は結婚式
[思い出]今日は、結婚式
[思い出]明日は、いよいよ結婚式
で、その時に、当日の模様を収めてくれるDVDを注文したのですが、ようやく到着しました。
さっそく、嫁のおばあちゃんと3人でみたのですが、すごくおもしろかったです♪
最高の思い出がまた一つできました!!
そんな風に書かれたら、見るしかないじゃない!!
女優エバ・メンデス(34)がこのほど、米大手ファッションブランド、カルバン・クライン(CK)のランジェリーと香水の広告の顔になった。ところが、完成したばかりの同社の香水「シークレット・オブセッション」の新作CMが、あまりにセクシーすぎるという理由で、早くも全米で放送中止になり、物議をかもしている。
via:エバ・メンデスのエロすぎるカルバン・クラインCMが放送中止に!
前に、[ColdFusion][OpenID]取得したXRDSについてで、OP EndPoint URLを取得するところまで書きました。
しかし、その後、もう何をどうやってよいのかわからず、google groupに相談しました。
そしたら、なんと、なんと、なんと、返信があったのです。(超感動)
ステップとしては、
via:google group:Nat Sakimuraさんからの返信
1. OpenID入力
2. Discovery
3/4 Association確立
5. 認証要求をOPへ送信
6. RP Discovery
7.(クレデンシャル入力)
8. 認証結果をRPへ送信
9. 結果検証時のDiscovery
10/11. 署名の検証
12. ログイン完了
OpenIDファウンデーション・ジャパンの発起人代表で、野村総研の情報技術本部 技術調査部 上級研究員である崎村夏彦氏
via:国内でOpenID推進団体が設立へ――4月に正式発足
Functionの構文は、下のようになっていようです。
Function hoge(args) |
単純にIf文といえども、言語によって、書き方が、多少違うので、一応書こうかなと。
If 条件1 Then ・・・処理1・・・ ElseIf 条件2 Then ・・・処理2・・・ Else ・・・処理3・・・ End If |
前回に続いて、「""」の判定方法について。
一番、簡単なのは、Ifで判定するのがいいと思いました。
<% |
変数がnullかどうかを確認するIsNull()ですが、これもちょっと注意。
下のソースでは、falseを返します。
<% Dim aTest %> <%= IsNull(aTest) %> |
<% Dim aTest aTest = "" %> <%= IsNull(aTest) %> |
<% Dim aTest aTest = Null %> <%= IsNull(aTest) %> |
VBScript の変数の扱いを参考にすると、Dimで変数宣言を行っただけで、まだ値をセットしていない場合、変数の値は「Empty」という特殊な値になるようです。
で、Emptyかどうか確認するためには、IsEmpty(変数名)でtrueを返せば、まだ値がセットされていなくて、falseの場合は、セットされたことになります。
以上から
<% Dim aTest %> <%= IsEmpty(aTest) %> |
<% Dim aTest aTest = "" %> <%= IsEmpty(aTest) %> |
aTest = Empty |
まずは、タイトル通り、宣言方法から。
.aspファイル内において、asp言語を明記したい場合、
「<% ・・・処理・・・>」
そこで、変数宣言は、
<% Dim hoge hoge = "Hello World" %> |
<%= hoge %> |
久しぶりにaspに触る機会があったので。
「そもそも、aspってなんだよ??」という疑問が生じたのでちょっとぐぐってみることに
動的にWebページを生成するWebサーバの拡張機能の一つ。
via:IT用語辞典:ASP
通常はWebブラウザに渡されてから処理されるJavaScriptやVBScriptなどで記述されたスクリプトをサーバ側で処理し、処理結果のみをブラウザに送信する。
Microsoft社のWebサーバであるIISで利用できる。ブラウザからデータを受け取ってファイルに記録したり、データベースと連携した動的なWebページを作成したりすることができる。
Microsoft社によって開発されたスクリプト言語(簡易プログラミング言語)。同社のWebブラウザであるInternet Explorer上で動作する。同社のプログラミング言語Visual Basicのサブセット(簡易版)になっており、さまざまな制限が加えられている。
via:IT用語辞典:VBScript
完全に再現したわけではないのですが、下記のようなプログラムがありました。
<cfprocessingdirective pageEncoding="utf-8" /> |
1回目のボタン押下時 a:アラートで「0です」が表示 b:アラートで「hoge」が表示 c:画面に1が表示される 2回目のボタン押下時 画面を閉じる 処理終了 |
1回目のボタン押下時 a:アラートで「0です」が表示 b:画面に1が表示される 2回目のボタン押下時 a:「ウィンドウを閉じますか?」というメッセージが表示される b:「はい」を選択した後、アラートで「hoge」が表示 c:画面に2が表示される 処理終了 |
function lf_Run(){ |
今、さっき、デニーズでカツどんを食べました。
子供の時から、ガストやバーミヤンなどによくつれて行ってくれて、がっつがつ、がっつがつ食べていたのですが、そんなファミレス史の中で、妻と付き合って一番、変わったのが、朝、デニーズで、ご飯を食べるようになったこと。
子供のときから、ファミレスで朝食をとることは、ものすごく贅沢なことだと思い込んでいた者としては、朝デニは、まさに夢のまた夢。
最初、朝デニをしたとき、ものすごく興奮しましたー♪
高いんじゃーないのかなーとメニューをおそるおそる拝んでみたら、夜や昼間よりも全然、安くて、今はどうかわかりませんが、少し前までドリンク飲み放題で胃がブカブカになるほど飲んでました。
で、タイトルと全然、違うことを書いちゃいましたが、デニーズのカツどん、おしいしいです♪
値段の割には、ものすごいボリューム感で、8割りぐらい食ったところで、ものすごくお腹がいっぱいになります。
朝デニを経験してから、夜や昼にデニーズに行くと、ご飯高いなーと思うようになって、敬遠しがちになってしまったのですが、そんな中、カツどんはやはり、いけると思う。
最初、今日こそは違うものと思いサンドイッチにしようかと悩みましたが、同じぐらいの値段ならと、いつもどおり頼んでしまった、カツどん。
あのボリューム感、そして、お味噌汁、う~~~最高のコンビネーション!!
おととい、Yadisプロトコルを利用して、XRDSを取得できたことを書きました。
今日は、その続きから、さっそくファイルを開いてみると
<?xml version="1.0" encoding="UTF-8"?> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/server</Type> <URI>https://open.login.yahooapis.jp/openid/op/auth</URI> </Service> </XRD> </xrds:XRDS> |
エンドユーザが指定した識別子(User-Supplied Identifier)に対し行った発見行為(Discovery)で得たOpenID認証プロトコルのメッセージを容認するURLを示す。
via:OpenID Authentication 2.0
この値は必ず完全なHTTPかHTTPS URLでなくてはならない。
<cfset RetXML = XmlParse(cfhttp.fileContent)> <cfset ReqUrl = RetXML.xrds.XRD.Service.URI.XMLText> |
ずーと、ずーと行きたかった、あのクリスピー・クリーム・ドーナッツに行ってきました。
超人気のあるドーナツ屋で、新宿で、2時間待ち、有楽町でも2時間待ちと、超混みこみの状態で、妻の情報で、渋谷店は、そんなに混んでないということを聞いて、これはいかなくちゃと勢いで行ってきました。
確かに、渋谷店は、土曜日に行ったのにもかかわらず、30分程度でゲットすることができました。
(写りが悪いのですが。。。)
超おいしそうな、ドーナッツがいっぱいあって、すっげー悩みました。
しかも、並んでいるときに、プレーンのドーナッツをタダでもらって、なんだか得した気分。
結局、ミスオのオールドファッションみたいなドーナッツと、ドーナッツの中にキューイとヨーグルトがジャムみたいになっているものを買いました。(今、調べたら、それぞれ、トラディショナル・ケーキとストライプ・キウイ・ヨーグルトって書いてありました)
ものすごくおいしかったですー♪
ドーナッツがおいしいだけでなく、コーヒーも結構、いけるんですよぉー。
今度、また、いきたいなー。
きっと、12個入りの箱で買うんだろうなー。
メタボ確実です。
今日は、何から書いていいのか。。。
ものすごく悩みまくって、ようやくここまでたどり着きました。
結論からいうと、ColdFusionを使って、Yahooが発行しているXRDSの位置を突き止める方法がわかったのです。
あまりにも悩みすぎて、どういう順序でここまできたのか、すべて思いだせないのですが、思いだせる範囲で書いていきます。
昨日の話とかぶりますが、yahooでゲットできるOpenIdを使って認証するログイン画面を、今、作ろうとしています。
で、ログイン方法は、OpenId 2.0に準拠した方法でログインできるところまで、書きました。
そこで、具体的にどうやってログイン方法を実装するか、色々と調べました。
ひたすらぐぐったのですが、全然、ColdFusionを使った実装方法が見つりませんでした。
唯一見つかったのはCFOpenIDにあるプログラムで、ダウンロードして使えばいけるのかなと思ったのですが、ダメでした。
というのも、このプログラムを使った認証方法は、OpenId 1.1に準拠した方法なので、ダメだったのです。
そこで、ColdFusionでぐぐってもラチがあかないなと思い、そもそも、「OpenIdとはなんぞや??」というところからスタートしたほうがいいかなと思い、@マークItのOpenIDの仕様と技術とgihyo.jpのいますぐ使えるOpenIdを読みました。
読んだのはいいのですが、肝心の実装方法が、それぞれ、PerlとRubyで書かれていたため、基本的な用語しか理解できず、最終的に、OpenId.netのOpenID Authentication 2.0 - Finalも合わせて読んでいきました。
と読んでいくうちに、どうやら、Yadisプロトコルを使ってEndpoint URLをゲットすればいいことがわかりました。
yahooのデベロッパーサイトにも、そのことについて書かれています。
ってことは、Yadisを使ってEndpoint URLをゲットすれば、とりあえず少しは前進できるのかなと思いました。
この段階で、Yadisプロトコルは、http通信を使えばおそらくできるのではないのかなーという推測がありました。
案の定、Yadisの仕様書(html版)を見てみると、Yadis IDにhttpリクエストをgetで送ると、XRDSをゲットできることがわかりました。
でも、Yadis IDってなんぞや??
そう思いながら、仕様書を読んでいくと、どうやらhttpかhttpsで始まるurlであることがわかりました。
urlであることはわかったのですが、果たして、どこのurlなのでしょうか?
この段階で、yahooのデベロッパーページを見てみると、特定のurlの記載がなかったので、おそらく「http://www.yahoo.co.jp」だろうなーと推測して、色々と調べてみたら、案の定、ビンゴでした。
id:lopnorさん(超感謝です)の OpenID2 つうか Yadis はじめましたの記事で、yahoo.comにhttpリクエストを送った結果が表に書かれていて、その中に、なんと、なんと、「X-XRDS-Location: http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds
」という文字があったのです。
これで推測が正しいことが判明し、後は、cfhttpタグでyahoo.co.jpにhttpリクエストのgetメソッドで送ればいいんだなーということがわかりました。
というわけで、ここまでを総合して、以下、ソースです。
<cfprocessingdirective pageencoding="utf-8"> <cfhttp url="http://www.yahoo.co.jp" method="get" redirect="no" /> <cfoutput> <cfset keyToArray = StructKeyArray(cfhttp.responseHeader)> <table> <tr><td>responseHeader</td><td>value</td></tr> <cfloop index="i" from="1" to="#ArrayLen(keyToArray)#"> <tr><td>#keyToArray[i]#</td><td>#cfhttp.responseHeader[Evaluate("keyToArray[i]")]#</td></tr> </cfloop> </table> </cfoutput> |