bitbot-3.11-fork/modules/upc.py

51 lines
1.8 KiB
Python
Raw Normal View History

from src import ModuleManager, utils
2018-07-25 12:05:37 +00:00
UPCITEMDB_URL = "https://api.upcitemdb.com/prod/trial/lookup"
class Module(ModuleManager.BaseModule):
2018-07-25 12:05:37 +00:00
_name = "UPC"
@utils.hook("received.command.upc|ean|gtin", min_args=1)
2018-07-25 12:05:37 +00:00
def upc(self, event):
"""
:help: Look up a product by UPC, EAN or GTIN
:usage: <UPC|EAN|GTIN>
"""
2018-07-25 12:05:37 +00:00
arg_len = len(event["args_split"][0])
if not arg_len == 12 and not arg_len == 13:
raise utils.EventError("Invalid UPC/EAN/GTIN provided")
2018-07-25 12:05:37 +00:00
page = utils.http.get_url(UPCITEMDB_URL,
2018-07-25 12:05:37 +00:00
get_params={"upc": event["args_split"][0]},
json=True)
if page:
if not len(page["items"]):
raise utils.EventError("UPC/EAN not found")
2018-07-25 12:05:37 +00:00
item = page["items"][0]
2018-07-25 12:43:13 +00:00
brand = item.get("brand", None)
brand = "" if not brand else "%s - " % brand
2018-07-25 12:05:37 +00:00
title = item["title"]
2018-07-25 12:43:13 +00:00
description = item.get("description", None)
description = " " if not description else ": %s " % description
weight = item.get("weight", None)
weight = weight or "unknown"
size = item.get("dimension", None)
size = size or "unknown"
currency = item.get("currency", None)
lowest_price = item.get("lowest_recorded_price", None)
highest_price = item.get("highest_recorded_price", None)
pricing = "price: unknown"
if lowest_price and highest_price and currency:
pricing = "price: %s to %s %s" % (
lowest_price, highest_price, currency)
event["stdout"].write("%s%s%s(weight: %s"
", size: %s, price: %s)" % (
brand, title, description, weight, size, pricing))
2018-07-25 12:05:37 +00:00
else:
raise utils.EventsResultsError()