如何在Flas中组合来自外部API的请求并将其作为响应发送

2024-05-20 09:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在访问Hacker news APIhere,希望通过JSON获取每个帖子的详细信息。我想把这个JSON发送到我的React前端。在

这个请求需要很长时间。我需要怎么做才能发送响应?在

@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

Tags: texthttpscomjsongetprettyrequestshacker
2条回答

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":会给你什么。在

The page is taking a very long time to load

这是因为您正在针对所有这些单独的字符运行一个新的查询。在

查询json API并将响应视为文本:

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

因此,r.text将是一个字符串“[123412351236]”,而不是是一个整数列表。在

因此,当你在你的for post in data中迭代该值时,你要做的是得到每个字符:

^{pr2}$

会给你:

[
1
2
3
4
,
...etc

因此,您基本上是在hacker news API中查询数以百计的无效帖子,而不是几十个实际的帖子。您应该将json视为json-通过使用内置于请求中的json特性:data = r.json()

这将为您提供一个数字列表以进行迭代-您还需要更改连接数据以生成url字符串的错误方式(使用.format)。在

相关问题 更多 >