import urllib.request, json from itertools import combinations_with_replacement headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'} req = urllib.request.Request('https://api.kfcvietnam.com.vn/menu/kfcvn-generic-menu', headers=headers) with urllib.request.urlopen(req) as resp: data = json.loads(resp.read().decode('utf-8')) subcats = data['categories'][0]['categories'] # Define target required items: # req_items = {'ga_ran': 5, 'banh_trung': 2, 'ga_quay': 1, 'com': 1, 'khoai_nghien_vua': 1, 'bap_cai_lon': 1, 'nuoc_ngot': 1} # Let's inspect all items and see which ones provide any of these components menu_items = [] for sc in subcats: cname = sc.get('name') for p in sc.get('products') or []: for it in p.get('items') or []: vname = '' for dn in it.get('dname', []): if dn.get('lang') == 'vn': vname = dn.get('value').strip() vdesc = '' for ds in it.get('description', []): if ds.get('lang') == 'vn': vdesc = ds.get('value').strip() price = it.get('price') if price == 0: continue # free vouchers/upsells menu_items.append({ 'id': it.get('id'), 'cat': cname, 'name': vname or it.get('name'), 'desc': vdesc, 'price': price, 'strike': it.get('strikePrice') }) print(f"Total active priced menu items: {len(menu_items)}") for m in menu_items: # check if relevant text = (m['name'] + ' ' + m['desc']).lower() if any(k in text for k in ['gà', 'trứng', 'quay', 'cơm', 'nghiền', 'bắp cải', 'pepsi', 'deal', 'xô', 'combo']): print(f"[{m['cat']}] {m['name']} ({m['price']:,}d) -> {m['desc']}")