LoginSignup
9
8

More than 5 years have passed since last update.

Go言語でTwitterAPIを使ってツイート検索

Last updated at Posted at 2018-12-09

APIのお勉強のためにTwitterAPIを使ってツイート検索をしてみた。
まずは、Standard searchからやってみる。

用意するもの

Consumer API keys
Access token
Access token secret

こちらを参照してください:https://ahiru8usagi.hatenablog.com/entry/TwitterAPI_KeyAndToken

ソースコード

まずはOAuth認証

main.go
    config := oauth1.NewConfig(consumerKey,  consumerSecret)
    token := oauth1.NewToken(token, tokenSecret)
    httpClient := config.Client(oauth1.NoContext, token)

これでAPIの機能を使うことができる。
早速ツイート検索の関数を書く。

main.go
//JSONオブジェクトについてはAPIリファレンスを参照してください
func search_tweet(client *http.Client)([]Tweet, error){

    values := url.Values{}//クエリの作成
    values.Add("q", "#golang")//検索ワード(これだけ必須)

    //リクエストの送信
    request, err := http.NewRequest("GET","https://api.twitter.com/1.1/search/tweets.json"+"?"+values.Encode(), nil)
    if err != nil {
        return  nil, err
    }

    //レスポンスの取得
    response, err := client.Do(request)
    if err != nil {
        return nil, err
    }

    b, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return nil, err
    }

    var result Result//検索結果のJSONオブジェクト
    json.Unmarshal(b, &result)
    response.Body.Close()

    return result.Statuses, nil//Tweetオブジェクトを返す
}

これでTweetオブジェクトが返ってくる。

コード全体

main.go
func search_tweet(client *http.Client)([]Tweet, error){

    values := url.Values{}
    values.Add("q", "#golang")


    request, err := http.NewRequest("GET","https://api.twitter.com/1.1/search/tweets.json"+"?"+values.Encode(), nil)
    if err != nil {
        return  nil, err
    }
    response, err := client.Do(request)
    if err != nil {
        return nil, err
    }

    b, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return nil, err
    }

    var result Search_response
    json.Unmarshal(b, &result)
    response.Body.Close()

    return result.Statuses, nil
}

func main(){
    config := oauth1.NewConfig(consumerKey,  consumerSecret)
    token := oauth1.NewToken(token, tokenSecret)
    httpClient := config.Client(oauth1.NoContext, token)

    result, err := search_tweet(httpClient)
    if err != nil{
        fmt.Println(err)
    }

    for _, tweet := range result{//デフォルトでは15個のTweetを拾ってくる
        fmt.Println("text:"+tweet.Text)//テキストの表示
    }
}

実行すると15個のツイートが表示される。

Standard searchでできることは限られていて、検索可能なツイートが1週間以内の物だけだったりする。(多分)無制限にツイートの検索ができるPremium search APIの無料バージョンがあるのでそっちのほうで現在開発(?)中。

今回TwitterAPIで使うJSONオブジェクトの説明を飛ばしましたが、下記のリンクにTwitterAPIのリファレンスが載っているのでそちらを参照してください。
https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets.html

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8