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

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

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

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

Twitter

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

Q&A

0回答

2625閲覧

TwitterAPI (WebAPI) : リプライ先のツイートを取得する

EMMMY

総合スコア17

Python 3.x

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

Twitter

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

0グッド

0クリップ

投稿2018/10/15 03:28

編集2018/10/15 04:19

はじめに

以下,実質2つの質問になっていますが,どちらか片方に答えていただけると幸いです.
特に,後半の質問に答えていただけるとたいへん助かります.

前提・実現したいこと1

機械学習のためにTwitterからリプライ関係にあるツイートペアを取得したいと思っています.あるリプライツイートとそのリプライ先のツイートのペアを取得したいと考えています.
TwitterAPIの知識はとても浅く,リファレンスの解読に試みてはいるもののよくわからず,既存のソースコードに頼っているのが現状です.

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

リプライ先のツイートの取得方法がわかりません.
{'errors': [{'code': 215, 'message': 'Bad Authentication data.'}]}
ツイートをjson形式のデータで取得しようとすると上記の形式になってしまい,正しく取得できません.また,httpリクエストのエラー[400]となっています.

該当のソースコード1:ツイートIDからツイートを取得する

Python

1# -*- coding: utf-8 -*- 2from requests_oauthlib import OAuth1Session, OAuth1 3import json 4import requests 5import urllib 6import sys 7import io 8 9consumer_key = "xxx" 10consumer_key_secret = "xxx" 11access_token = "xxx" 12access_token_secret = "xxx" 13 14sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 15 16url = "https://api.twitter.com/1.1/statuses/show.json?id=1050318723058298882" 17auth = OAuth1(consumer_key, consumer_key_secret, 18 access_token, access_token_secret) 19response = requests.get(url) 20json_data = response.json() 21print(json_data) 22

試したこと

上記のコードでは,事前にリプライツイートを取得し,そこから得たリプライ先のツイートのツイートIDを用いてツイートを取得しようとしています.(要は,ツイートIDからツイートを取得することができない状況にいます)
このコードは GET statuses/show/:id - ツイートを個別に取得する(https://syncer.jp/Web/API/Twitter/REST_API/GET/statuses/show/id/)を参考に書きました.

各keyが正しいかについては,事前にリプライツイートを収集する段階においては同じkeyで正しく動作することを確認しています.リクエスト数の制限に引っかかっていないことも確認しています.

考えられることとしては,TwitterAPIの仕様変更によりこの形式のリクエストができなくなったのではないか?と考えています.どうでしょうか.

前提・実現したいこと2

また, 機械学習に利用するデータとしてツイートを収集していますが,上記の方法では15分間に180ツイートしかチェックできずまともな量のデータが集められません..
そこで,WebAPIを叩いてhttps://twitter.com/{スクリーンネーム}/status/{ツイートID}をjson形式で取得してツイート本文を取得しようと考えました.

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

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

該当のソースコード2:リプライ先のツイートを取得する

Python

1# -*- coding: utf-8 -*- 2import json 3import requests 4import urllib 5 6url = " https://twitter.com/chisapita/status/1050318723058298882" 7response = urllib.request.urlopen(url) 8rr = response.read() 9json_txt = str(rr).replace("'", '"').replace('True', 'true').replace('False', 'false') 10data = json.loads(json_txt) 11

試したこと

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)について調べ,様々なコードを試しましたがエラーが消えることはありませんでした.
おそらく,何もわかっていないためurlの指定がおかしいのではないかと思っています.どのように書けばよいのでしょうか.

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

Python3.6.3

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問