質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

1138閲覧

PythonでTwitterAPIを使わずツイートがしたい。

Hugh8

総合スコア6

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/01/12 00:17

実現したいこと

タイトル通り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

解決方法がわからず行き詰まっており、手助けしていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kawax

2020/01/12 00:37

たぶん規約違反なのでAPI使うしかない。というよりこういうズルする人がいるから禁止されている。APIもどんどん制限されてもう使い物にならない。
Hugh8

2020/01/12 00:52

規約に関してはやはりそうでしょうか、ご回答感謝します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問