あんにんにっき。

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

ruby、始めました。

 何かで読んだのだけども、複数のプログラミング言語を学ぶことは良いことらしい。確かに、物事を考える際に多角的に考えられるかも(その前に、私はもっと基礎を学ぶ必要があるような気がする)。
 今、仕事で使ってるのはJava。自宅では、VB.NETC#を使っている。
 複数のプログラミング言語を学ぶ目的からすると、これらの言語とは違うタイプの物を学ぶ方が良いだろう、と思い、rubyを勉強してみることにしようと思う。本当は、ちょっと前に試して挫折しかかった計画が復活しかかってきてるだけだけど。
 で、勉強する際の方法論としては、
1.本を読む
2.実際に試してみる
 この2点があるだろう。前に試したときに本は一応読んでいる。へーって程度。でも、やっぱりプログラムはやっぱり実践で覚えるべき。興味のある題材で遊ぶのが一番と思う。
 ってことで。試してみることに。お題は 特定のURLを読み出して、Twitterのidを取得して、自分がfollowしていないidだけを列挙する、ってので一つ。最終的にはボタン押したら対象URLのidをまとめてfollowできるようにしたい。もちろんwebで。
 まずは、自分のfollowしているidを全部引っ張ってくる実験。あちこち見ながら切り貼りしつつ。
 まだ実験段階なので、変数名とかはあまり丁寧に考えてない。

def getFriendsId(page)
	xml = nil
	address = 'twitter.com'

	if (page == 0)
		arg = ''
	else
		arg = '?page=' + page.to_s
	end

	Net::HTTP.start(address, 80) {|http|
		xml = http.get('/statuses/friends/annin102.xml' + arg)
	}

	doc = Document.new xml.body
	friends = []

	doc.elements.each('users/user/screen_name'){ |element|
		friends.push(element.text)
	}

	friends
end

def getAllFriendsId
	page = 0
	allFriends = []
	while true
		friends = getFriendsId(page)
		if friends.length == 0
			break
		else
			page += 1
			allFriends.push(friends)
		end
	end

	allFriends
end


friends1 = getAllFriendsId
friends1.each{|friend|
	 puts friend
}

 twitterAPIだと、friendsを一度に全件とってこれないっぽいので、?page= を付けて1ページづつさかのぼりながら全件取ってくる。
 一応、全部取ってくるのは成功した。
 で、このidを整形して出力しようと思うとうまくいかない。
 最後のところ。
 試しに、 puts friend を、 puts 'id:' + friend にするとエラーが出る。
 こんなの。 in `+': can't convert Array into String (TypeError)
 エラーの内容を見ると、StringのつもりがArray として扱われているらしい。
 あれ? each でもって、Stringを個別に取り出してるつもりだったんだけども。配列の中に文字列を入れてるつもりだったのが、そうなっていないらしい。C#とかだったら、Listに入るのはStringだけだから、コンパイルの地点ではじかれるので、入れるところでおかしいのか、取り出すところでおかしいのか分かるけども、今の私の知識では、どこがおかしいのか追っかける方法をしるところから始めないと駄目らしい。
 というあたりで今日はタイムアップ。