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

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

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

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

Twitter

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

Q&A

解決済

1回答

466閲覧

TwitterAPIでPythonを使って定期RTさせることが出来たが、他のユーザーからもRT出来るようにしたい

enheione

総合スコア7

Python 3.x

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

Twitter

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

0グッド

0クリップ

投稿2019/08/03 20:16

前提・実現したいこと

TwitterAPIとPython3を使って、Twitterの定期リツイート実行アプリケーションを制作したいです。
審査も通過して、APIKeyを獲得し、与えられるアクセストークンで自分のツイートをRTすること自体は出来ました。

しかし、他のユーザーからリツイートするところで何日か停滞しております。
OAuth認証自体はライブラリを使ってできました。
URLを生成し、ブラウザで認証ボタンを押して
oauth_token,oauth_token_secret,user_id,screen_name
の4点セットを得ることが出来ました。
(これは自分のデベロッパー登録をしたアカウントではない、第2のツイッターアカウントで取得しました。)

ここまではググって得た知識で可能だったのですが
第1のアカウント、つまりデベロッパー本人のアカウントで自分のツイートをリツイート操作は出来たのですが
第2のアカウント、後からユーザー認証をしてトークンを得たアカウントのトークンでは401エラーが出ました。
CONSUMER_KEY
CONSUMER_SECRET
ACCESS_TOKEN
ACCESS_SECRET
の4点セットで通過するかと思い、【アクセストークンとアクセスシークレット】だけをoauth_token,oauth_token_secretと入れ替えて
CONSUMER系はConsumer API keysなので、そのまま使いました。

恐らくuser_id等と使った追加の処理が必要なのだと思ったのですが、似たような事例をググって見つけることが出来ませんでした。

どうにか、別のアカウントからAPIのリツイート機能を使いたいです。

発生している問題・エラーメッセージ

<Response [401]>
(200で成功)

該当のソースコード

python3

1# coding: UTF-8 2import tweepy 3from config import CONFIG 4from requests_oauthlib import OAuth1Session 5 6CONSUMER_KEY = CONFIG["CONSUMER_KEY"] 7CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"] 8ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"] 9ACCESS_SECRET = CONFIG["ACCESS_SECRET"] 10 11twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_SECRET) 12print(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_SECRET) 13 14 15def retweet(tweetId): 16 url = "https://api.twitter.com/1.1/statuses/retweet/%d.json" % tweetId 17 res = twitter.post(url) # retweet実行 18 return res 19 20 21def unretweet(tweetId): 22 url = "https://api.twitter.com/1.1/statuses/unretweet/%d.json" % tweetId 23 res = twitter.post(url) # unretweet実行 24 return res 25 26 27# リツイートしたいIDのリスト 28tweetIds = [1111111111111111111] #これは適当なIDです 29 30# リツイートしたいIDのリスト 31# tweetIds = [line.strip() for line in open('../data/retweetList.txt', encoding='utf-8')] 32 33# リツイート履歴を保存する準備 34retHist = {} 35 36from time import time 37 38 39def retweetProcess(): 40 ### 最後にリツイートした時間が最も遠いものを選ぶ ### 41 # IDと時刻のペアをリスト化 42 idTimes = [(tid, retHist[tid] if tid in retHist else 0) for tid in tweetIds] 43 44 # 最後にリツイートした時刻でソート 45 idTimes = [idt for idt in sorted(idTimes, key=lambda x: x[1])] 46 47 # 最後にリツイートした時刻が最も古いツイートを選択 48 tweetId = idTimes[0][0] 49 50 # 一度解除してからretweet 51 resUnrt = unretweet(tweetId) 52 resRt = retweet(tweetId) 53 54 # 処理内容を表示 55 print(tweetId, resUnrt, resRt) 56 57 # 現在の時刻で辞書の値を更新 58 retHist[tweetId] = time() 59 60 61from time import sleep 62 63while True: 64 retweetProcess() 65 print("リツイートしました! 5秒間待ちます") 66 sleep(500) 67 # sleep(60 * 30) 68

試したこと

とにかく自分の知識が浅いため色々とググりましたが確信には近づけませんでした。
上のコードの場合は、単純に4つのキーでオブジェクトを作り、URLプロパティの中にリツイートのURLを入れれば実行出来ることがわかりましたが
Oauth認証を挟んだ場合の手続きが、ドキュメントを読んでもチンプンカンプンでよくわかりませんでした。

要は何が言いたかったかといいますと
「OAuth認証で入手した他アカウントの情報から、どのように上記プログラムのようにリツイートさせることが出来るのかを知りたい」
ということになります。

レベルの低い質問かとは思いますが、どうかよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

pycharmで実行しています。
サーバー上で動かすのもレンタルサーバー等にpythonを入れるのが面倒だったので、windows上で定期実行させたいと思っています。

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

とにかく自分の知識が浅いため色々とググりましたが確信には近づけませんでした。

ググる前に公式ドキュメント読むと良いです。
ただ、それ以前に、利用規約を理解する必要があります。
多分、処理的に規約違反なことをしようとしています。

投稿2019/08/03 20:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問