使用Python请求和解析JSON

时间:2016-09-16 05:02:37

标签: python json parsing

我在下面有这个代码,我正在努力作为AI项目的一部分。我希望得到用户搜索的标签,并返回带有所述标签的帖子的网址。

from meya import Component
import requests
import json

API_URL = "https://e621.net/post/index.json?limit=1&tags=rating:s+order:random+{tag}"

class e621_call(Component):
"""Produces a e621 post based on the user's tags."""

def start(self):
    tag = self.properties.get('tag') or \
        self.db.flow.get('tag')

    response = requests.get(API_URL.format(tag=tag))

    img = response.json()['file_url']

    message = self.create_message(text=img)

    return self.respond(message=message, action="next")

一切都很好,直到我将img分配给 file_url 值,这会产生一个

TypeError: list indices must be integers, not str

为了记录,我正在使用meya.ai,并且包不是问题

2 个答案:

答案 0 :(得分:1)

您的API会在列表中返回字典。首先进入列表,然后你可以用字典做你想做的事。

response = requests.get(API_URL)
foo = json.loads(response.content)
file_url = foo[0].get('file_url')

如果你计划在列表中返回多个词典,你可以循环遍历foo并找到多个网址。

for d in foo:
    print d.get('file_url')

另外,我更喜欢不使用.json()(因为您可能已经注意到我没有将其包含在我的答案中),因为这样您可以在继续之前首先正确检查status_code。否则,如果您获得404或500,则会出现错误。

if response.status_code == 200:
    do stuff here
else:
    print "Something is wrong"

答案 1 :(得分:-1)

我找到了一个临时的工作,将response.json()['file_url']替换为response.json()[0]['file_url']在AI工作正常,但它仍然给我错误。