43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
import json
|
|
from typing import Dict, List
|
|
import requests
|
|
from bs4.element import Tag
|
|
|
|
from supermarket_chain import SupermarketChain
|
|
|
|
|
|
class ZolVebegadol(SupermarketChain):
|
|
def __repr__(self):
|
|
return 'Zol-Vebegadol'
|
|
|
|
class XMLFilesCategory(SupermarketChain.XMLFilesCategory):
|
|
All, Promos, PromosFull, Prices, PricesFull, Stores = range(6)
|
|
|
|
promotion_tag_name = 'Promotion'
|
|
promotion_update_tag_name = 'PromotionUpdateDate'
|
|
date_format = '%Y-%m-%d'
|
|
date_hour_format = '%Y-%m-%d %H:%M:%S'
|
|
item_tag_name = 'Item'
|
|
|
|
@staticmethod
|
|
def get_download_url(store_id: int, category: SupermarketChain.XMLFilesCategory) -> str:
|
|
prefix = "http://zolvebegadol.binaprojects.com"
|
|
url = prefix + "/MainIO_Hok.aspx"
|
|
req_res: requests.Response = requests.get(url)
|
|
jsons_files = json.loads(req_res.text)
|
|
suffix = next(cur_json["FileNm"] for cur_json in jsons_files if f'-{store_id:03d}-20' in cur_json["FileNm"]
|
|
and category.name.replace('s', '') in cur_json["FileNm"])
|
|
down_url = '/'.join([prefix, "Download", suffix])
|
|
print(down_url)
|
|
return down_url
|
|
|
|
@staticmethod
|
|
def get_items(promo: Tag, items_dict: Dict[str, str]) -> List[str]:
|
|
items = list()
|
|
for item in promo.find_all('Item'):
|
|
item_code = item.find('ItemCode').text
|
|
full_item_info = items_dict.get(item_code)
|
|
if full_item_info:
|
|
items.append(full_item_info)
|
|
return items
|