Python、Flask、Heroku、Jquery、および Google Books API を使用して小さなプロジェクト(日本語)に取り組んでいるときに、「検索」を意味する「検索」の実行中に 500 内部サーバー エラーが発生しました。
横のボックスに入力して「検索」をクリックすると、次のように Google Books API にリクエストが送信され、その引数に一致する書籍データが Ajax w/ Jquery 経由で取得されます。
@app.route("/_search_books")
def search_books():
title = request.args.get('title')
if title:
title = title.encode('utf-8')
url = 'https://www.googleapis.com/books/v1/volumes?q=' + title
h = urlopen(url)
data = json.load(h)
books = []
for i in range(len(data['items'])):
try:
title = data['items'][i]['volumeInfo']['title']
except:
title = None
try:
author = data['items'][i]['volumeInfo']['authors'][0]
except:
author = None
try:
publisher = data['items'][i]['volumeInfo']['publisher']
except:
publisher = None
try:
year = data['items'][i]['volumeInfo']['publishedDate']
except:
year = None
try:
thumbnail = data['items'][i]['volumeInfo']['imageLinks']['thumbnail']
except:
thumbnail = None
try:
page = data['items'][i]['volumeInfo']['pageCount']
except:
page = None
books.append({'title': title, 'author': author, 'publisher': publisher, 'year': year, 'thumbnail': thumbnail, 'page': page})
return jsonify(result=books)
開発上はちゃんと動くので、Google Books APIのパーミッション関係かSSL関係かな。
奇妙なことに、常に 500 が返されるとは限らず、予期した結果が返されることもあります。午前200回、午後500回など、実行時間にもよるようです。
前もって感謝します :)