読者です 読者をやめる 読者になる 読者になる

【Go】Twitter Search APIを使ってみる

Go

はじめに

やりたいことはキーワードでtwitterの投稿を取得してくるだけ

ちょっとだけプログラムいじった箇所は以下
・1回で取得できる件数の上限(100件)が決まっているので複数回取得するようにする
タイムゾーンJST

パッケージ

今回使ったパッケージは以下なのでgo getしておく

github.com/dghubble/go-twitter/twitter
github.com/dghubble/oauth1

実装

package main

import (
  "fmt"
  "os"
  "time"

  "github.com/dghubble/go-twitter/twitter"
  "github.com/dghubble/oauth1"
)

const(
  CONSUMER_KEY string = "xxxxx"
  CONSUMER_SECRET string = "xxxxx"
  ACCESS_TOKEN string = "xxxxx"
  ACCESS_SECRET string = "xxxxx"
)

func main() {
  config := oauth1.NewConfig(CONSUMER_KEY, CONSUMER_SECRET)
  token := oauth1.NewToken(ACCESS_TOKEN, ACCESS_SECRET)
  httpClient := config.Client(oauth1.NoContext, token)
  client := twitter.NewClient(httpClient)

  // 検索キーワード                                                                                                                                                                                                
  keyword := "キーワード"

  // xxx回リクエストしてまとめる                                                                                                                                                                                   
  tweets := []twitter.Tweet{}
  var min_id int64

  for i := 0; i < 3; i++ {
    search, _, err := client.Search.Tweets(&twitter.SearchTweetParams{
      Query: keyword,
      Count: 100,
      MaxID: min_id - 1,
    })
    if err != nil {
      Error(err)
    }
    for j := 0; j < len(search.Statuses); j++ {
      tweets = append(tweets, search.Statuses[j])
        if min_id == 0 || search.Statuses[j].ID < min_id {
          min_id = search.Statuses[j].ID
        }
    }
  }

  // データを整形して表示
  jst := time.FixedZone("Asia/Tokyo", 9*60*60)
  for i := 0; i < len(tweets); i++ {
    // タイムゾーンをJSTに
    t, _ := time.Parse(time.RubyDate, tweets[i].CreatedAt)
    t = t.In(jst)
    fmt.Printf("%s\t%s\t%s\n",tweets[i].IDStr,t,tweets[i].Text)
  }
}

func Error(err interface{}) {
  fmt.Println(err)
  os.Exit(1)
}

練習としてちょうどよかったかも。以上です