SeleniumとRubyでTwitterの複数アカウントを自動ファボ&RT
背景
自分の趣味というか、ちょっとしたプロジェクトでTwitterを運営していて、特定のワードで検索されたときに上位に表示させたいなーと思うことがありました。
一つの方法が、ツイートを頻繁にするということで、それはbotで普通に解決できました。これはノンプログラマーでもできますね
bot化したのはだいぶ前だったので、正確には覚えていませんが、確かココらへんを使ってた思い出があります。というか今も使ってるはずですが忘れて確認するのが面倒くさいだけです。
楽ボッツ - 初心者向き twitter bot(ボット)サービス
ほんといいサービス達です。
で、Twitterで検索したときは、この画面がまず出るわけです。
検索ワードによって少々構成が変わることもあったりはするみたいですが、基本こんな感じで、まず一番に表示されるのは話題のツイートです。
ここではツイートまたはユーザーが表示されます。
僕の独自の調査では、この表示されるのに有効な要素は、
- フォロワー数
- Tweetのファボ数
- TweetのRT数
ですね。普通か。
ということで、ファボ&RT数を増やしたい。
それも自分の内々のアカウント群で。
どうやら調べてみると、なんとかマティックっていう怪しい有料のツールはあるみたいですが、それはなんか使いたくなかったので、自作してそれっぽいことをすることに。
いや〜成長しましたね〜
2年前の僕は必死にそういうサービスがないか検索しまくるのが関の山でした。
ということで、余談おしまいです。
APIは使えないのか?
TwitterにはもちろんAPIがありますが、ざっと調べた感じ、自動ファボはできなかったような気がします…
前はできたみたいなんですけどね
もしかしたら普通にできたかも。
Seleniumとかスクレイピングの練習ってことで!
コード
ちょっと前に実装したので、driverのinstallのあたりで若干苦戦した気もしますが、忘れてしまいました。
基本的には実際にTwitterのページを開いて開発者ツールでHTMLコード見て、ゴリゴリにチューニングしてどうにかこうにか動くって感じです。
結構Twitterは罠が多いです。ログインのところとか結構罠でした。
そういう理由から、チューニングしきれず、ちょいちょいエラーになりそうなのを強引にその後の処理を捨ててるので、精度はそこまで高くないです。
回り続けることを優先しています。
# execute `$ watch -n 1800 ruby path/to/this/project/auto_favo_RT_with_selenium.rb` to run every 30 minutes require "selenium-webdriver" user_names = [ "account1", "account2", "account3" ] for user_name in user_names do driver = Selenium::WebDriver.for :firefox driver.get "https://twitter.com" # ログインする sleep 1 begin driver.find_element(:class, "js-login").click driver.find_element(:name, "session[username_or_email]").send_key "#{user_name}" driver.find_element(:name, "session[password]").send_key "password" #パスワードは全部同じとして driver.find_element(:class, "js-submit").click rescue driver.quit puts "login error" next end puts "login with #{user_name}" # 検索してファボ&RT driver.get "https://twitter.com/search?f=tweets&vertical=default&q=ANYWORD&src=typd" for i in 0..10 do begin driver.find_elements(:class, "js-actionFavorite")[i*2].click driver.find_elements(:class, "js-actionRetweet")[i*2].click driver.find_element(:class, "RetweetDialog-retweetActionLabel").click rescue puts "Error: in #{i}" break end sleep 2 end driver.quit end
同じコードですがgithubに上げときます。 github.com
これをMacのターミナルから実行させときます。
$ watch -n 1800 ruby path/to/this/project/auto_favo_RT_with_selenium.rb
これだと1800秒ごと、30分ごとに実行されます。
これは自分のbotのツイート数と併せてこのくらいの感覚でいいなって思って設定しました。
30分ごとに10個ずつふぁぼっていくので、そのくらいのペースということです。
重複しそうになったら、そこでそのループは終了します。
では、悪用しないで楽しいTwitterライフを送りましょう!!!
課題
一つだけ問題点があって、普通にパソコンを使っていると、30分毎にお気にFirefoxが出現して、最前面でブラウザ操作を行っていくことです。
ちょっとうっとうしい。
次のステップとしては、フォローアンフォローも自動化していきたいです。
あとAWSとか使ってやりたい。
ブラウザ操作なんて不細工なことはしたくないな……