🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

API

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

Q&A

解決済

1回答

1330閲覧

Pythonのrequestsを使った際のStreamConsumedErrorの解決方法

sgeeee

総合スコア10

Python 3.x

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

API

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

0グッド

0クリップ

投稿2019/11/24 08:40

APIにGETリクエストを送り、レスポンスを100万行ごとにファイルに書き込むプログラムを書いたのですが、表記のエラーが出てしまい、解決できません。何か解決方法があれば教えていただきたいです。
<エラー本文>
StreamConsumedError Traceback (most recent call last)
<ipython-input-10-8637554a74a9> in <module>
3 decoded_lines = ''
4 with open(path.format(i), 'w') as f:
----> 5 for line in r.iter_lines():
6 count += 1
7 if count == i * 1000000:

~/opt/anaconda3/lib/python3.7/site-packages/requests/models.py in iter_lines(self, chunk_size, decode_unicode, delimiter)
792 pending = None
793
--> 794 for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode):
795
796 if pending is not None:

~/opt/anaconda3/lib/python3.7/site-packages/requests/models.py in iter_content(self, chunk_size, decode_unicode)
767
768 if self._content_consumed and isinstance(self._content, bool):
--> 769 raise StreamConsumedError()
770 elif chunk_size is not None and not isinstance(chunk_size, int):
771 raise TypeError("chunk_size must be an int, it is instead a %s." % type(chunk_size))

StreamConsumedError:

Python3

1base = 'https://api.nazuki-oto.com/historical/tweets?type=stream&estid={}' 2endpoint = 'kargrNyc' 3header = {'Accept-Encoding' : 'deflate, gzip'} 4url = base.format(endpoint) 5s = requests.Session() 6r = s.get(url, auth=('id', 'pass'), headers = header, stream=True) 7 8for i in range(1, 7): 9 count = 0 10 decoded_lines = '' 11 with open(path.format(i), 'w') as f: 12 for line in r.iter_lines(): 13 count += 1 14 if count == i * 1000000: 15 decoded_lines += line.decode('utf-8') 16 break 17 elif count > (i - 1) * 1000000: 18 decoded_lines += line.decode('utf-8') + '\n' 19 else: 20 pass 21 f.write(decoded_lines)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/11/24 14:20

個人的にこの手の質問には答えないのですが、回答がついてしまっているので、仕方なく少し解説します。 1行ずつ処理を追っていくと分かると思いますが、 for line in r.iter_lines(): でGETでリクエストしたものを1行ずつ読んでますよね? GETでリクエストしたものを全行読み切ったらこのループを抜けてf.write(decoded_lines)するわけですが、その後1つ上のループfor i in range(1, 7):で、もう一度 for line in r.iter_lines(): に突入します。でも、rはすでに全部読み切っているので、ここではエラーが起きちゃいませんか? 私に言えるのはここまでです。後は自力でお願いします。
sgeeee

2019/11/24 16:11

全行読み取る前に、if文の条件に引っかかってbreakするのでそうはならないと思うのですが… 他の方のアドバイスで解決できました。ご回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/11/24 19:48

あ、breakしてたんですね。ごめんなさい。 実行方法の問題だったってことですね。何にせよ解決出来てよかったです笑
guest

回答1

0

ベストアンサー

Stream が Consumed だという Error なので、もう残りデータがないということでは?

投稿2019/11/24 11:45

otn

総合スコア85886

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

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

sgeeee

2019/11/24 16:12

Jupyter Notebook上で動かしていたのですが、リスタートしたら解決できました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問