あ、これTwitterの規約違反だからね。
あくまで技術的な興味ということでお願いしますね。
【注意】この記事は、プログラミング言語「Python」を使って、Twitterのログインから
ツイートまでを自動化しようという内容です。
「Python」にある程度知識のある方向けの記事となっておりますので、
ご了承下さい。
プログラミング言語「Python」を使って、TwitterAPIを使わずに自動投稿したい!
と思って色々調べてみたんです。
そして、同じことを考えてるサイト様は結構見つかったんですが
そんなサイトにあるソースを実行してみたけれどちゃんと最後まで動く
Pythonのソースを見つけられなかったんです。
全く動かないものから、途中までは動くけど止まっちゃうプログラムとか。
Twitterはしょっちゅう仕様変更するので、その度にプログラムが動かなくなって
いたちごっこではあります。
一応、るなのこのソースは、令和4年10月現在は動いています。
やっぱり、プログラマーの知的好奇心ってやつでしょうか。
こういうこと、やりたくなりますよね。
TwitterAPIを使わないで、ブラウザでTwitterに自動ログイン。
更には画像付きのツイートまでしちゃうPythonのプログラム。
はい、色々いじって動くようにしました。
このプログラムをタスクスケジューラーで自動実行させれば、
定期的に自動ツイートもできちゃいますよ。
Twitterの規約違反ですけどね!
そうなんです、Twitterはスクレイピングを規約で禁止しています。
なにやら、自動フォロバは禁止してないらしいんですけどね。
大枠のプログラムについては、どこかのサイト様のものを使っているのですが
どこのサイトのものだったのか、分からなくなってしまいました・・・。
判明すれば、参照元としてリンクを張らせていただきますね。
では、早速全ソースを公開。
# ライブラリの読み込み
import time
import subprocess
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import os
from selenium.webdriver.chrome.options import Options
options = Options()
import chromedriver_binary
import sys
import os
import csv
#設定ファイルからログイン情報の取得
#path = os.path.dirname(__file__).replace(os.sep,'/') + '/login.txt'
path = os.path.dirname(sys.argv[0]).replace(os.sep,'/') + '/login.txt'
with open(path) as f:
loginInfo = [s.strip() for s in f.readlines()]
#ログインID、パスワード、登録メールアドレスの設定
loginid = loginInfo[0]
password =loginInfo[1]
mail = loginInfo[2]
#開始行をファイルから取得
path = os.path.dirname(sys.argv[0]).replace(os.sep,'/') + '/count.txt'
with open(path) as f:
startColumn = f.readline()
#csvファイルの読み込み
path = os.path.dirname(sys.argv[0]).replace(os.sep,'/') + '/tweetFile.csv'
with open(path,'r') as f:
tmpData = csv.reader(f)
csvData = [row for row in tmpData]
#ツイートテキストと動画の設定
tweet = csvData[int(startColumn)-1][0].replace('\\n','\n')
image = csvData[int(startColumn)-1][1]
cmd = 'pip install --upgrade chromedriver_binary'
res = subprocess.call(cmd, shell=True)
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs",prefs)
#options.add_argument('--headless')
drv = webdriver.Chrome(ChromeDriverManager().install(), options=options)
# ツイッターに自動投稿する関数
def auto_tweet():
#global drv
#検索要素取得までの最大待ち時間の設定
drv.implicitly_wait(14)
drv.get('https://twitter.com/login/')
#time.sleep(12)
#ログインIDの入力部分
drv.find_element_by_name("text")\
.send_keys(loginid)
#time.sleep(2)
#ログインIDのボタン押下部分
drv.find_elements_by_css_selector('.css-18t94o4.css-1dbjc4n')[2]\
.click()
#time.sleep(3)
#登録メールアドレスを求められる場合の措置
if drv.find_elements_by_css_selector('.css-16my406')[2].text == '通常とは異なるログイン操作が行われました。アカウントを安全に保つため、電話番号かメールアドレスを入力し、ご本人確認してください。':
#メールアドレスの入力部分
drv.find_element_by_name("text").send_keys(mail)
time.sleep(2)
#メールアドレスのボタン押下部分
drv.find_elements_by_css_selector('.r-sdzlij')[1].click()
#time.sleep(3)
#パスワードの入力部分
drv.find_element_by_name("password")\
.send_keys(password)
#time.sleep(2)
#パスワードのボタン押下部分
drv.find_elements_by_css_selector('.r-sdzlij')[2].click()
time.sleep(2)
drv.get('https://twitter.com/compose/tweet')
time.sleep(4)
#ツイート投稿部分
if len(tweet) != 0:
drv.find_element_by_css_selector(
'.notranslate.public-DraftEditor-content').send_keys(tweet)
time.sleep(3)
#動画投稿部分
if len(image) != 0:
drv.find_element_by_xpath('//input[@type="file"]').send_keys(image)
time.sleep(20)
#投稿のボタン押下部分
drv.find_elements_by_css_selector('.r-l5o3uw')[1].click()
#沢山待機してから終了。(動画のアップロードに時間かかるから)
time.sleep(50)
drv.quit()
#投稿実行
auto_tweet()
#読み込み開始行のインクリメント
path = os.getcwd() + '\count.txt'
with open(path,mode='w') as f:
f.write(str(int(startColumn) + 1))
おいおい、プログラムの詳細は説明していきますね。
一応用意するものは、↑のプログラム本体の他には
- count.txt
- login.txt
- tweetFile.csv
の3つのファイルが必要です。
count.txtは、tweetFile.csv(ツイート本文が入っているファイル)の何行目を
ツイートするかの半角数値を入れてるだけのテキスト。
最初は「1」を入れておけば大丈夫。
login.txtは、ログイン情報を入れているテキスト。
1行目:@から始まるTwitterID
2行目:ログイン時のパスワード
3行目:登録されているメールアドレス
メールアドレスは、ログイン時に入力を求められることがあるので、その時に使用。
tweetFile.csvはツイート本文が入っているファイル
1行が1ツイート。
カンマ区切りで、
ツイート本文,投稿画像URL
といった形。改行を含むツイートをしたい場合には、ツイート本文の改行したい位置に「\n」を入れて下さい。
1行開けたかったら「\n\n」となります。
画像を投稿しない場合は、画像URLは入れなくてOK。
プログラム本体は、セレニウムを使っています。
実行できる環境構築は結構大変です。
ここまで読んだならば、検索を駆使して実行環境を構築できると思います。
このプログラムは、画像付きの自動投稿ができるのが素晴らしいと思っています。
登録しておける投稿数も無限
でもTwitterの規約違反ですからね!
何度も言いますけど。
もし、質問があれば分かる範囲でお答えしますのでコメントにどうぞ。
コメント