【2020年9月最新】Go言語でTwitter自動投稿アプリを作る4-実装編

Go

ブログに足を運んでいただきありがとうございます。

前回は、「【2020年9月最新】Go言語でTwitter自動投稿アプリを作る4-anaconda導入」を紹介しました!

前回に引き続き、Go言語を使ってアプリを作っていきたいと思います。

今回は、Twitterに投稿出来るようにしてみましょう!

機能の実装

早速、機能を実装していきましょう!

今回は、下記のフォルダ構成でファイルを分割せずにやっていきます。

tweetbot/
|── main.go

本来であれば機能ごとにファイルを分けてコードを見やすくしますが、皆さんが実際にやる時にimportなどでエラーが出て挫折してほしくないので・・・

まず、ツイート内容を格納するリストを用意しましょう。

あくまでお試しなので、6個ぐらいツイート内容を書いてみてください。

私は面倒だったので、test1~6にしてます笑

main.go
//Tweet内容
TweetarrayList := [6]string{
“test1”,
“test2”,
“test3”,
“test4”,
“test5”,
“test6”,
}

次に、先ほど作ったリストの中からランダムにツイートの内容を選べるようにしてみましょう。

Go言語で使われる乱数作成についてです。

最初に知る乱数の作り方が「rand.Intn(10)」というのをよく見たことがあると思います。

これは0~9までの数字の中でランダムに数字が選択されるのですが、1回目、2回目・・・と試行回数を増やしても同じ結果になってしまうのです。

例えばこんな感じ。
1回目・・・4,3,5,7,8…
2回目・・・4,3,5,7,8…
3回目・・・4,3,5,7,8…


n回目・・・4,3,5,7,8…

このようになる理由は、Seedというものが指定されないとなからず「1」が設定されてしまうからです。

乱数と言いながら同じものを設定しているのであれば、同じ結果になってしまいますよね。

異なる結果にするためには、Seedというものをランダムなものに変更すれば解決できます。

今回は、Seedに「time.Now().UnixNano()」を設定して乱数を作成しています。

time.Now().UnixNano()は現在時間のナノ秒までを取得し、Seedに指定しています。

あとはそのランダムで取得したツイートをTextという変数に代入しています。

main.go
//乱数作成
//rand.Seedは固定値1のため、毎回同じ乱数になってしまう
//rand.Seed(1)の1を現在時間を使って数値を変更することで同じ結果にならなくて済むrand.Seed(time.Now().UnixNano())
text := TweetarrayList[rand.Intn(6)]

次にAPIの設定をしていきましょう!

このAPIの部分だけ唯一関数を作成しています。

main.go
func GetTwitterApi() *anaconda.TwitterApi {
anaconda.SetConsumerKey(“your-access-token”)
anaconda.SetConsumerSecret(“your-access-token-secret”)
api := anaconda.NewTwitterApi(“your-access-token-secret”, “your-consumer-secret”)
return api
}

あとは、作成したAPIの関数を呼び出すこととツイートを投稿だけなのでまとめていきましょう!

まず関数GetTwitterApi()を呼び出して、apiの中に値を詰めます。

「api.PostTweet」を使うことでツイートができるみたいです。

main.go
//get api
api := key.GetTwitterAPI()tweet, err := api.PostTweet(text, nil)
if err != nil {
panic(err)
}

これでプログラムは完成なので実行してみましょう。

見事にエラーが返ってきました。

「Read-only application cannot POST.」と書いてあるので、読み取り専用のアプリケーションではPOST送信できないということになります。

これはTwitterAPIのアカウントを作成した際に、読み取り専用にしてしまったのが原因見たいです。

エラー対処方法(TwitterAPI)

Twitter Developersへアクセスしてください。

Developers potalにアクセス出来たら、Project1の「App permissions」を見ましょう。

変更してしまっていますが、変更前は以下のように「Read only」なっていました。

Editボタンをクリックし、「Read and Write」に変更しましょう。

変更出来たら、認証用のトークンを再生成して実行してみてください。

もしかしたらトークンの反映に時間がかかるかもしれません。

まとめ

今回は機能の実装から実際にツイートまでについてまとめました。

Tweetbotに関してはこの記事で終わりますが、出来ることはたくさんあるので機能の追加など試してみてくださいね!

少しずつでいいので自分のペースでやってみてくださいね!

質問なありましたらTwitterやInstagramで、メッセージ送ってくださると助かります。

タイトルとURLをコピーしました