86 lines
3.3 KiB
Python
86 lines
3.3 KiB
Python
from .models import GtinProduct
|
|
from django.db.models import ObjectDoesNotExist
|
|
import requests
|
|
import logging
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def ask_upcitemdb_service(gtin):
|
|
request = f'https://api.upcitemdb.com/prod/trial/lookup?upc={gtin}'
|
|
response = requests.get(request)
|
|
if response.status_code == 200:
|
|
productJson = response.json()
|
|
print(f"Got {productJson['total']} result records")
|
|
if productJson['total'] > 0:
|
|
product = GtinProduct.objects.create(gtin=gtin, api_request=request, api_response=productJson)
|
|
if 'title' in productJson['items'][0]:
|
|
product.name = productJson['items'][0]['title']
|
|
if 'brand' in productJson['items'][0]:
|
|
product.brand = productJson['items'][0]['brand']
|
|
LOGGER.debug(
|
|
f"Creating new product entry for gtin={gtin}:\nrequest={request}\nresponse={response.status_code}:{productJson}")
|
|
product.save()
|
|
return product
|
|
return None
|
|
|
|
def ask_digiteyes_service(gtin):
|
|
request = f'https://www.digit-eyes.com/gtin/v2_0/?upcCode={gtin}&field_names=all&language=en&app_key=%s&signature=%s'
|
|
response = requests.get(request)
|
|
if response.status_code == 200:
|
|
product_json = response.json()
|
|
print(f"Got {product_json['description']}")
|
|
if product_json['return_code'] == '0':
|
|
product = GtinProduct.objects.create(gtin=gtin, api_request=request, api_response=product_json)
|
|
if 'description' in product_json:
|
|
product.name = product_json['description']
|
|
if 'brand' in product_json:
|
|
product.brand = product_json['brand']
|
|
LOGGER.debug(
|
|
f"Creating new product entry for gtin={gtin}:\nrequest={request}\nresponse={response.status_code}:{product_json}")
|
|
product.save()
|
|
return product
|
|
return None
|
|
|
|
def ask_opengtindb_service(gtin):
|
|
request = f'http://opengtindb.org/?ean={gtin}&cmd=query&queryid=400000000'
|
|
response = requests.get(request)
|
|
if response.status_code == 200:
|
|
product_txt = response.text
|
|
print(f"Got {product_txt}")
|
|
if product_txt.startswith('error=0'):
|
|
product = GtinProduct.objects.create(gtin=gtin, api_request=request, api_response=product_txt)
|
|
product_props = product_txt.splitlines()
|
|
for prop in product_props:
|
|
if prop.startswith('name='):
|
|
product.name = prop[5:]
|
|
if prop.startswith('vendor='):
|
|
product.brand = prop[7:]
|
|
LOGGER.debug(
|
|
f"Creating new product entry for gtin={gtin}:\nrequest={request}\nresponse={response.status_code}:{product_txt}")
|
|
product.save()
|
|
return product
|
|
return None
|
|
|
|
|
|
def ask_remote_services(gtin):
|
|
product = ask_upcitemdb_service(gtin)
|
|
if product is not None:
|
|
return product
|
|
product = ask_digiteyes_service(gtin)
|
|
if product is not None:
|
|
return product
|
|
product = ask_opengtindb_service(gtin)
|
|
if product is not None:
|
|
return product
|
|
return None
|
|
|
|
|
|
def get_by_gtin(gtin):
|
|
try:
|
|
product = GtinProduct.objects.get(gtin=gtin)
|
|
except ObjectDoesNotExist:
|
|
# ask remote services
|
|
product = ask_remote_services(gtin)
|
|
return product
|