人生構文エラー

考え事の整理用 、備忘録

Twitter懸賞にbotで挑んでみる:作り方

コードそのものは初学者の恥ずかしい出来なので方針だけ追って紹介していきます
機能は追加する度に更新していきます

f:id:com0806:20170610234033p:plain


前回の記事
cmpt.hateblo.jp

環境

今回はこちらを使用
Python3
python-twitter
raspberry pi3

twythonとかtweepyとかもあるけどなんとなく一番簡単そうなpython-twitterを使ってる
本当はツイートする関数を見比べてみてPostUpdateって名前が一番しっくり来たからだけど

cmpt.hateblo.jp

botにさせること

懸賞ツイートを検索し、リツイート&フォロー

色々な検索演算子を利用して懸賞ツイートだけを探しとる

以下はその代表例

OR
言わずもがなツイートには様々な同意義別表現のものが存在する
ORを使えばある程度は検索の正確性が向上する
たとえば「プレゼント OR 抽選 OR 応募」など

min_retweets:
これを5くらいに設定するだけでゴッソリ非公式リツイートやパクツイを除ける
元ツイートは必ずリツイート数が多くなっているはずなので、これで1発でオリジナルを探せるのだ

-source:
アフィリエイトbotを除くために使用
特にtwittbot.net、Bufferなどを多く見かける印象
最初アフィリエイトのしつこさにブチキレそうであったが、これを使うと手動でせっせとDMを送ってくる努力家だけが残るので、見てて涙が出てくる
要するに精神衛生上必要

-filter:
リプライやリツイートを除くのに使用
実はmin_retweetsを使えば実質必要ないことが分かったので今は外した

これらを使って懸賞ツイートだけを汲み取る。何回か改良していくうちかなり広範囲に正確に検索できるようになってきたけど、まだいろいろ課題は多い

あとは検索結果がリストで返ってくるので、forで回して適当にリツイートしてフォローするだけ
いたって単純

ちなみに、StreamingAPIの利用も検討したけど、検索演算子が使えなかったので断念
普通に考えて投稿した直後にキャッチするStreamingだとスパムを弾けない

フォローしてから日数が経ったユーザーのフォローを解除

ツイッターには凍結の基準の1つとしてフォロー数がある
以下は公式の引用

過剰なフォローとフォローチャーンについてのルールがそのまま適用されます。また、すべてのアカウントは合計5,000件までのアカウントをフォローできますが、フォロー数が5,000件に達した時点でフォローできる追加のアカウント数に制限がかかります。この制限はアカウントごとに異なり、フォロワー数とフォロー数の比率に基づきます。

support.twitter.com

つまりフォローしたっきり放置しているとあっというまにこの制限を超え、凍結させられかねない。必要なくなったアカウントのフォローは適宜外していく必要がある

といってもこれは結構簡単だった。リツイートの際にログファイルにユーザーidとフォローした日時を記録していき、それを読み取って辞書に保存。フォローしてから31日以上経っていればフォローを解除、という感じにした
辞書を使うのが大変有効で、すでに追加されているものは上書きされるようになっているので、複数回フォローをしても必ず最新の日数を取得できるようになった。これによって、最初のフォローから31日経ってるけどつい最近またリツイートしたアカウントのフォロー解除を回避できる

ちなみに凍結基準にはフォロー、フォロワーの比率が重要らしいので鬼ったーなどを使ってフォロワーを増やしていくこと考えたが、大体はDMを送信するためにフォローしてくるので必要なかった。アクセストークンを再生成して実質的に連携を解除した

普通のツイート

僕の主観かもしれないがあまり懸賞専用アカウントというものは万人に好まれるものではない。人によっては乞食に見えるからだ。コンビニでポイントをコツコツ貯める人を、カードを持たない人が、完全に損をしているのは自分であるにもかかわらず優越感に浸るために毛嫌いする心理に近いんじゃないかと思う

あと企業的には懸賞アカウントなんかに当選ツイートをさせてもまったく広告にならない

そういう訳で懸賞だけのアカウントでない感じを若干加えるために普通のツイートも多少混ぜる
とりあえず暫定的に適当に検索してパクツイさせる形を取ったが、なんの脈絡もない発言があったりして変に思われるんじゃないかとたまに心配になるが、ツイッターって結構ツイートに一貫性がない人が多いので多分大丈夫だろう。あれは空リプだよ空リプ

他に付けた機能

「ゆらぎ」

ゆらぎ機能、というものを聞いたことはあるだろうか。連続した動作によって凍結されるのを回避するために1つ1つの動作にウェイトを挟む必要があるが、これが決まった時間だと自動化がバレるのである程度のランダム性を与えておく、というもの

乱数を生成するモジュールがあるのでとくに作成には苦労しない

IFTTTとの連携

予期せぬエラーで動作しなくなった時すぐに通知が来るように、いくつかのtry-except文でIFTTTのMakerにリクエストを送る機能を付けた。リクエストが届くとメールで通知が来るようになっている

初めて凍結されたあと、なぜか生成したはずのアクセストークンがAPIを叩く度に消滅するという事態(3回くらい)に襲われたのがきっかけ。今のところエラーもなくメールが来たことはないが、いつでも通知してくれるのは安心だ

ブラックリスト

なぜか公式のブロック機能をAPIの検索とリツイートが貫通してしまいまったく意味を成さなかったので自分で用意することにした
ツイート数30未満の新規アカウントを自動で追加するようにしてある
これを実装して以来アフィリエイトDMはほぼ来なくなったので連中は凍結→生成を繰り返しているのだろうか
ブラックリストはテキストファイルなので手動でも追加できて便利

DMはさすがに手動

f:id:com0806:20170610234539p:plain
このbotで唯一作業が必要なのがDMの対応だ

5回に4回はメルマガアフィリのDMなので、信頼できるかどうか吟味して適当に流してやる必要がある

以下ホワイトリスト

  • @tenntekomaidesu

メルマガ登録したら即ブロックされたアカウントもあった。まあ架空のアドレスだからいいんだけど

余談

ツイッターでのアフィリエイトのために自動化のための有償無償いろいろなツールがあるけど、python-twitterで遊んでるうちにそれらのほとんどの機能はなんの苦労もなく作れるということが分かってきた

鬼ったーなんかに頼るな!自分で作れ!簡単だから!