(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Go言語】引数の文字列をTwitter検索するプログラム

スポンサーリンク

はじめに

TwitterAPIライブラリ「anaconda」を用いて、Go言語(golang)からツイート検索を行います。

尚、TwetterAPIの取得やanacondaライブラリの利用に関しては過去記事を参考ください。

コマンド実行環境
$ go version
go version go1.12.9 linux/amd64

ツイートをGo言語から取得する

anaconndaのSearchResponse型に情報を格納します。

具体的な格納法はapi.GetSerach("検索したい文字列",value)です。value部分には検索時のオプションが指定でき、今回はツイート取得数のみを指定しました。

v := url.Values{}
v.Set("count","5")

それらの検索結果を格納し

searchResult, _ := api.GetSearch(text, v)

以下でそれぞれのツイートを抜き出し

for i, tweet := range searchResult.Statuses

ツイート本文のみを表示します。

fmt.Println(tweet.FullText)

以下はサンプルコード全体です。

package main

import (
"fmt"
"anaconda"
"net/url"
"flag"
)

func main() {

anaconda.SetConsumerKey(consumer_key)
anaconda.SetConsumerSecret(consumer_secret)
api := anaconda.NewTwitterApi(access_token, access_secret)
flag.Parse()
text := flag.Arg(0)
v := url.Values{}
v.Set("count","5")
searchResult, _ := api.GetSearch(text, v)

for i, tweet := range searchResult.Statuses {
 fmt.Println(i,":",tweet.FullText)
 }
}


引数である検索文字列を「golang」とした際の実行方法および実行結果は下記のようになります。

$ go run twitter_search.go golang
0 : RT @slayyywthwanaa: @glsxy_09 golang sis basta dm mo lang ako :))
1 : “API GatewayとLambdaとGolangで作るサムネイル生成システム - ランサーズ(Lancers)エンジニアブログ” (1 user) https://t.co/j8v2RM7zhk
2 : @glsxy_09 golang sis basta dm mo lang ako :))
3 : API GatewayとLambdaとGolangで作るサムネイル生成システム | ランサーズ(Lancers)エンジニアブログ https://t.co/DzEuqu0rLS
4 : RT @gp_pulipaka: Python Climbing Most Popular #Programming Languages List. #BigData #Analytics #DataScience #AI #MachineLearning #IoT #IIoT…

以下、補足です。

補足

格納した検索結果ですが

searchResult, _ := api.GetSearch("golang", v)

そのままsearchResult.Statusesを出力すると

[{[] <nil> Mon Aug 26 04:39:34 +0000 2019 [0 65] {[] [] {[]} [{0926.?    [3 18] slayyywthwanaa 1150278681203318784 1150278681203318784} {negs?? [20 29] glsxy_09 1116339902092730368 1116339902092730368}] []} {[] [] {[]} [] []} { [] {[] [] {[]} [] []} {[] [] {[]} [] []}} 0 false  RT @slayyywthwanaa: @glsxy_09 golang sis basta dm mo lang ako :)) false 1165846221107253248 1165846221107253248  0  0  false tl {map[] {[] } []    {[] }    [] } 0  <nil> false false 1 false 0xc00006a300 <a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a> map[] RT @slayyywthwanaa: @glsxy_09 golang sis basta dm mo lang ako :)) {false Thu Apr 11 13:59:08 +0000 2019 true false   {[] [] {[]} [] []} 3067 false 214 false 196 false true 1116339902092730368 1116339902092730368 false false  0 Drei negs?? false F5F8FA   false https://pbs.twimg.com/profile_banners/1116339902092730368/1566784088 http://pbs.twimg.com/profile_images/1165803054714605568/OGGSN3HM_normal.jpg https://pbs.twimg.com/profile_images/1165803054714605568/OGGSN3HM_normal.jpg 1DA1F2 C0DEED DDEEF6 333333 true false glsxy_09 false <nil> 13575   0 false [] } false

上記のようにプロフィール含めた情報として出力されます。

ちなみにGetSearchの結果は以下形式で格納されているのでそのまま出力すると「Statuses」と「Metadata」が表示されます。

type SearchResponse struct {
        Statuses []Tweet        `json:"statuses"`
        Metadata SearchMetadata `json:"search_metadata"`
}

また、今回はTweetの本文のみを取得するためFullTextを指定していますが例えばUser.Nameを指定すればユーザー名が取得できます。

終わりに

anacondaライブラリを利用したツイッターでの情報取得です。
Statuses []Tweet箇所にかなり大量の情報が格納されているので、使いようによっては色々な応用ができそうです。

以上、ご参考になれば幸いです。