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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Twitter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

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

Q&A

解決済

1回答

1987閲覧

twitter apiの緯度経度を指定して情報を抜き取りたいです。

suwakou

総合スコア13

Twitter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

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

0グッド

3クリップ

投稿2020/08/19 08:32

編集2020/08/23 07:59

twitter apiの地理情報を指定して情報を抜き取りたいのですが、
テキストを参考にしてスクリプトを入力したところ、この様なエラーが出ました。
初めて遭遇するタイプのエラーで、調べてみましたがよくわかりません
どのような状態なのでしょうか。教えていただきたいです。

>>> from twitter import * >>> auth = OAuth( ... consumer_key='[000]', ... consumer_secret='[000]', ... token='[000]', ... token_secret='[000]' ... ) >>> params = dict() >>> params["locations"] = "-122.75,36.8,-121.75,37.8" >>> twitter_stream = TwitterStream(auth=auth, domain='stream.Twitter.com') >>> for msg in twitter_stream.statuses.filter(**params): ... print(msg) ... Traceback (most recent call last): File "C:\Users\Shun\Documents\python\lib\site-packages\twitter\stream.py", line 211, in handle_stream_response handle = urllib_request.urlopen(req,) File "C:\Users\Shun\Documents\python\lib\urllib\request.py", line 222, in urlopen return opener.open(url, data, timeout) File "C:\Users\Shun\Documents\python\lib\urllib\request.py", line 531, in open response = meth(req, response) File "C:\Users\Shun\Documents\python\lib\urllib\request.py", line 640, in http_response response = self.parent.error( File "C:\Users\Shun\Documents\python\lib\urllib\request.py", line 569, in error return self._call_chain(*args) File "C:\Users\Shun\Documents\python\lib\urllib\request.py", line 502, in _call_chain result = func(*args) File "C:\Users\Shun\Documents\python\lib\urllib\request.py", line 649, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 401: Authorization Required During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Shun\Documents\python\lib\site-packages\twitter\api.py", line 334, in __call__ return self._handle_response(req, uri, arg_data, _timeout) File "C:\Users\Shun\Documents\python\lib\site-packages\twitter\stream.py", line 286, in _handle_response return handle_stream_response( File "C:\Users\Shun\Documents\python\lib\site-packages\twitter\stream.py", line 213, in handle_stream_response raise TwitterHTTPError(e, uri, 'json', arg_data) twitter.api.TwitterHTTPError: Twitter sent status 401 for URL: 1.1/statuses/filter.json using parameters: (locations=-122.75%2C36.8%2C-121.75%2C37.8&oauth_consumer_key=%5BgxtRnfaP6Gc8hjWBVGAcYxpAZ%5D&oauth_nonce=13315667029978475316&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1597825461&oauth_token=%5B1273157088810872832-L77lHzFDHnQvtGiak9iiSw9uC5KgqV%5D&oauth_version=1.0&oauth_signature=tUuxH8vAb014F%2Blf7wiTeGkWURw%3D) details: <html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n<title>Error 401 Unauthorized</title> </head> <body> <h2>HTTP ERROR: 401</h2> <p>Problem accessing '/1.1/statuses/filter.json'. Reason: <pre> Unauthorized</pre> </body> </html>

参考にしたテキスト(Twitterの空間分析/桐村喬/20191110)
イメージ説明

過去に地理情報無しで抜き取れたタイムラインとそのコード

import tweepy from datetime import timedelta CK = '000' CS = '000' AT = '000' AS = '000' class Listener(tweepy.StreamListener): def on_status(self, status): status.created_at += timedelta(hours=9) print('------------------------------') print(status.text) print("{name}({screen}) {created} via {src}\n".format(name=status.author.name, screen=status.author.screen_name,created=status.created_at, src=status.source)) return True def on_error(self, status_code): print('エラー発生: ' + str(status_code)) return True def on_timeout(self): print('Timeout...') return True auth = tweepy.OAuthHandler(CK, CS) auth.set_access_token(AT, AS) listener = Listener() stream = tweepy.Stream(auth, listener) stream.filter(track = ["プログラミング"]) RT @sunabacoTKMT: 3期の卒業生の方が案件とってきた!! ウレシ( ꈍᴗꈍ) #sunabaco #プログラミング https://t.co/zrLlfbhO5x CARIN@SUNABACO(CarinWaka21) 2020-08-23 16:51:05 via Twitter for iPhone

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

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

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

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

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

can110

2020/08/19 08:37

認証情報は正しいものを渡していますか?
suwakou

2020/08/19 08:41 編集

APIの認証キーは提供された文字列を使っていて正しいと思います。更新するべきでしょうか?
can110

2020/08/19 08:44

地理情報を指定しない、より単純なコードでは正常に動作したでしょうか?
suwakou

2020/08/19 08:46

緯度経度を指定せずにAPI認証キーをつかってtwitterのタイムラインを取得することには成功しています。
YakumoSaki

2020/08/19 08:53

回答じゃないんですが、例外メッセージにoauthのキーが出ちゃってますよ
can110

2020/08/19 08:58 編集

比較のため、正常に動作したコードも提示ください。認証情報部分は伏字でかまいません。
suwakou

2020/08/23 07:52

以下のコードがタイムラインを取得出来たコードです。質問も追記します。 import tweepy from datetime import timedelta CK = '000' CS = '000' AT = '000' AS = '000' class Listener(tweepy.StreamListener): def on_status(self, status): status.created_at += timedelta(hours=9) print('------------------------------') print(status.text) print("{name}({screen}) {created} via {src}\n".format(name=status.author.name, screen=status.author.screen_name,created=status.created_at, src=status.source)) return True def on_error(self, status_code): print('エラー発生: ' + str(status_code)) return True def on_timeout(self): print('Timeout...') return True auth = tweepy.OAuthHandler(CK, CS) auth.set_access_token(AT, AS) listener = Listener() stream = tweepy.Stream(auth, listener) stream.filter(track = ["プログラミング"]) RT @sunabacoTKMT: 3期の卒業生の方が案件とってきた!! ウレシ( ꈍᴗꈍ) #sunabaco #プログラミング https://t.co/zrLlfbhO5x CARIN@SUNABACO(CarinWaka21) 2020-08-23 16:51:05 via Twitter for iPhone
guest

回答1

0

ベストアンサー

https://github.com/sixohsix/twitter/blob/twitter-1.18.0/twitter/stream.py#L229

Per default the TwitterStream object uses public streams.

If you want to use one of the other [streaming APIs](https://dev.twitter.com/docs/streaming-apis), specify the URL manually: - [Public streams](https://dev.twitter.com/docs/streaming-apis/streams/public): stream.twitter.com - [User streams](https://dev.twitter.com/docs/streaming-apis/streams/user): userstream.twitter.com - [Site streams](https://dev.twitter.com/docs/streaming-apis/streams/site): sitestream.twitter.com

public streamsもuser streamsもsite streamsも今は存在しないので動かないでしょう。


v2 APIのfiltered streamあたりがGEOだけを指定可能なら実現しそうですが、詳細は不明です。
https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream

APIアクセスを一通り自分で作ることになるかと思います。アーリーアクセスのv2 APIに対応するライブラリを待っていてもしょうがなさそうです。(OAuth関連だけライブラリを使えばいいでしょうが)

投稿2020/08/20 00:25

quickquip

総合スコア11235

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

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

suwakou

2020/08/25 03:41

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問