twitter関連のプログラムをGoで書くのがはやっているので。
twitter関連のプログラムをGolangで書くのがはやってますね。
そういうわけで、我輩もやってみました編です。
…遅いですが。
- -
とりあえず、今回ごにょごにょやってて気になった点いくつか。
まず、最近のGolangの仕様変更で、一部の関数がなくなっています。
とりあえず私が気づいた範囲では以下のとおり。
以上の三つが、それぞれ
- json.Unmarshal
- ?
- io.util.ReadFileなど、ioパッケージからio.utilパッケージ
に置き換え/移動されているようです。
- -
さて、そういうわけで、今回はtwitterのパーソナルtimelineを取得してみました。
httpパッケージを使ってのやり方は分からなかったので、とりあえずnetパッケージを使ってごにょごにょしています。
ベーシック認証噛んでいるので色々応用できますねーってことで、BOT作りましたがこれはまたそのうちってことで。
package main import ("fmt"; "os"; "encoding/base64"; "bytes" "net"; "io"; "bufio"; "strings"; "json"; ) type User struct{ Screen_name string; } type Tweet struct{ User User; Text string; } type Tweets struct{ Tweet []Tweet; } func main(){ //第一引数がID,第二引数がパスワード userName:=os.Args[1]; userPass:=os.Args[2]; //BASIC認証用にBASE64エンコード。 authBuf := &bytes.Buffer{}; encoder := base64.NewEncoder(base64.StdEncoding , authBuf); encoder.Write(strings.Bytes(userName+":"+userPass)); userAuth:=authBuf.String(); //コネクションを作って、 twiCon , twiErr := net.Dial("tcp","","twitter.com:80"); if twiErr != nil{ print("err!"+twiErr.String()); return; } var twiBuf [10000]byte; //リクエストを飛ばす。 twiCon.Write(strings.Bytes("GET /statuses/home_timeline.json HTTP/1.1\r\n")); twiCon.Write(strings.Bytes("Host: twitter.com\r\n")); twiCon.Write(strings.Bytes("Authorization: Basic "+userAuth+"\r\n")); twiCon.Write(strings.Bytes("\r\n")); twiReader := bufio.NewReader(twiCon); //データはもらったので後はウジウジするだけ。 var dTweets Tweets; for{ dString,dErr:= twiReader.ReadString('\n'); if dErr != nil{ if dErr.String() != "EOF"{ print("err"+dErr.String()); return; } //json.Unmarshalでjsonデータを構造体にブチこむ json.Unmarshal("{\"tweet\":"+dString+"}",&dTweets); break; } //ヘッダの情報はこのループで廃棄 } for _,tw:=range dTweets.Tweet {//表示 print("-"+tw.User.Screen_name+":\n "+tw.Text+"\n"); } twiCon.Close(); return; }
ではまた。