実現したいこと
タイトル通りPythonでTwitterAPIを使わずツイートがしたい。
ログインまではおそらく成功、しかしツイートに失敗します。
環境はPython3.6、MacOS Mojave バージョン10.14.6
本件のソースコード
Python
1from bs4 import BeautifulSoup 2from requests.exceptions import ConnectionError 3import requests 4import sys 5 6 7class TwitterTweet: 8 def __init__(self): 9 # ログインするユーザーのアカウント 10 self.username = "ユーザーネーム" 11 # ログインするユーザーのパスワード 12 self.password = "パスワード" 13 14 def tweet(self): 15 # セッションを生成する 16 session = requests.Session() 17 # Twitterに送信するヘッダ情報 18 headers = { 19 "User-Agent": "Mozilla/5.0", 20 "accept": "text/html,application/xhtml+xml,application/xml;", 21 "accept-language": "ja,en-US;q=0.8,en;q=0.6", 22 "content-type": "application/x-www-form-urlencoded", 23 "origin": "https://twitter.com", 24 "referer": "https://twitter.com/", 25 "upgrade-insecure-requests": "1" 26 } 27 28 # Twitterのログイン時に必要な引数 29 payload = { 30 "session[username_or_email]": "", 31 "session[password]": "", 32 "remember_me": "1", 33 "return_to_ssl": "true", 34 "scribe_log": "", 35 "redirect_after_login": "/", 36 } 37 38 # ツイートPOST送信のリクエスト 39 tweet = { 40 "authenticity_token": "", 41 "is_permalink_page": "false", 42 "place_id": "", 43 "status":"今APIを使わずにツイートするテストしてるんだよね", 44 "tagged_users": "" 45 } 46 47 # authenticity_token値の取得 48 try: 49 response = session.get("https://twitter.com/", headers=headers, allow_redirects=False) 50 soup = BeautifulSoup(response.text, "lxml") 51 auth_token = soup.find(attrs={"name": "authenticity_token"}).get("value") 52 except ConnectionError: 53 print("[*] Twitterへ接続できません") 54 sys.exit() 55 56 # authenticity_tokenをpaylosdに設定 57 payload["authenticity_token"] = auth_token 58 # authenticity_tokenをtweetに設定 59 tweet["authenticity_token"] = auth_token 60 # twitterのユーザーIDをpayloadに設定 61 payload["ession[username_or_email]"] = self.username 62 # twitterのユーザーPWをpayloadに設定 63 payload["ession[password]"] = self.password 64 65 # twitterへのログイン 66 try: 67 login = session.post("https://twitter.com/sessions", headers=headers, data=payload, allow_redirects=False) 68 if login.status_code == 302: 69 print("[+] ログイン完了 HTTPステータスコード: ") 70 print(login.status_code) 71 else: 72 print("[+] ログイン失敗 HTTPステータスコード: ") 73 print(login.status_code) 74 except: 75 "[+] ログイン中に通信エラー" 76 77 # ツイートを投稿 78 try: 79 tweet = session.post("https://twitter.com/i/tweet/create", data=tweet, allow_redirects=False, 80 headers=headers, cookies=login.cookies) 81 if tweet.status_code == 200: 82 print("[+] ツイート完了 HTTPステータスコード: ") 83 print(tweet.status_code) 84 else: 85 print("[+] ツイート失敗 HTTPステータスコード: ") 86 print(tweet.status_code) 87 except: 88 "[+] ツイート送信中にエラー" 89 90 91if __name__ == "__main__": 92 TwiTweet = TwitterTweet() 93 TwiTweet.tweet() 94
実行結果
[+] ログイン完了 HTTPステータスコード: 302 [+] ツイート失敗 HTTPステータスコード: 302
解決方法がわからず行き詰まっており、手助けしていただけると助かります。
あなたの回答
tips
プレビュー