Basic認証を試してみる。
一昨日やってみた、Twitterのfriend一覧を取得する方法だけれども、followしてるはずなのにfollowされていない扱いになったりしていたのだが。
Twitter API 仕様書(翻訳感謝!)によると、friendは
http://twitter.com/statuses/friends/スクリーン名.xml
だけでなくて、
http://twitter.com/statuses/friends.xml
でも取得できるらしい。ただし、ログイン後に限るらしいけど。
と、言うわけで、今回はrubyでBasic認証を試してみることに。
といっても、そんなややこしくはなく。
req = Net::HTTP::Get.new('/statuses/friends.xml' + arg) req.basic_auth("登録しているメールアドレス", "パスワード")
Net::HTTP::Get.new で、BASIC認証でアクセスしたい先を指定してオブジェクトを作っておき、そのオブジェクトに対して basic_auth メソッドを使うことで認証の準備ができると。
で、そのオブジェクトを使って以下のようにアクセスするとBasic認証でアクセスできるようす。
Net::HTTP.start(address, 80) {|http| xml = http.request(req) }
定型文として覚えるならまあ、こんな感じなんだな、で済むけども、いまいち理屈がよく分からない。Net::HTTP::Get.newで取得されるオブジェクトの正体は?とか。
あと、なんでここでイテレータが出てくるのかもいまいちぴんとこない。
とりあえず、今の地点の成果を置いておく。
def getFriendsId(page) xml = nil address = 'twitter.com' arg = '?page=' + page.to_s req = Net::HTTP::Get.new('/statuses/friends.xml' + arg) req.basic_auth("登録しているメールアドレス", "パスワード") Net::HTTP.start(address, 80) {|http| xml = http.request(req) } doc = Document.new xml.body friends = [] doc.elements.each('users/user/screen_name'){ |element| friends.push(element.text) } friends end