Twitter bot作成とかで検索するとPHPを使ったのが多く、情報多いしPHPでやったほうがいいと思う
「Goの勉強してるし、きっと誰かPHPでできること作ってるよね」という気持ちで始めたところ、githubで「go-twitter」というものを見つけたので使ってみた
ありがたや
Appの認証に『oauth1』(https://github.com/dghubble/oauth1)
APIへの通信に『go-twitter』(https://github.com/dghubble/go-twitter)
を使った
目次
つくろう
以下の2つをおこなう
「Twitter App の登録」
「Goのプログラム作成」
Goはコンパイルするやつだから多分スクリプトとは言わないんじゃないかな(適当
Twitter App の登録
プログラムでツイートするためには「Twitter Application Management」で自分のAppを登録する
このページを参考にした:https://webkaru.net/php/twitter-bot/
Appを登録したら「Keys and Access Tokens」のタブを開き、
プログラムで使う以下の4つを見つけてメモしておく
・Consumer Key
・Consumer Secret
・Access Token
・Access Token Secret
Goのプログラム作成
いきなりソース書くマン(おことわり)
ただ単に文章をツイートするだけなら以下のようになった
package main
import (
"log"
"github.com/dghubble/go-twitter/twitter"
"github.com/dghubble/oauth1"
)
func main() {
consumerKey := "Consumer Key"
consumerSecret := "Consumer Secret"
accessToken := "Access Token"
accessSecret := "Access Token Secret"
config := oauth1.NewConfig(consumerKey, consumerSecret)
token := oauth1.NewToken(accessToken, accessSecret)
httpClient := config.Client(oauth1.NoContext, token)
client := twitter.NewClient(httpClient)
txt := "ツイートする本文"
//tweet, res, err := client.Statuses.Update("ツイートする本文", nil)
t, r, e := client.Statuses.Update(txt, nil)
if e != nil {
log.Println("err", e)
}
// ツイート情報とhttpレスポンス
log.Println("tweet", r)
log.Println("res", r)
}
画像つきツイートもやってみよう+言い訳
この記事を書いてるときの私
・画像つきツイートは「go-twitter」が楽だ
・画像のアップロードは「anaconda」が楽だ
Go言語でTwitterをするなら「anaconda」のほうが知られてるらしい(今更)
「anaconda」で画像を複数付けてツイートの方法少し調べたがよくわからない
「go-twitter」の方はそれが簡単だった
「go-twitter」は画像のアップロード方法がよくわからない
「anaconda」は画像のアップロードが簡単だった
そこで「方法探すの面倒だから、画像アップロードはanaconda、ツイートはgo-twitterでいいや」となっている
ということで画像つきツイートの話
・画像アップロードを「anaconda」でやる
・mediaのIDを使って画像つきツイートを「go-twitter」でやる
なお、「それぞれのプログラムが単体で動いたほうが理解しやすいのでは?」という個人的な感覚で書き分けてる
画像アップロードを「anaconda」でやる
アップロードしてmediaのidを受け取るだけ
package main
import (
"log"
"github.com/ChimeraCoder/anaconda"
)
func main() {
consumerKey := "Consumer Key"
consumerSecret := "Consumer Secret"
accessToken := "Access Token"
accessSecret := "Access Token Secret"
api := anaconda.NewTwitterApiWithCredentials(accessToken, accessSecret, consumerKey, consumerSecret)
media, err := api.UploadMedia("画像をbase64に変換したコードをここに書く")
if err != nil {
log.Fatal(err)
}
// レスポンス全体
// log.Println(media)
// 画像のmedia id、typeは int64
log.Println(media.MediaID)
}
mediaのIDを使って画像つきツイートを「go-twitter」でやる
画像なしツイートとほぼ同じ
package main
import (
"log"
"github.com/dghubble/go-twitter/twitter"
"github.com/dghubble/oauth1"
)
func main() {
consumerKey := "Consumer Key"
consumerSecret := "Consumer Secret"
accessToken := "Access Token"
accessSecret := "Access Token Secret"
config := oauth1.NewConfig(consumerKey, consumerSecret)
token := oauth1.NewToken(accessToken, accessSecret)
httpClient := config.Client(oauth1.NoContext, token)
client := twitter.NewClient(httpClient)
txt := "ツイートする本文"
imgIDs := []int64{
"ここにmedia idを書く",
"ここにmedia idを書く 複数可",
}
params := &twitter.StatusUpdateParams{
MediaIds: imgIDs, // MediaIDで画像を投稿
}
t, r, e := client.Statuses.Update(txt, params)
if e != nil {
log.Println("err", e)
}
log.Println("tweet", r)
log.Println("res", r)
}
とりあえずおわり
ほんとは「go-twitter」か「anaconda」の片方だけで済ませたい
もしも解決したら更新しよう
記述量が増えると「どっかで書き損じがあるんじゃなかろうかー」という気持ちが芽生える
‘ω’)ノシ

















anacondaでの複数画像ツイート
url.Values(media_ids)に、media_idをカンマ区切りにしたstringをセットすれば出来ますよ
ありがとうございます!
最近ちょっとプログラミングから離れててすぐに確認できませんが、次やるときに参考にします!