2016-07-15 5 views
1

私はHackerニュースAPI hereにぶつかり、JSONを介して取得した各投稿の詳細を取得したいと考えています。このJSONを自分のReactフロントエンドに送信したいと思います。外部APIからのリクエストを結合してFlaskでレスポンスとして送信する方法

このリクエストには長い時間がかかります。回答を送るには何が必要ですか?

@app.route('/api/posts')  
def get_posts(): 
    r = requests.get('https://hacker-news.firebaseio.com/v0/askstories.json?print=pretty') 
    data = r.text 
    jsonData = [] 
    for post in data: 
     r = requests.get('https://hacker-news.firebaseio.com/v0/item/'+post+'.json?print=pretty') 
     r.text 
     jsonData.append(r.text) 
    jsonData = jsonify(jsonData) 
    print jsonData 
    return jsonData 
+0

あなたがすでにやっていることに問題はありますか?あなたのインデントはちょっと変わったようですが、それ以外のエラーは何ですか? – jonrsharpe

+0

ページの読み込みに非常に時間がかかります。今でも私たちが話しているようにコンソールには何もありません。 –

+2

さて、ええ、他のいくつかのリクエストと応答が完了するのを待たなければなりません。これは予想外でしたか? – jonrsharpe

答えて

2

あなたはJSONのAPIを照会し、テキストとして応答を処理している:

r = requests.get('https://hacker-news.firebaseio.com/v0/askstories.json?print=pretty') 
data = r.text 

ので、r.textは、文字列 "[1234,1235,1236]" とないリストになります整数の

だから、あなたはあなたのfor post in dataで何をやっていることは、各文字を取得していることを反復処理する場合:

for post in data: 
    print(post) 

はあなたを与えるだろう:

[ 
1 
2 
3 
4 
, 
...etc 

をだからあなたは、本質的にするためにハッカーのニュースのAPIを問い合わせます実際の数十の代わりに何百もの無効な投稿があります。 data = r.json()

これは、繰り返し処理する数値のリストを提供します。また、あなたが連結している悪い方法を変更する必要があるでしょう。jsonをjsonとして扱う必要があります。データを使用してURL文字列を作成します(.formatを使用)。

1

requestsは、.json()の方法を使用して、JSON配列文字列をPythonリストに変換する必要があります。他の回答で述べたように

In [1]: import requests 

In [2]: r = requests.get('https://hacker-news.firebaseio.com/v0/askstories.json?print=pretty') 

In [3]: jsonData = r.json() 

In [4]: for data in jsonData[:5]: 
    ...  print data 
    ...: 
12102489 
12100796 
12101060 
12097110 
12094366 

for post in data:は、HTTPレスポンスからあなたの個々の文字を与えるために起こっています。言い換えれば、for post in "abc":があなたに与えることを考えてみましょう。

ページでは、すべてのそれらの個々の文字に対して新しいクエリを実行しているためだ

をロードするために非常に長い時間がかかっています。

関連する問題