こんにちは、エンジニアインターンの南条です!
弊社では定期的にAirdropキャンペーンを実施しており、多くのユーザーの皆さんに参加していただいております。 今回はその中でもTwitterにシェアカードをツイートするだけで参加できる、Twitterシェアカードキャンペーンの技術的なお話をしたいと思います。
今回仕組みを説明していくにあたって、先日開催されたZilliqaシェアカードキャンペーンを例に進めていきたいと思います。
開発環境
- 開発言語
- python3
- 依存ライブラリ
- pyzbar
- pillow
- requests
- tweepy
- pandas
- google-cloud
- firebase_admin
- grpcio
Tweet収集
まず初めにTwitterSearchAPI[1]を用いて、ツイートを収集します。 この際の検索クエリ(条件)としましては「#Ginco #ZILLIQA filter:images」を指定して、「#Ginco」と「#ZILLIQA」のハッシュタグがついた画像付きのツイートを収集しています。 シェアカードキャンペーン対象ツイートをここで収集し、ひたすらキューにためていくという処理を行います。
for tweet in tweepy.Cursor(self.api.search, q=self.query).items():
if "media" in tweet.entities:
for media in tweet.entities["media"]:
app.q.append({"url": media['media_url_https'],
"time": int(tweet.created_at.timestamp())})
実際のツイート
仮想通貨ウォレットアプリGincoにてZILLIQAのAirdrop開催中!アプリをダウンロードしてシェアカードをツイートするだけなので是非!!#Ginco #ZILLIQA
— なんぞー (@nandehu0323) 2018年9月10日
ツイートのデータ
画像の処理
次に、該当ツイートに添付されている画像をダウンロード(download関数)し、QRコードが含まれている場合にデコード(decode関数)しシェアカードのアドレスを取得します。
ダウンロードした画像
デコード結果
0x4dF42276dea7c6C17cFBD7Be0fD014B32193B77E
データの加工
指定された時間内に収集されたデータをCSVファイルとして出力します。 出力する際にGincoユーザーであるかどうかの判定やアドレスのvalidationを行います。
送金処理
CSVファイルを元に順次送金を行っていきます。 一度Airdropを受け取ったユーザー宛てには再度送金しないように、履歴を保存しています。
最後に
アーキテクチャの全体はこのような感じになっています。
以前、TwitterでTipBotを作っていたこともあり、それの応用で今回のAirdropツールを作成しました。 今後はもっと多くのユーザーの皆様に参加していただけるよう、安定性の向上や負荷分散などをしてレベルアップさせていこうと考えています!
GincoではこのようなTwitterシェアカードキャンペーンの他、さまざまなAirdropを実施中ですので、ぜひまだインストールされていない方はこちらからどうぞ!
Gincoをダウンロード
今後のAirdropのスケジュールについてはこちらをご覧ください!
Airdropスケジュール
参考文献
- [1]https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets.html