2014-05-14 09:57:11 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# vi:si:et:sw=4:sts=4:ts=4
|
2014-09-02 22:32:44 +00:00
|
|
|
|
2014-05-14 09:57:11 +00:00
|
|
|
|
2014-05-18 23:24:04 +00:00
|
|
|
import stdnum.isbn
|
2014-05-21 00:02:21 +00:00
|
|
|
import ox
|
2014-05-17 14:26:59 +00:00
|
|
|
|
2014-09-02 22:32:44 +00:00
|
|
|
from . import google
|
|
|
|
from . import duckduckgo
|
2014-05-14 09:57:11 +00:00
|
|
|
|
2016-01-08 10:22:07 +00:00
|
|
|
from .utils import decode_html_data
|
|
|
|
|
2016-01-05 16:14:57 +00:00
|
|
|
from oml import settings
|
|
|
|
|
2014-05-18 23:24:04 +00:00
|
|
|
import logging
|
2015-11-29 14:56:38 +00:00
|
|
|
logger = logging.getLogger(__name__)
|
2014-05-18 23:24:04 +00:00
|
|
|
|
|
|
|
|
2016-02-02 19:30:40 +00:00
|
|
|
def find(title=None, author=None):
|
|
|
|
results = google.find(title=title, author=author)
|
2016-07-17 11:07:25 +00:00
|
|
|
# results = duckduckgo.find(query)
|
2014-05-16 08:06:11 +00:00
|
|
|
'''
|
2014-05-21 00:02:21 +00:00
|
|
|
results = openlibrary.find(query)
|
2014-05-14 18:46:31 +00:00
|
|
|
for r in results:
|
2014-05-21 00:02:21 +00:00
|
|
|
r['primaryid'] = 'olid'
|
2014-05-16 08:06:11 +00:00
|
|
|
'''
|
2014-05-14 18:46:31 +00:00
|
|
|
return results
|
2014-05-14 09:57:11 +00:00
|
|
|
|
2016-07-17 11:07:25 +00:00
|
|
|
def lookup_isbn(value):
|
|
|
|
if not isvalid_id('isbn', value):
|
2014-05-18 23:24:04 +00:00
|
|
|
return {}
|
2016-07-17 11:07:25 +00:00
|
|
|
try:
|
|
|
|
data = google.info(value)
|
|
|
|
except:
|
|
|
|
logger.debug('google.info failed %s=%s', key, value, exc_info=True)
|
|
|
|
data = {}
|
2016-01-05 16:14:57 +00:00
|
|
|
for key in [k['id'] for k in settings.config['itemKeys'] if isinstance(k['type'], list)]:
|
|
|
|
if key in data and not isinstance(data[key], list):
|
|
|
|
data[key] = [data[key]]
|
2016-01-08 10:22:07 +00:00
|
|
|
data = decode_html_data(data)
|
2014-05-14 09:57:11 +00:00
|
|
|
return data
|
|
|
|
|
2014-05-18 23:24:04 +00:00
|
|
|
def isvalid_id(key, value):
|
2014-05-21 00:02:21 +00:00
|
|
|
if key == 'isbn':
|
|
|
|
if len(value) not in (10, 13) or not stdnum.isbn.is_valid(value):
|
2014-05-18 23:24:04 +00:00
|
|
|
return False
|
|
|
|
if key == 'asin' and len(value) != 10:
|
|
|
|
return False
|
|
|
|
if key == 'olid' and not (value.startswith('OL') and value.endswith('M')):
|
|
|
|
return False
|
|
|
|
return True
|