キーワードを指定してTwitterに流れてくるメッセージをSlackに流すGo言語Bot
8569 ワード
自社サービスについてのTweetがあったらSlackに通知するというBotを、anacondaというライブラリを使って作成します。
エゴサーチがとっても捗るのでオススメです。
Create New App
Application Managementからアプリケーション追加を行い、以下の認証情報を入手します。
- Consumer Key
- Consumer Secret
- Access Token
- Access Token Secret
ソースコード
認証情報を使って、以下のように実装します。
twitter_search.go
package main
import(
"github.com/ChimeraCoder/anaconda"
"net/http"
"net/url"
"fmt"
"bytes"
"os"
)
func main() {
/* 第二引数に検索キーワード(track)を指定 */
if len(os.Args) != 2 {
fmt.Print("track not specified!\n")
os.Exit(1)
}
var track string = os.Args[1]
/* 認証情報を設定 */
anaconda.SetConsumerKey("REPLACE_WITH_CONSUMER_KEY")
anaconda.SetConsumerSecret("REPLACE_WITH_CONSUMER_SECRET")
api := anaconda.NewTwitterApi("REPLACE_WITH_ACCESS_TOKEN", "REPLACE_WITH_ACCESS_TOKEN_SECRET")
/* フィルタリング条件を指定してstreamを取得 */
v := url.Values{}
v.Set("track", track)
twitterStream := api.PublicStreamFilter(v)
/* streamから入力があり次第処理 */
for {
x := <-twitterStream.C
switch tweet := x.(type) {
case anaconda.Tweet:
/* Tweetの場合はSlackに通知(webhookのURIに対してPOST) */
jsonStr := `{"text":"https://twitter.com/` + tweet.User.ScreenName + `/status/` + tweet.IdStr + `/","icon_url":"` + tweet.User.ProfileImageUrlHttps + `","username":"` + tweet.User.Name + `"}`
req, _ := http.NewRequest(
"POST",
"https://hooks.slack.com/services/REPLACE_WITH_WEBHOOK_URI",
bytes.NewBuffer([]byte(jsonStr)),
)
req.Header.Set("Content-Type", "application/json")
/* POST実行 */
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Print(err)
}
defer resp.Body.Close()
case anaconda.StatusDeletionNotice:
// pass
default:
fmt.Printf("unknown type(%T) : %v \n", x, x)
}
}
}
anacondaはgo getする必要があります。
$ go get github.com/ChimeraCoder/anaconda
実行
hello等のよくTweetされそうな単語で実行すると検証しやすいです。
$ go run twitter_search.go '検索キーワード'
参考URL
Author And Source
この問題について(キーワードを指定してTwitterに流れてくるメッセージをSlackに流すGo言語Bot), 我々は、より多くの情報をここで見つけました https://qiita.com/sakusrai/items/43588fcf8626e5671bb3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .