2016-09-16 19 views
0

私は以下のコードをAIプロジェクトの一部として作成しています。私は、ユーザーが検索し、前記タグを使って投稿のURLを返すタグを取得しようとしています。私はレコードのPythonを使用したJSONの要求と解析

TypeError: list indices must be integers, not str 

が表示されますfile_url値にIMGを割り当てるまで

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") 

すべてがアップ結構です、私はこのためにmeya.aiを使用しています、そしてパッケージがあります問題ではありません

+0

返されるJSONデータはリストであり、辞書ではありません。 –

答えて

1

APIはリスト内の辞書を返します。最初にリストの中に入って、あなたが辞書で望むことをすることができます。

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

あなたは複数の辞書は、リスト内の返された上で計画している場合は、あなたが複数のURLをfooのみをループして見つけることができます。

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

はまた、私はそのようにあなたが正しく進む前に最初のSTATUS_CODEをチェックすることができるので、(あなたは私が私の答えでそれを含んでいませんでした気づいたかもしれませんが))(.json使用しないことを好みます。そうでなければ、例えば404または500が得られれば、エラーが発生します。

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

それはまだ私にエラーを与えるが、私は、AIの微細response.json()[0]['file_url']作品でresponse.json()['file_url']を交換し、一時的workthroughを発見しました。

関連する問題