複数ページのjsonオブジェクトを反復するプログラムを作成しました。複数のページを持つjsonを反復処理する方法
def get_orgs(token,url):
part1 = 'curl -i -k -X GET -H "Content-Type:application/json" -H "Authorization:Bearer '
final_url = part1 + token + '" ' + url
pipe = subprocess.Popen(final_url, shell=False,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
data = pipe.communicate()[0]
for line in data.split('\n'):
print line
try:
row = json.loads(line)
print ("next page url ",row['next'])
except :
pass
return row
my_data = get_orgs(u'MyBeearerToken',"https://data.ratings.com/v1.0/org/576/portfolios/36/companies/")
JSONオブジェクトは以下の通りです:
[{results: [{"liquidity":"Strong","earningsPerformance":"Average"}]
,"next":"https://data.ratings.com/v1.0/org/576/portfolios/36/companies/?page=2"}]
私が反復する、「次へ」キーを使用していますが、時にはそれが「無効なページ」(存在しないページ)に指し示します。 JSONオブジェクトには、各ページにあるレコードの数に関する規則がありますか?その場合、私は可能なページ数を見積もるためにそれを使用します。
EDIT:詳細の追加 jsonには2つのキー['results'、 'next']があります。複数のページがある場合、「次へ」キーには次のページのURL(as you can see in the output above
)があります。そうでなければ、「なし」が含まれています。 しかし、問題は「None」ではなく、次のページ(存在しない)を指していることです。だから、私はJsonで行を数えることができるかどうかを見たいと思って、ループで反復する必要があるページの数を知るために数値で割ります。私の意見で
私には、あなたが達成しようとしていることは不明です。あなたの問題は、あなたがサーバーからいくつかのJSONを要求しているようです。 JSONには、より良い単語がないため、次のデータセットへのURLが含まれています。正しいURLの抽出に問題があるのですか、または応答から正しく抽出されないURLですか?後者の場合、問題はあなたのコードにありません。なぜ[urllib.request](https://docs.python.org/3.5/library/urllib.request.html)のようなビルトインのPythonソリューションの代わりにカールを使用していますか? – Maurice
こんにちはモーリス、あなたの返事をありがとう。私は私の会社のプロキシの後ろに座っていて、うまく動作しています。 urllib2またはリクエストでは、認証エラーが発生します。 – Tammy
@Maurice、私は問題の詳細を与えるために質問を編集しました – Tammy