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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Python

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

API

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

Q&A

解決済

1回答

571閲覧

python OneDriveAPIのJsonレスポンスをデコードできない

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Python

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

API

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

0グッド

0クリップ

投稿2018/03/20 16:59

編集2018/03/20 18:10

発生しているエラー

requests#post()#json()json.decoder.JSONDecodeErrorが発生します。(res.json()でエラーが発生)

こちらを参考にしました。ステータスは200なのになぜでしょうか?

コードとエラー

python

1 def refresh_access_token(self): 2 config = OneDriveTokenJsonAdapter() 3 4 endpoint = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize" 5 6 payload = {"grant_type": "refresh_token", "refresh_token": config.refresh_token, "client_id": config.client_id, 7 "client_secret": config.client_secret, "scope": self.__scope, "redirect_uri": self.__redirect_url} 8 header = {"Content-Type": "application/x-www-form-urlencoded"} 9 res = requests.post(url=endpoint, data=payload, headers=header) 10 print(res.status_code) 11 print(res.json())

出力

bash

1200 2Traceback (most recent call last): 3 File "C:/Users/-/PycharmProjects/PixivDrive/RequestAccessToken.py", line 67, in <module> 4 main() 5 File "C:/Users/-/PycharmProjects/PixivDrive/RequestAccessToken.py", line 63, in main 6 request.refresh_access_token() 7 File "C:/Users/-/PycharmProjects/PixivDrive/RequestAccessToken.py", line 52, in refresh_access_token 8 print(res.json()) 9 File "C:\Users\-\Anaconda3\envs\pixivpy\lib\site-packages\requests\models.py", line 892, in json 10 return complexjson.loads(self.text, **kwargs) 11 File "C:\Users\-\Anaconda3\envs\pixivpy\lib\json\__init__.py", line 354, in loads 12 return _default_decoder.decode(s) 13 File "C:\Users\-\Anaconda3\envs\pixivpy\lib\json\decoder.py", line 339, in decode 14 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 15 File "C:\Users\-\Anaconda3\envs\pixivpy\lib\json\decoder.py", line 357, in raw_decode 16 raise JSONDecodeError("Expecting value", s, err.value) from None 17json.decoder.JSONDecodeError: Expecting value: line 3 column 1 (char 4) 18

自分で調べたこと

res.request.bodyでBodyの中身を確認した所Noneでした。この場合何がいけないんでしょうか?因みに、ツールの方でhttpリクエストは成功して、トークンを取得できてます。


長いので省略してます
print(res.content)

b'\r\n\r\n<!DOCTYPE html>\r\n<html dir="ltr" class="" lang="en">\r\n<head>\r\n <title>Sign in to your account</title>\r\n

print(res.text)

python

1 2 3 4<!DOCTYPE html> 5<html dir="ltr" class="" lang="en"> 6<head> 7 <title>Sign in to your account</title>

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

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

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

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

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

tell_k

2018/03/20 17:15

そもそもjsonの中身はどうなってるんでしょうか。print(res.json()) の結果があると、回答がつきやすいと思います。
退会済みユーザー

退会済みユーザー

2018/03/20 17:18

res.json()を実行すると、json.decoder.JSONDecodeErrorが発生するので、書けないんです。分かりにくかったと思うんで、質問文にも修正加えときます。
tell_k

2018/03/20 17:26

@ehu すいません。誤読してました。res.text や res.content の中身はどうなってますか?
umyu

2018/03/20 17:27

res..textとres.contentをprintしてみて、どんな結果が帰ってきているのかを確認してみてくださいな。
退会済みユーザー

退会済みユーザー

2018/03/20 17:29

分かりました。res..textとres.contentは長いので質問文にかきます
退会済みユーザー

退会済みユーザー

2018/03/20 17:38

すみません。長すぎて質問文の上限に達しますので、重要な箇所があれば教えてください。そこだけ切り取ります。
tell_k

2018/03/20 17:39

ehu そもそも、そのデータがJSONかどうか確認したいので、最初の数行で大丈夫かと。
退会済みユーザー

退会済みユーザー

2018/03/20 17:44

変更しました。
退会済みユーザー

退会済みユーザー

2018/03/20 17:46

.text,.contentともにJsonではないみたいです
guest

回答1

0

ベストアンサー

返却されてるレスポンスが JSONではなく、HTMLなのでそもそも間違ったURLにリクエストを送っている可能性があります。

http://massivescale.com/microsoft-v2-endpoint-primer/

上記URLの 「Refreshing a Token」 を見る限り endpointのURLが間違ってるようです。

# 間違い https://login.microsoftonline.com/common/oauth2/v2.0/authorize # 正しい https://login.microsoftonline.com/common/oauth2/v2.0/token

投稿2018/03/20 17:47

tell_k

総合スコア2120

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

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

退会済みユーザー

退会済みユーザー

2018/03/20 17:53

そんな間違いだったんですね。
退会済みユーザー

退会済みユーザー

2018/03/20 17:54

ちゃんと、Jsonが返ってきました。
退会済みユーザー

退会済みユーザー

2018/03/20 17:59

解決しました。ありがとうございます。
tell_k

2018/03/20 18:38

よかったですー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問