ruby、始めました。
何かで読んだのだけども、複数のプログラミング言語を学ぶことは良いことらしい。確かに、物事を考える際に多角的に考えられるかも(その前に、私はもっと基礎を学ぶ必要があるような気がする)。
今、仕事で使ってるのはJava。自宅では、VB.NETかC#を使っている。
複数のプログラミング言語を学ぶ目的からすると、これらの言語とは違うタイプの物を学ぶ方が良いだろう、と思い、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 }
twitterのAPIだと、friendsを一度に全件とってこれないっぽいので、?page= を付けて1ページづつさかのぼりながら全件取ってくる。
一応、全部取ってくるのは成功した。
で、このidを整形して出力しようと思うとうまくいかない。
最後のところ。
試しに、 puts friend を、 puts 'id:' + friend にするとエラーが出る。
こんなの。 in `+': can't convert Array into String (TypeError)
エラーの内容を見ると、StringのつもりがArray として扱われているらしい。
あれ? each でもって、Stringを個別に取り出してるつもりだったんだけども。配列の中に文字列を入れてるつもりだったのが、そうなっていないらしい。C#とかだったら、List
というあたりで今日はタイムアップ。