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

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

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

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Twitter

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

Python

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

Q&A

0回答

458閲覧

Twitterのdmから画像取得できない

picatorics

総合スコア0

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Twitter

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

Python

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

0グッド

0クリップ

投稿2022/11/10 06:02

編集2022/11/11 00:08

前提に質問の内容を詳しく書いてください。

tweepyとurllibでTwitterのdmに来た画像、動画を保存するプログラムを作ろうと思っています。
urllib.request.urlopen(media_url_https)
にするとHTTPS 401 エラーが出てしまいます

公式ドキュメントを見るとこのようなサンプルコードがあるのですがこのプログラムはPythonでできますか?oauth_consumer_keyなどの値はTwitterのTwitterのデロッパー画面から見れる値でいいのですか?

curl --request GET \ --url https://ton.twitter.com/1.1/ton/data/dm/1034828552951160836/1034828533812486145/oP5p359h.jpg \ --header 'authorization: OAuth oauth_consumer_key="6NxxxxxxCS", oauth_nonce="Sbxxxxxx2G", oauth_signature="637xxxxxxM%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1535557741", oauth_token="600-SQxxxxxxcqIF", oauth_version="1.0"'

実現したいこと

dmから画像を取得する

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

HTTP Error 401: Unauthorized 401 Unauthorized date: Thu, 10 Nov 2022 05:48:33 UTC perf: 7626143928 server: tsa_m set-cookie: guest_id_marketing=v1%3A166805931393967493; Max-Age=63072000; Expires=Sat, 09 Nov 2024 05:48:33 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None set-cookie: guest_id_ads=v1%3A166805931393967493; Max-Age=63072000; Expires=Sat, 09 Nov 2024 05:48:33 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None set-cookie: personalization_id="v1_cdec8ll7FnUiYZ4o+SN4HQ=="; Max-Age=63072000; Expires=Sat, 09 Nov 2024 05:48:33 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None set-cookie: guest_id=v1%3A166805931393967493; Max-Age=63072000; Expires=Sat, 09 Nov 2024 05:48:33 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None cache-control: no-cache content-length: 0 x-transaction-id: b1e93c82ffe8df1d timing-allow-origin: https://twitter.com, https://mobile.twitter.com x-content-type-options: nosniff strict-transport-security: max-age=631138519 x-response-time: 117 x-connection-hash: f35c54b0b33dec3e74b2a38d0e913323c659a18ddd16d900d3f052ce925f96f9 connection: close None

該当のソースコード

python

1import urllib.error 2import urllib.request 3def download_file(url, dst_path): 4 try: 5 with urllib.request.urlopen(url) as web_file: 6 data = web_file.read() 7 with open(dst_path, mode='wb') as local_file: 8 local_file.write(data) 9 except urllib.error.HTTPError as e: 10 print(e) 11 print(e.code) 12 print(e.reason) 13 print(e.headers) 14 print(e.headers['WWW-Authenticate']) 15url="https://ton.twitter.com/1.1/ton/data/dm/1589771642997121033/1589771637129216005/pTaJerJk.jpg" 16download_file(url,"C:/Users/PC2006/Downloads/ko.png")

試したこと

requests.post('https://ton.twitter.com/1.1/ton/data/dm/1589771642997121033/1589771637129216005/pTaJerJk.jpg',auth=("Twitter_id","Twitter_password")
これを追加して"Twitter_id","Twitter_password"をいろいろ変えてみたりしました。
https://python.softmoco.com/basics/python-http-request.php#3
このサイトにありました
見当違いなことなのでしょうか?

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

OAuth2.0だと思う?、Twitter API v2です。
参考にしたサイトです
https://note.com/mitsuru_h_cc/n/n6a4e0b2134a8#UvDHG

https://python.softmoco.com/basics/python-http-request.php#3

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

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

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

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

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

AbeTakashi

2022/11/10 06:18

何を参考にされたのかわかりませんが、通常はTwitter API経由で取得するのが普通ではないでしょうか? 参考) https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/message-attachments/guides/retrieving-media https://teratail.com/questions/314659 コンシューマキーとかアクセストークンとか使うのが一般的だと思います。TwitterのIDとパスワードだけでそういうデータを取れるもんなんですかね? 何かを参考にされたのなら、その参考サイトを質問文に追記されるといいと思います。
picatorics

2022/11/10 12:22

回答ありがとうございます。 書くのを忘れていたのですがdmの画像urlはTwitterapiを使って取得しています。すみません。 また、そのサイトではOAuth 1.0に対し今、使っているのはOAuth 2.0です。また、そのサイト下部にあるコードはpythonで実行する方法がわかりませんでした。 apiを使うのが初めてで色々なサイトを見ながらやっていたので知識不足ですみません。
AbeTakashi

2022/11/10 15:30

質問文は追記や編集ができます。こちらの返信に書いても見ない人がいるので、まずは質問文を修正して回答に必要な情報を入れてください。ソースコードだけ見た感じだと、そんな方法でデータが取れるとはとうてい思えない(Twitter APIを使う際はTwitterのIDやパスワードは使わないはず)ので、どのサイトやどの情報を参考にしてソースコードを組んだのかなどの情報も合わせて記載されるといいかと思います。
picatorics

2022/11/11 00:06

ありがとうございます。編集してみます。
AbeTakashi

2022/11/11 02:03

提示された二つのサイトはまったくちがうことをしてるようですが・・・ 下のサイトはPythonでのHTTPリクエストの一般的な方法を書いてるのみなので、より参考になるのは上のサイトでしょうね。Twitter APIの場合はCONSUMER_KEY、CONSUMER_SECRET、ACCESS_TOKEN、ACCESS_SECRETをTwitterの管理画面で取得して、それを使うのは必須のはずです。 参考) https://izadori.net/python-twitter/ https://qiita.com/penguinprogrammer/items/b220be0c203eaaad015a https://developer.twitter.com/en/docs/twitter-api/direct-messages/lookup/introduction v2の場合は色々な制限があるようですので、公式ドキュメントも合わせて色々調べてみるといいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問