twitter関連のプログラムをGoで書くのがはやっているので。

twitter関連のプログラムをGolangで書くのがはやってますね。
そういうわけで、我輩もやってみました編です。

…遅いですが。

  • -

とりあえず、今回ごにょごにょやってて気になった点いくつか。

まず、最近のGolangの仕様変更で、一部の関数がなくなっています。
とりあえず私が気づいた範囲では以下のとおり。

  • json.StringToJson
  • json.JsonToString
  • io.ReadFileなどファイル関係

以上の三つが、それぞれ

  • 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;
}

ではまた。