50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
import json
|
|
import requests
|
|
|
|
def gluejar_search(q):
|
|
"""normalizes results from the google books search suitable for gluejar
|
|
"""
|
|
results = []
|
|
|
|
for item in googlebooks_search(q)['items']:
|
|
# TODO: better to think in terms of editions with titles
|
|
# instead of titles with names?
|
|
v = item['volumeInfo']
|
|
r = {'title': v.get('title', ""),
|
|
'description': v.get('description', ""),
|
|
'publisher': v.get('publisher', ""),
|
|
'googlebooks_id': item.get('id')}
|
|
|
|
# TODO: allow multiple authors
|
|
if v.has_key('authors') and len(v['authors']) > 0:
|
|
r['author'] = v['authors'][0]
|
|
else:
|
|
r['author'] = ""
|
|
r['isbn_10'] = None
|
|
r['isbn_13'] = None
|
|
|
|
# pull out isbns
|
|
for i in v.get('industryIdentifiers', []):
|
|
if i['type'] == 'ISBN_13':
|
|
r['isbn_13'] = i['identifier']
|
|
if i['type'] == 'ISBN_10':
|
|
r['isbn_10'] = i['identifier']
|
|
|
|
# cover image
|
|
if v.has_key('imageLinks'):
|
|
r['image'] = v['imageLinks'].get('smallThumbnail', "")
|
|
else:
|
|
r['image'] = ""
|
|
|
|
results.append(r)
|
|
|
|
return results
|
|
|
|
|
|
def googlebooks_search(q):
|
|
# XXX: need to pass IP address of user in from the frontend
|
|
headers = {'X-Forwarded-For': '69.243.24.29'}
|
|
r = requests.get('https://www.googleapis.com/books/v1/volumes',
|
|
params={'q': q}, headers=headers)
|
|
return json.loads(r.content)
|