我在下面有这个代码,我正在努力作为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,并且包不是问题
答案 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工作正常,但它仍然给我错误。