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

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

ただいまの
回答率

87.61%

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

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,265

score 6

実現したいこと

タイトル通りPythonでTwitterAPIを使わずツイートがしたい。
ログインまではおそらく成功、しかしツイートに失敗します。
環境はPython3.6、MacOS Mojave バージョン10.14.6

本件のソースコード

from bs4 import BeautifulSoup
from requests.exceptions import ConnectionError
import requests
import sys


class TwitterTweet:
    def __init__(self):
        # ログインするユーザーのアカウント
        self.username = "ユーザーネーム"
        # ログインするユーザーのパスワード
        self.password = "パスワード"

    def tweet(self):
        # セッションを生成する
        session = requests.Session()
        # Twitterに送信するヘッダ情報
        headers = {
            "User-Agent": "Mozilla/5.0",
            "accept": "text/html,application/xhtml+xml,application/xml;",
            "accept-language": "ja,en-US;q=0.8,en;q=0.6",
            "content-type": "application/x-www-form-urlencoded",
            "origin": "https://twitter.com",
            "referer": "https://twitter.com/",
            "upgrade-insecure-requests": "1"
        }

        # Twitterのログイン時に必要な引数
        payload = {
            "session[username_or_email]": "",
            "session[password]": "",
            "remember_me": "1",
            "return_to_ssl": "true",
            "scribe_log": "",
            "redirect_after_login": "/",
        }

        # ツイートPOST送信のリクエスト
        tweet = {
            "authenticity_token": "",
            "is_permalink_page": "false",
            "place_id": "",
            "status":"今APIを使わずにツイートするテストしてるんだよね",
            "tagged_users": ""
        }

        # authenticity_token値の取得
        try:
            response = session.get("https://twitter.com/", headers=headers, allow_redirects=False)
            soup = BeautifulSoup(response.text, "lxml")
            auth_token = soup.find(attrs={"name": "authenticity_token"}).get("value")
        except ConnectionError:
            print("[*] Twitterへ接続できません")
            sys.exit()

        # authenticity_tokenをpaylosdに設定
        payload["authenticity_token"] = auth_token
        # authenticity_tokenをtweetに設定
        tweet["authenticity_token"] = auth_token
        # twitterのユーザーIDをpayloadに設定
        payload["ession[username_or_email]"] = self.username
        # twitterのユーザーPWをpayloadに設定
        payload["ession[password]"] = self.password

        # twitterへのログイン
        try:
            login = session.post("https://twitter.com/sessions", headers=headers, data=payload, allow_redirects=False)
            if login.status_code == 302:
                print("[+] ログイン完了 HTTPステータスコード: ")
                print(login.status_code)
            else:
                print("[+] ログイン失敗 HTTPステータスコード: ")
                print(login.status_code)
        except:
            "[+] ログイン中に通信エラー"

        # ツイートを投稿
        try:
            tweet = session.post("https://twitter.com/i/tweet/create", data=tweet, allow_redirects=False,
                                 headers=headers, cookies=login.cookies)
            if tweet.status_code == 200:
                print("[+] ツイート完了 HTTPステータスコード: ")
                print(tweet.status_code)
            else:
                print("[+] ツイート失敗 HTTPステータスコード: ")
                print(tweet.status_code)
        except:
            "[+] ツイート送信中にエラー"


if __name__ == "__main__":
    TwiTweet = TwitterTweet()
    TwiTweet.tweet()

実行結果

[+] ログイン完了 HTTPステータスコード: 
302
[+] ツイート失敗 HTTPステータスコード: 
302


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • kawax

    2020/01/12 09:37

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

    キャンセル

  • Hugh8

    2020/01/12 09:52

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

    キャンセル

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

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る