そういえば、貧困な思考はいつも あなたのパターンを 安易なイメージ処理して のところの最後をしばらくの間「アニメーションにして」と勘違いしていた。

  1. トップ
  2. music
  3. 遊体離脱の空耳

めんどくさがって例外処理しなくても http://static.flickr.com/0/buddyicons/ 以下は全てリダイレクト。

アイコンが設定されていないときは、特別に http://www.flickr.com/images/buddyicon.jpg をアイコンとして使うんだけど、なんとなく面倒くさくてこの処理をしていなかった。というか、どういうレスポンスが返ってくるかわからなかったから放置していた。

で、なんとなくアレしてコレして見てみたら、iconserver=0 がレスポンスされるらしい。例外処理しとくかーって思ったけどリダイレクトだった。細かい配慮ないす。

  1. トップ
  2. net
  3. Flickr は親切だった。

weblogin.rb, 名前失敗したけどもういいや。

そのうち忘れるので使い方をめもる。

@cgi.header を使うことを前提にしてる。

api_keys = {
"Flickr" => {
"api_key" => "Flickr70c55b82e10021ffaaapi_key6",
"secret"  => "Flickrdf5secret3"
},
"TypeKey" => "fsakfsTypeKeyafasAPI"
}
require "weblogin.rb"
@cgi = CGI.new
WebLogin.open(@cgi, api_keys) do |login|
begin
case login.auth
when :login
# login したときの処理
# DB にユーザ ID とユーザ情報を保存したり
end
rescue WebLogin::NoActionError => e
puts @cgi.header("type" => "text/plain")
puts login.services # 有効なサービスの配列
end
end

上のようなのを認証スクリプトとしておいとく。このサイトだと /login.rb がコレ。ログインスクリプトの query_string が logout だったらセッションを破棄してリファラにリダイレクトする。ちょっとアレ。

/login.rb/Flickr?return_path= のようなリクエストをすると Flickr にリダイレクトして認証させる。認証されるとコールバック (Flickr の対応する API key のコールバックには http://example.com/login.rb/Flickr/callback のように指定しておく) にリダイレクトされるので、セッションに情報をセットして、return_path にリダイレクトする。

login.auth は、path_info に何も指定されていなかったりすると NoActionError を投げる。

require "weblogin.rb"
@cgi = CGI.new
WebLogin.open(@cgi, api_keys) do |login|
if login.service
# login している場合
login.service #=> "Flickr"
login.id #=> "25514198@N00"
login.user_name #=> "cho45"
login.profile_uri #=> "http://www.flickr.com/photos/25514198@N00/"
login.icon #=> "http://static.flickr.com/23/buddyicons/25514198@N00.jpg"
login.full_name #=> "Hiroh Satoh"
else
# login していない場合
# id その他上記メソッドは全て nil
end
end

いまいち気持ち悪いんだけどどうにもこうにもわからんのでこんな感じ。ブロックをとっているのはセッションファイルを確実に閉じるため。fcgi 環境で死ぬことがあったのでこういうことやってる。

WebLogin クラスは、それ以下にある、サービス名に対応するクラスをインスタンス化してメソッドを呼び出す。例えば /login.rb/Flickr?return_path=somepath の場合、WebLogin::Flickr.new(@cgi, @session, @api_keys["Flickr"]).auth が呼ばれる。

各サービス名の auth メソッドはサービスの認証画面にリダイレクトする。サービスは /login.rb/Flickr/callback にリダイレクトする。

callback が指定されている場合、インスタンス化されたサービスクラスの callback メソッドを呼ぶ。callback メソッドはユーザ情報をまとめて Hash にして返す。WebLogin はその Hash をセッションに保存して、最初に指定された return_path にリダイレクトする。

いろいろアレなことが思い浮かんだけどあとで考えよう。

new にブロックって一般的じゃないんじゃ?という指摘をうけたので open にした。確かに new にブロックは微妙だった。

  1. トップ
  2. ruby
  3. ログインに使ってるスクリプト

結構説明書読まない人って多いみたいだ。

小学生のときはそれこそ読まない人が全く理解できなかったけど、最近説明書を読みたくないときがあって、もしかしたらこういう感じなのかなぁって分かり始めたかもしれない。それはなんかとにかくいじくりまわしたい衝動が先にくる感覚だったのだけれど。

まぁでも結局そのあと説明書を最初から最後まで読んだわけです。何ができて何ができないのか、よくやる操作はどうやるのが一番スマートなにかを頭に入れておきたい。結構何度も説明書を読んでいると、新しい機能の発見があったりする。最初は「使わないだろう」って思って見逃しちゃうものを再発見できる。結構楽しい。

仕様書やら、プログラミングのリファレンスなんかもそういう感じでよく読む。一時期は XSLTXPath の仕様書が常に開きっぱなしだった。ECMAScript の仕様書 (日本語 HTML 版) はむしろリファレンスとして使ってる。Ruby リファレンスマニュアルは気が付くと何故か上下になんどもスクロールしながら見てる。

暇だからできることだけど、とにかく自分が使うものは隅々まで一応知っておきたい。もし必要な機能じゃなかったら、頭の片隅にその機能があることだけを覚えておけばいい。使い方はまたあとで見ればいいから。

  1. トップ
  2. life
  3. 説明書を読むのが好き。

この日記にもつけてみた。

結局大して書く人がいないだろうってことでログインごとにユーザー情報を保持している XML を更新し、それを XSLT から document() 使って読み込むようにした。

  1. トップ
  2. web
  3. 認証付きコメント実装
  1. トップ
  2. site
  3. 認証付きコメント実装

そうとは限らないし、ちゃんと変わったほうがいいことも多い。

Ajax なりなんなりを含めて、JavaScript でいいことって画面遷移がないことであって、URL が変わらないことじゃない。

UI の補助ではなく、コンテンツを書き換える場合はむしろ URI は変わったほうがいい。要はあとでそのリソースにリンクを貼りたいとき、困るか困らないかが分かれ目だと思ってる。

  1. トップ
  2. ajax
  3. Ajax では URL が変わらない?
  1. トップ
  2. js
  3. Ajax では URL が変わらない?
  1. トップ
  2. web
  3. Ajax では URL が変わらない?