あんにんにっき。

日々思ったことや、おこったことを記録するブログ。要するに日記。

Basic認証を試してみる。

 一昨日やってみた、Twitterのfriend一覧を取得する方法だけれども、followしてるはずなのにfollowされていない扱いになったりしていたのだが。
 Twitter API 仕様書(翻訳感謝!)によると、friendは
 http://twitter.com/statuses/friends/スクリーン名.xml
 だけでなくて、
 http://twitter.com/statuses/friends.xml
 でも取得できるらしい。ただし、ログイン後に限るらしいけど。
 と、言うわけで、今回はrubyBasic認証を試してみることに。
 といっても、そんなややこしくはなく。

	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