ツイートするだけで T-Shirt が作れる仕組み
SUZURI API と Twitter API を用いて、画像をツイートしたら自動で T-Shirt が作れる仕組みを作っています。
その名も satma(Suzuri Api T-shirt MAker)!
勉強も兼ねて Go言語(以降 Golang)で書いてみました。
SUZURI の Tシャツ
SUZURI はオリジナルグッズを手軽に作成・販売できるサイトで、私も自分のクリエイティブ・コーディング作品で Tシャツを作ったことがあります。
オリジナルのグッズを 1個から安価に、しかもこんなに簡単に作れるなんて、本当に夢のようなサービスです。
先日 Tシャツが全品 1,000円オフ という目を疑う、気でも狂ったんじゃないかと思わざるを得ない、大盤振る舞い過ぎる「夏のTシャツセール」の発表があり、これを見て「Tシャツ(を作るシステム)作ろう!」と思ったのでした。
システムの概要
肝心の Tシャツ作成部分、SUZURI API だと画像をデータ URI か URL で与えればよいことになっています。
URL で渡せるのはありがたいですね! ツイート上の画像の URL がそのまま使えます。
処理の流れはこういう感じでいけそうです。
#Tshirt タグのツイートを取得
→タイトルと画像URLを抽出
→Tシャツ作成
→レスポンスからタイトルと商品ページURLを抽出
→処理結果としてツイート
ユースケースは、
今日も日課のお散歩、天気が良くて気持ちいい!
あ、近所のおばさん!こんにちは!ワンちゃんのお散歩ですか?わ~、わんちゃんいつもかわいいね、こちょこちょこちょ!
「ワンワンワン!」
わはぁ!そんなに抱きついてきたら、くすぐったいよ〜!ふふふ、わんちゃんまたね!さよなら!
さあ、お散歩の続き続き。わぁ!キレイなお花がいっぱい!キレイだなぁ!そうか、もうそんな季節なんだね。
そうか…… そう、あれは一年前のちょうど今頃……
と、そんなことは置いといて、このお花の写真を撮って、#Tshirt タグを付けてツイートすればっと。
しばらく待つと…ほら出来た!自分の撮った写真で Tシャツが自動で作れるの!
わーい!キレイなお花の Tシャツが簡単に出来たわ!
この Tシャツがあれば…
そう… この Tシャツを着ていれば… いつでもあの時のことを思い出せるの……
という感じです。
ツイートすれば、
Tシャツが作られて、結果がツイートで返ってくる!
作り方
構成
全体を一つのソースコードで実現するのは私の手に余るので、単機能毎に分けてパイプで繋いで全体を構成することにします。
echo "抽出キーワード" | ツイート抽出 | Tシャツ作成 | 出来た商品取得 | ツイート投稿
これをシェルスクリプトで書いて cron で定時起動するようにセットします。
起動の間隔をあまりにも短くすると API の利用規定にひっかかるかもしれません。逆にあまり長いとツイートしてから Tシャツ作られるまでの時間が長くなることになります。
最初はデーモン的に常駐するものをと考えていましたが、こちらも手に余りそうなのでやめときました。😅
前準備 Twitter API
後述のように Golang のライブラリを使ってアクセスするので、公式ドキュメントは基本見なくて済みます。
ライブラリのドキュメントでわからないところがあったら確認するぐらいです。
API 利用には4つのキーが必要になります。
Consumer_key
Consumer_secret
Access_token
Access_secret
キーの取得手順はこちらの記事を参考にさせていただきました。
前準備 SUZURI API
ドキュメントがしっかりしてるので、困ることはありませんでした。
curl を使った実行例が記載されていて、コマンドラインから簡単に実行して確認することができます。
例えば Activity のリスト取得はこういう具合
curl -H "Authorization: Bearer 自分のAPIキー" -n -X GET https://suzuri.jp/api/v1/activities
認証は簡便な「ユーザごとに付与されるAPIキー」を使用しました。上記例の「自分のAPIキー」がそれです。
つまり、ユーザは固定になります。
ユーザIDとパスワードを画面から入力することで誰でも使えるというスタイルは取りませんでした。今回の用途的にはこれで正解だと思います。
API キーは「アプリケーションの管理画面で確認ができます」とのことですが、このアプリケーションの管理画面には SUZURI Developer Center の「設定」リンクから行けます。
コード書くぞ!
学び始めた言語でいきなり書き始めても躓き躓きで前に進まないのは目に見えているので、まずは機能要素を洗い出し、ひとつずつ Golang でどう実現するのか試行錯誤しながら確認していきました。
✅Twitter API 利用のための認証、ツイートの取得、投稿
直接 API を叩くのではなく、Golang の anaconda というライブラリを使いました。
✅SUZURI API を利用しての Tシャツ作成、レスポンスの取得
✅JSON のエンコード、デコード
✅パイプを通した標準入力からの情報取得
✅ファイルからの Key 値の取得
それぞれの確認が終わったら、それらの要素を組み上げていけば全体を作ることが出来ます。
前述のとおり単機能毎に実行ファイルを分けてパイプで繋いでいく形にしたので、テストは楽になります。
テストの実行を下記のようにすれば、テストで何回も API 叩くのが忍びない場合でも心が痛まずに済みます。😀
cat 前段階の出力を収めたファイル | 今回テストしたい機能
そうやって出来たソースコードがこちらにございます。
まだまだやること沢山ある!
ひとまず動くものはできましたが、まだ条件が揃ったときだけ動くレベルで、
✅エラー処理ちゃんとしないと
✅変数名の付け方バラバラ
✅パッケージの構成はこれでいいのか?
✅ドキュメント書いてない
などなど、まだ全体の 3分の1もできてない状態だと思います。
機能的にも欠落あって
✅複数件のツイートに対応してない。最後のツイートだけ処理
「さっきのはやめてこっちにしたい」という場合に訂正が効くようになるからこれはこれでいいかも
✅処理済みのツイートを記憶していないので、何回も同じもの作りに行っちゃう
これはアカン!
というわけでまだ実用には耐えません。
Golang はロブ・パイク、ケン・トンプソンによって設計された言語という点にググっと来て使ってみました。
使ってみて、素直に書けば素直に動いてくれる感触があって Golang 好きになりました。
まだちょっとなぞってみましたレベルでしか書けてなくて、Golang ならこう書くとか、これぞ Golang 的なことを早く会得したいなと思います。
やることいっぱい!😀
この記事が面白かったらサポートしていただけませんか? ぜんざい好きな私に、ぜんざいをお腹いっぱい食べさせてほしい。あなたのことを想いながら食べるから、ぜんざいサポートお願いね 💕