こんにちは!なぎです。
みなさんはおはようございますがTwitterでとあるキャンペーンをやっていたことを覚えていますでしょうか?「前田売ってた」「Design売ってた」キャンペーンです。どういうキャンペーンかというと、各種CD売り場で我々おはようございますがリリースしたCDを写真に収めていただき、それをTwitterにハッシュタグ付きでツイートすると、おはようございます公式アカウントから特典動画が観られるYouTubeのリンクがDMで送られてくるというものでした。
実はこれ、手動ではなく完全自動で行っておりました。めっちゃ頑張れば手動でも対応できたかと思いますが、返信するのが遅れてしまったり漏れがあったりするとキャンペーンに参加していただいた人たちに悲しい思いをさせてしまう可能性があるため、24時間365日いつでもリアルタイムに返信できるようなプログラムを組みました。
今からそれの解説を行っていきますが、注意点が一つ。この記事には実際のプログラムは一切登場しません。最初はプログラムの内容を貼り付けて解説しようかと思ったのですが、あまりにもマニアックが過ぎたので、「こういう考えで作る」というニュアンスの側面だけを記していきます。
キャンペーンのつくりかた
なにをするのかを考える
何らかのプログラムを書こうと思うのは、自動化したいなにかがあるからですね。
なので、何を自動化すると嬉しいのかから考えていきます。これはキャンペーンの内容を考えれば導き出せますね。
- キャンペーンに参加した人が誰なのかを知りたい
- キャンペーンに参加した人に特典としてDMを送りたい
めちゃめちゃ単純化すると上記のようになるかと思います。ここから実際のロジックを組んでいき、それをプログラムに落とし込みます。
キャンペーンに参加した人が誰なのかを知りたい
これはあらかじめ特定のハッシュタグを設定します。このときに大事なのが、その決めたハッシュタグがキャンペーンに参加していない人が使うことが無いことを確認することです。ここで決めたハッシュタグが、例えば
とかだと最悪なわけです。リンクにしてあるのでクリックしていただければすぐにわかりますが、我々のキャンペーンの対象外のノイズがたくさんヒットしてしまいます。なので、設定するワードは先に検索しておいて、独自であることを確認しておきましょう。
また、キャンペーン参加の条件は「我々おはようございますのCDが売られている場所の写真を添付する」のが条件です。後述しますが、これは実際に我々のCDの写真が添付されているかを自動判定するのが相当難しいのである程度妥協を行う必要があると最初からわかっていました。
キャンペーンに参加した人に特典としてDMを送りたい
みなさんはTwitterをなんらかの他サービスと連携したことはありますか?結構有名なアプリケーションとかでバンバン連携しているかと思います。実は、Twitterと連携するアプリケーションは申請すればだれでも作ることができます。なので
「おはようございますのアカウントが、キャンペーンに参加してくれた人に自動でDMを送る」
というめちゃくちゃピンポイントなアプリケーションを作ることができます。なのでそれを作りました。申請のハードルはそんなに高くないので、みなさまもTwitterと連携するようなアプリケーションが作りたくなったらトライしてみましょう。
実際に設計してみるとこんな感じになる
情報が出揃ったので、何をするプログラムを作ればよいかが明確になりました。スタート地点をミスるとゴールにたどり着けないので、最初が肝心です。
プログラムは以下の順番で動けば大丈夫そうです。
- 特定のハッシュタグが本文に含まれている、画像付きのツイートを検索する
- No.1 を実施して検索したとき、前に検索した状況と比較して更新があるかを確認する
- 更新があった場合、そのツイート主のTwitterIDを取得する
- そのTwitterIDにおはようございます公式アカウントからDMを送信する
それでは一つずつ紐解いていきましょう
特定のハッシュタグが本文に含まれている、画像付きのツイートを検索する
「キャンペーンに参加してくれる」とはどういう状況なのかというと、「キャンペーンのフォーマットに則ったツイートをしてくれている」ということです。なので、Twitterで検索をかければそのツイートがヒットしますよね。独自のハッシュタグを用意しているのでノイズはヒットしません。
また、前述の通りキャンペーンには「我々おはようございますのCDが売り場で売られている写真」が必要です。これはAIとかを駆使すれば判定できたのでしょうけれど、特にそこまで頑張る気が起きなかったため、もうちょっと簡単にして「ツイートに画像が添付されている」かどうかのみを判断の対象にすることにしました。
Twitterには「高度な検索」という機能があるのですが、実はこれ以上に高度な検索が可能です。今回やりたかった「ツイートに画像が添付されている」もののみを検索することも可能だったりします。
人生においてやりたいことがある場合、それを実現するのに必要な労力が最小限になると嬉しいですよね。なので、僕はこういうときに死ぬほど必死で情報を調べます。
結果として、そういう機能があったのでとても助かりました。
前に検索した状況と比較して更新があるかを確認する
これはなかなかダルいロジックです。
まず、更新があるかどうかの差分を確認するには、前の検索時の結果がどうだったかを記録しておく必要があります。本来、今回のようにプログラムの結果を保存しておく必要がある場合はデータベースを使用します。データベースは、データをプログラムと連携しやすい形で保存しておける場所のことです。しかし、我々おはようございますが利用しているサーバー(プログラムが動く場所)は月100円の格安サービスなので、データベースを利用することができません。
では、どうするかというと、普通にテキストファイルに結果を書いてそれを保存しておきます。
リソースが足りなくてなにかができないと思ったら、思いっきり単純な方法を利用するのもなかなかイケてますので、人生において何かしら行き詰まったら一度検討してみるのも良いかと思います。
ツイート一つ一つは、Twitter全体で独自のIDを持ちます。このIDはTwitter全体でツイートされた順番の番号が記載されています。
例えば以下のツイート
例えばこのお寿司のツイートの番号を調べたい場合はURLを確認します
1541651140462317568ですね。
このようにIDが順番に割り振られています。
今回のケースで、保存しておくべき情報は検索にヒットしたツイートの中で一番新しかったもの一つだけとなります。このIDは順番に割り振られるため、新しいツイートほど数値が大きくなります。なのでこのID一行だけをテキストファイルに書いておけば、検索結果を「保存」したことになります。
次に検索するときは、保存したIDよりも数値的に大きければ、それらがまだDMを送っていない新しいツイートであるということになります。
更新があった場合、そのツイート主のTwitterIDを取得する
キャンペーン参加用のツイートさえ取得できてしまえば、あとは簡単です。
ツイートをしてくれたユーザーのTwitterIDを取得します。TwitterIDはDMを送ってしまえば不要になりますので、保存する必要はありません。
これがもし、同一ユーザーが複数回キャンペーンに参加するようなツイートを行った場合、DMを重複送信しないという設計になっていれば、データベースなどにユーザーのデータを保存しておく必要があります。今回は複数回でも送信するという方向性に決めたので、DMを送信するまでの間だけ一時的に情報を持っていればOKです。
そのTwitterIDにおはようございます公式アカウントからDMを送信する
これも単純な機能です。
あらかじめ本文を作成しておき、それを前の段階で取得したユーザーにDMで送信するだけです。ここに複雑なロジックはありません。
プログラムにはいちいち指示する必要がある
みなさまはプログラムの良い点をご存知でしょうか?
「プログラムは必ず命令した通りに動く」
点です。
また、プログラムの悪い点についてはご存知ですか?
「プログラムは必ず命令した通りに動く」
点です。
人間のようにニュアンスを伝えたらちょいちょい~っとやってくれることはなく、必ず一つ一つの動きを明確に定義しておく必要があります。今回のケースでは、おはようございますのキャンペーンに参加してくれた人たちにDMを送るという比較的単純なプログラムでしたが、それでもやはり「人間だったらこうする」という手順を、機械でもわかるレベルまで噛み砕く必要があります。
以上、おはようございますが行ったキャンペーンについての(技術的)解説でした。みなさんがインターネットで困ったことがあったら、もしかしたら僕が解決できるかもしれません。お気軽にお問い合わせください。
このブログではとてもめずらしい真面目な記事なんだ