(O+P)ut

アウトプット



(O+P)ut

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

【Go言語/Twitter】anacondaを利用して画像付きツイートをするプログラム

スポンサーリンク

はじめに

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

本記事では、テキスト共に画像を付与する流れについて説明します。

コマンド実行環境
# uname -a
Linux instance-1 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u5 (2019-08-11) x86_64 GNU/Linux
$ /usr/local/go/bin/go version
go version go1.12.9 linux/amd64

画像を文字列に変換する

base64コマンドを用いて画像を文字列に変換します。

# which base64
/usr/bin/base64

今回は以下のような画像をローカルに配置して

# file test.jpg
test.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=11, manufacturer=Apple, model=iPad Pro (11-inch), orientation=upper-left, xresolution=172, yresolution=180, resolutionunit=2, software=14.0, datetime=xx, GPS-Data], baseline, precision 8, 122x91, frames 3

以下でテキスト化。パイプで改行をなくして一行の文字列にしています。

# base64 test.jpg |  awk 'BEGIN{ORS=""}{print $0}' > test.txt

ちなみにファイルサイズは以下で微増していました。

..     13825 .. test.jpg
..     18436 .. test.txt

画像をツイートするGoプログラム

package main

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

func main() {
...
anaconda.SetConsumerKey(consumer_key)
anaconda.SetConsumerSecret(consumer_secret)
api := anaconda.NewTwitterApi(access_token, access_secret)
flag.Parse()
text := flag.Arg(0)
var base64String="/9j/4AAQSk...LT09DojFy1Z//2Q=="
media, _ := api.UploadMedia(base64String)
v := url.Values{}
v.Add("media_ids", media.MediaIDString)
tweet, err := api.PostTweet(text, v)
if(err != nil){
log.Fatal(err)
}
fmt.Println(tweet.Text)
}

...の部分でconsumer_key&consumer_secret&access_token&access_secretに値を格納し、base64Stringに先程の文字列を淹れます。

このプログラムを以下のように実行すると

# go run test.go test

以下が標準出力に表示されて

test https://t.co/xx

ツイッター上で画像付きツイートが投稿されています。

終わりに

base64で画像をエンコードする必要はありますが、それさえしてしまえばテキスト同様に気軽に画像を投稿するBOTを作成できます。

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