2009年11月12日木曜日

Go言語でTwitterの公開タイムライン取得

Go言語の練習がてら、Twitterの公開タイムラインを取得してみようと思いました。


とりあえず http.Get を使ってみました。

package main

import (
"fmt";
"http";
)

func main() {
url := "http://twitter.com/statuses/public_timeline.json";

if res, _, err := http.Get(url); err == nil {
buff := make([]byte,512);

for {
if _, err := res.Body.Read(buff); err == nil {
fmt.Printf ("%s", buff);
} else {
break;
}
}

res.Body.Close();
}
}


jsonなレスがそのまま得られたのですが、ちゃんと処理したくなってきました。

jsonパッケージがあったのですが、使い方に自信がなくウェブ検索・・

すると IT戦記さんの「早速 Go 言語を試してみる!」 の記事を発見。
こちらの記事では http.Get がうまく行かなかったと書かれていたのですが、なんとなく上記のコードでいけそうなので json 処理部分だけコードを拝借して確認してみました。

package main

import (
"json";
"bufio";
"http";
)

func main() {
url := "http://twitter.com/statuses/public_timeline.json";

if res, _, err := http.Get(url); err == nil {
reader := bufio.NewReader(res.Body);

for {
line, err := reader.ReadString('\n');
if err != nil {
if err.String() == "EOF" {
j, _, _ := json.StringToJson(line);
for i := 0; i < j.Len(); i++ {
data := j.Elem(i);
print(data.Get("user").Get("screen_name").String() + ": " + data.Get("text").String() + "\n");
}
}
break;
}
}

res.Body.Close();
}
}


うまくいきました!

#golang

0 件のコメント: