すぐ消すbotとは
- 敵を知るためにどう悪用されたか再現してみよう。
すぐ消すbotの運用推定
- Twitter APIを利用し、特定語句(すぐ消す filter:images/すぐ消す filter:videos)をCronで一定間隔で検索、収集して画像や動画をご紹介していたらしい。
- 1度イナゴが増え過ぎたのかアカウントを消した後にファンサービス機能が搭載されたらしい。
- 凍結直前には追撃ファンサービスシステムとして実際にツイートを消した人のツイートを検索しご紹介する機能も搭載されたらしい。
作成方法
準備段階
-
Twitterアカウントの開設
- 流石に解説しない
-
- DeepLでも使ってなるべく「長く冗長にまどろっこしい表現」を翻訳すると一発で申請が通ることが多い、どうやら文字数が多くスパム的な連続文字が無ければ自動承認される模様、これをSetting.iniに書く。
-
Cronで動かすために適当な貸しサーバーを借りる、GCPとOracle Cloudは貧弱であるが永久無料である。
-
リポジトリのクローンと関連ライブラリのインストール
- ファンサービスにはヘッドレスChromeを利用しているので、これも環境に合わせていれる、Debianでのコマンド例はREAD.mdに記載済み。
git clone https://github.com/dialoguedaisuki/DigitalTattooTwitterMedia.git
pip install tweepy twitter configparser selenium Pillow
DigitalTattooTwitterMediaの解説
- csvはenvNameによって異なるので環境に合わせて
touch/new-item
する。
フォルダ構造
DigitalTattooTwitterMedia
| .gitignore #キャッシュファイルとクレデンシャルは除外
| args.py #引数関連のモジュール
| delTweetUserSearchQuoteService.py #追撃ファンサービス
| fanScreenShot.py #ファンサービスコアモジュール
| fanService.py #ファンサービス対象検索モジュール
| LICENSE #MITライセンス
| README.md #使い方
| replyAndQTService.py #リプライと引用RTした人をファンサービスする
| rePostImeges.py #画像のご紹介
| rePostVideos.py #動画のご紹介
| setting.ini #Twitter APIのキー
| $[envName]_del_tweeted_fans.csv #追撃ファンサービスで使用
| $[envName]_faned.cs #ファンサービスで使用
| $[envName]_quotedIds.csv #replyAndQTServiceで使用
| $[envName]_tweeted.csv #ご紹介済みツイートを記録
| $[envName]_tweeted_movie.csv #ご紹介済み動画を記録
| $[envName]_user_id_tweeted.csv #ご紹介済みユーザを記録(画像)
| $[envName]_user_id_tweeted_movie.csv #ご紹介済みユーザを記録(動画)
| tweetUtil.py #モジュール類
\---csv
日次で吐かれる処理済みユーザーのcsv
####画像のご紹介
- 既に投稿したID、既に投稿したユーザー、自分、フォロワーのIDを検索結果から除外してご紹介している。これで荒らし防止になるし、既に投稿したユーザーを一定期間でクリアしても良い。
- 日次で貯めたcsvは追撃ファンサービスにて使用する。
- また、ご紹介後にブロックすることで、引用RTの通知を抑制している(ご紹介者とwin-winの関係)
python rePostImeges.py -w '$SearchWord' -e '$EnvName'
####動画のご紹介
- 動画は帯域課金が結構大きい、馬鹿の動画を転載するのだから、Oracle Cloudなど回線があまり強くないが、ネットワークが無料のところでやると良いかもしれない(私が試験したGCPだと月100円いかない程度)
python rePostVideos.py -w '$SearchWord' -e '$EnvName'
####ファンサービス
- コアモジュールは、スクリーンネームを元にスクショ4枚撮影し、トリミングし、ByteIO型で返す。
- トリミングのサイズは環境によって異なるかもしれないのでcropを変更しないと切れる可能性がある 。
- fanServiceでは2回検索して、ファンを特定している、1回目の検索は「すぐ消す」等のワードを2回以上連投している(=荒らし)を特定し、2回目の検索は任意に設定できる語句
$fanWord
を検索している、例えば悪用者は「すぐ消すbot」等明らかにこちらを意識しているファンをご紹介していた。 - ファンリストの作成は、リストを作成して、PythonインタプリタでIDを出すといい。
python fanService.py -w '$SearchWord' -e '$EnvName' -l '$ListSlugId'
####追撃ファンサービス
- いわゆる日次で出力したcsvに対しての日次処理であり、大量の検索をAPI上限を超えて検索するので、時々タイムアウトしたりして不安定な感じがある。
- 再現環境で使用したクエリは
"鍵 AND 引 OR リツ OR 率 OR RT"
- 再現環境で使用したクエリは
python delTweetUserSearchQuoteService.py -e '$EnvName'
- ただ大量のデータを処理するので、こういうことをしても面白いかもしれない。
def statsTweet(noDelTw, delTw) -> int:
sumTw = noDelTw + delTw
noDelPer = noDelTw / sumTw * 100
delPer = delTw / sumTw * 100
tw = f'本日の統計\n\n消されていないツイート:{noDelPer:.2f}%\n消されたツイート:{delPer:.2f}%\n#す消B統計'
return tw
####リプライ、引用RTに対してのファンサービス
- 自分に対しての引用RTはTwitterの仕様でIDに記号が入ってると検索APIから取得できないので注意。
python replyAndQTService.py -e '$EnvName'
Cronでの運用
- こんなシェルを作って画像と動画なら
*/10 * * * *
、ファンサービス系は*/30 * * * *
程度で動かせば十分再現可能かと思われる。
#!/bin/sh
echo "envName=" $1
echo "listId=" $2
mkdir -p ~/log/$1
python3 ~/rePostImeges.py -e $1 -w "すぐ消す filter:images" 2>&1 | tee ~/log/$1/`date "+%Y%m%d_%H%M%S"`.image.log
##再現してみて