2010年02月
2010年02月20日
Maraigue風。:[Twitter][ふぁぼったー] 現在開いているユーザのふぁぼられを見るブックマークレット
Maraigue風。:[Twitter] 現在開いているユーザのふぁぼられをFavstar.fmで見るブックマークレット
以前「ふぁぼったー」「favstar」という、Twitterのお気に入りを集計するサービスへジャンプするためのブックマークレットを作ったのだが、同様のサービス「ふぁぼるっく」「Twistar」への対応版も作ってみた。
●[ふぁぼったー]
●[favstar]
●[ふぁぼるっく]
●[Twistar]
上記リンクのうちお好きなものを、ブックマーク領域にドラッグ&ドロップするか、右クリックしてブックマークに追加するメニュー(「お気に入りに追加」など)を選択するなどして、ブックマークとして使えるようにして下さい。
そしてブックマーク領域に作成されたこのリンクを、Twitterのユーザページあるいは発言のページを開いた状態でクリックして下さい。
2010年02月15日
タイトル長めですが、大事なことなので全部書きました。
コードはこちら:
- メインのライブラリ/タイムラインを取得するサンプル
- gist: 304123 - GitHub(最終更新:2010.02.15 11:26)
- 発言を投稿するサンプル(上記ライブラリと組み合わせてご利用下さい)
- gist: 306853 - GitHub(最終更新:2010.02.18 3:09)
概要
Twitterでは、OAuthという認証のシステムが利用できる。
従来は、(ユーザ認証を伴う)TwitterのAPIを利用する際、APIの呼び出しのたびにユーザ名・パスワードを送信する必要があった。一方OAuthでは「トークン」と呼ばれる、ランダムに生成された文字列を、APIへのアクセス権限を証明するものとして発行する。実際にAPIを利用する際には、このトークンを用いてアクセスすれば、ユーザ名やパスワードを送信する必要はない。(詳しくはAPIアクセス権を委譲するプロトコル、OAuthを知る − @ITを参照)
なお、「あるユーザAの出来る行為」に対応するトークンを発行するためには、(1)ユーザAがTwitterにログインした状態でトークン発行ページにアクセスするか、(2)ユーザAのユーザ名およびパスワードを送信してトークンを直接取得する(xAuth)必要がある。
トークンを介する利点として、Twitterと連携するウェブサービス(例えば、アップロードした写真をTwitterに通知する)が、Twitterユーザのパスワードを直接記録せずにTwitterの機能を利用できるということが挙げられる((1)の方法を使えば、ウェブサービス側にはトークンしか通知されないため)。これはセキュリティ上も、ユーザの心理という面でも便利である。
経緯
上記(1)の方法でのトークン取得が、Twitterと連携するウェブサービスに適した方法であるのに対し、(2)の方法は、各個人のコンピュータにインストールされるTwitterクライアントなどに適しているといえる。これらのクライアントは、ブラウザと無関係に動くほうが当然便利であるし、またユーザがパスワードをクライアントに伝えずに利用することはそもそも不可能だからである。
(1)の利用法はすでに多く用いられている一方、(2)の利用法はあまり広まってはいないのが現状である(後述)。これは(2)の方式が後で追加された仕様であること、また従来の「APIの呼び出しのたびにユーザ名・パスワードを送信する」方法(具体的には、Basic認証)で事足りていたというのが大きいと思われる。
しかしつい先日、TwitterがBasic認証でのAPI利用を6月ごろに終了するというアナウンスを出した。そのため、今後はBasic認証を用いていたサービス・アプリケーションは、OAuthを用いるものに移行する必要が生じた。
さて、私はtwbot.rbという、RubyでTwitterボットの制作を補助するライブラリを作っている。これはxAuth、つまり(2)の方法でのトークン取得が適しているケースといえる。しかしWeb検索を利用しても、RubyにてxAuthでトークン取得を行うためのコードが見つからなかった。それを書いたのがこのコードである。
これまでのコードと解決法
これまでにも、RubyにてOAuthを利用するコードはいくつか公開されていたものの、いずれも(1)の方法、すなわちブラウザを介してトークンを取得するものであった。
Twitterでこのことについて投稿したところ、@rokudenashi氏から「xAuthでのトークン発行はすでに実現できている」との情報をいただき、そのPythonコードを拝見させて頂いた。そこで、これをRubyに移植することにした。
さらに調べたところ、xAuthはHTTPヘッダに追加の情報を加えることで行うことが分かった(参考:OAuthでデスクトップアプリがブラウザを経由させたくないときのxAuth - Codin’ In The Free World)。これを踏まえ、RubyのOAuthライブラリのリファレンスや、xAuthを利用しているコードの一部とにらめっこしながら、前述のコードを書き上げるに至った。
コードの解説
大した内容ではありませんが、念のため解説。
最初のconsumer = OAuth::Consumer.new …の部分は、他のサンプルなどでも見られるコードである。ただし、アクセス先を「https://」と「api.twitter.com」にしないとならない模様(「http://」では403エラーになった)。
次のconsumer.get_access_token …の部分で、いきなりアクセストークンを取得する((2)の方式でなく(1)の方式を用いる場合は、その前に「リクエストトークン」という別のトークンを取得する必要がある)。この際、HTTPヘッダにユーザ名やパスワードを書いておく必要があるため、第3引数にユーザ名・パスワードおよび、「:x_auth_mode => "client_auth"」(xAuthを利用している、という情報)を加えてある。
追記:OAuthのアプリケーション登録方法
(2010.02.18 3:09追記)
本コードは、利用される皆様がそれぞれOAuthのアプリケーションを登録する、という想定のもとで書かれています。お手数ですが、OAuthのアプリケーション登録を行い(参考:TwitterのbotをOAuthに対応させる - しばそんノート→「OAuthクライアントを登録する」)、そのConsumer key/secretを用いてお試し下さい。
(2010.04.15 23:14追記)
遅ればせながら。
Twitter APIにおけるxAuthの正式サービス開始に伴い、メールで申請されたアプリケーション以外はxAuthが利用できなくなりました。(参考:Twitter API Wiki / Twitter REST API Method: oauth access_token for xAuth)
このためxAuthを用いるアプリケーションを作成するには、上記方法でアプリケーションの登録を行ったのち、api@twitter.com に「アプリケーション●●をxAuthでも使えるようにして下さい」という内容のメールをしないとなりません。
おわりに
xAuthの利用方法について貴重な情報を下さった@rokudenashi氏、IRCで議論して下さった@niku_name氏・@onodes氏、更にインターネット上の各情報に感謝の意を表します。
このコードが、皆様のRubyでのxAuth利用の助けになれば幸いです。
2010年02月14日
1時間遅れるのは当たり前、酷いときだと5時間とか1日とか遅れる。ちなみにこの間は40時間の遅延まで喰らった。
mopera U / moperaにおけるメール配送遅延について | メンテナンス情報 | ドコモスマートフォンサイト | NTTドコモ(2010.2.10)
ってことで、現時点では厄介なことになっているようだが、moperaのメールが遅延するのは以前かららしい。
F1100 moperaUメール遅延対策 - 雑記(2008.4.13)
mopera UのSMS通知の遅延 - 航星日誌補足 (2009.10.4)
本当、docomoから別キャリアに乗り換えたくなるくらい酷い。
現在対応を考えている途中なので、対応策が自分の中で決まったら追って掲載する予定です。
2010年02月01日
第4回札幌ボードゲームオフに参加した。
今回私は4つのゲームで遊んだ。持ち寄って下さる方いつもありがとうございます。
- ドミニオン
- 自分の山札を強化していくゲーム。私が遊ぶのは4回目くらい。今回は私が初めて知った戦術(山札から積極的に余分なカードを取り除き、強化効率の良いカードを引きやすくする)を他の方が使っているのを見て、把握しつつも自分では活用できず。
- ニムト
- 半端時間で実施。1〜104の通し番号のカードで行うゲーム。内容としてはトランプのゲーム「ハーツ」を複雑化したというところだろうか。運の要素が強いが、駆け引きもあったりして楽しい。
- プエルトリコ
- 植民地を開拓して商品を生産し、利益を得るゲーム。少し利益を得るにも複数ターンを要するので、行動をかなりよく考える必要がある。
- パンデミック
- 世界に病原体の感染が拡大する前に制圧を目指す、というゲーム。各プレイヤーが駒やカードを持つものの、内容としては参加者全員で協力して動くゲームとなっている。根本的に難易度高め。
Ruby勉強会@札幌-12に参加。今回はいろいろと迷った結果、LTで話すことに。
スライド中でも書いたのだが、札幌Ruby会議02の際の自分のLTがかなり酷く感じられて、LTという形で話すことにかなり自信を失っていた。ただ何とか気を持ち直して(Thanks @mrkn!!)、前回の反省も踏まえて話せたので、何とか精神的にも持ち直したかも。
