(O+P)ut

アウトプット



(O+P)ut

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

【Go言語/Twitter】引数の文字列をツイートするプログラム

スポンサーリンク

はじめに

TwitterAPIライブラリ「anaconda」を用いれば、Go言語(golang)が利用できる環境ではTwitterAPIを利用して簡単にツイートプログラムを作成可能です。

GitHub - ChimeraCoder/anaconda: A Go client library for the Twitter 1.1 API

本記事では、それらを実行する流れと注意点を簡単に説明しました。

コマンド実行環境
$ cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.6 (Maipo)"
$ arch
x86_64
$ /usr/local/go/bin/go version
go version go1.12.1 linux/386

ツイートをGo言語から行う

まずはTwitter developerに登録します。

その後は、ツイッターチームからの質疑に対応すれば以下メールが貰えました。

Thanks for applying for access. We’ve completed our review of your application, and are excited to share that your request has been approved.
Sign in to your developer account to get started.
Thanks for building on Twitter!

アプリを登録すれば以下の4つの値が発行されます。

  • consumer_key
  • consumer_secret
  • access_token
  • access_secret

この4つの文字列を利用すれば以下サンプルプログラム(test_tw.go)で動作します。

package main

import (
  "fmt"
  "anaconda"
  "log"
  "flag"
)

func main() {
  anaconda.SetConsumerKey(consumer_key)
  anaconda.SetConsumerSecret(consumer_secret)
  api := anaconda.NewTwitterApi(access_token, access_secret)
  flag.Parse()
  text := flag.Arg(0)
  tweet, err := api.PostTweet(text, nil)
  if(err != nil){
    log.Fatal(err)
  }
fmt.Println(tweet.Text)
}

実行コマンドは以下です。引数の文字列がツイート可能です。もちろんスペースにも対応しています。

# /usr/local/go/bin/go run test_tw.go "HelloWorld"
HelloWorld

ただし文字数が多すぎると以下のエラーになりました。

{"errors":[{"code":186,"message":"Tweet needs to be a bit shorter."}]}

ツイートに成功すれば、ツイッター上では以下のように表示され、
f:id:mtiit:20190526192142j:plain

tweetWithCygwin

の部分はTwitterDeveloperにて「App Name」欄に入れたものに置き換わります。

補足

今回はanacondaに関するファイルをローカルに持ってきています。
こちらは$GOROOT$GOPATHからのパス上に置く必要があるのでご注意ください。配置場所が違えば以下のようなエラーとなります。

test_tw.go:X:X: cannot find package "anaconda" in any of:
	/usr/local/go/src/anaconda (from $GOROOT)
	/root/go/src/anaconda (from $GOPATH)

またトークン名が間違えていれば以下のようにエラーとなります。

X/X/X X:X:X Get https://api.twitter.com/1.1/statuses/update.json returned status 401, {"errors":[{"code":32,"message":"Could not authenticate you."}]}
exit status 1

あとはプログラム中にあるfmt.Println(tweet.Text)を消してしまうと

tweet declared and not used

というエラーになります。ご注意ください。

終わりに

anacondaライブラリを利用すればシンプルなプログラムで自動ツイート機能を実装できるので、興味がある方は試してみてください。