Spaces:
Sleeping
Sleeping
File size: 6,469 Bytes
e79fbb1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
def EatEasy_Json_extract(url_input):
import requests
import json
from bs4 import BeautifulSoup
from urllib.parse import urlparse
payload1 = {'restId': '17902'}
files = []
headers2 = {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': 'eateasy-ae-website=lai3mvcb9hd99nnivbt0pn68ibfjsd6g'
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
parsed_url = urlparse(url_input)
restaurant_code = parsed_url.path.strip('/').split('/')[-1]
url = "https://www.eateasy.ae/dubai/food/getFilteredMenus"
data = {
"restCode": restaurant_code
}
response = requests.post(url_input, data=data)
menu_items_list = []
category_name_list = []
j = 0
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
menu_item_boxes = soup.find_all('div', class_='menu-item-box') # Find all divs with class 'menu-item-box'
location_area = soup.find('div', class_='location-area').text
location_name = soup.find('div', class_='location').text
for i,item_box in enumerate(menu_item_boxes): # Iterate over each menu item box
img = item_box.find('img') # Find the img tag within the div
if img: # Check if img tag exists
image_url = img.get('data-image') # Get the value of 'data-image' attribute
else:
image_url = None # If image URL is not found
menu_item_details = item_box.find('div', class_='menu-item-details') # Find menu-item-details div
if menu_item_details:
category = menu_item_details.find('p', class_='type').text.strip()
name = menu_item_details.find('h5', class_='menu-food-title').text.strip()
description = menu_item_details.find('p', itemprop='description').text.strip()
price = menu_item_details.find('div', class_='menu-item-price').text.strip()
else:
# If menu-item-details not found, set defaults
category = ""
name = ""
description = ""
price = ""
menu_list_options = item_box.find('a', class_='menu-list-options') # Find the menu-list-options anchor tag
if menu_list_options:
item_id = menu_list_options.get('value') # Get the value attribute
else:
item_id = None
if category not in category_name_list:
category_name_list.append(category)
j = j+1
Category_position = j
else:
Category_position = j
menu_item = {
"Category": category,
"Category_position": Category_position,
"Item_name": name,
"Item_position": i,
"Image": image_url,
"Description": description,
"Price": price,
"ID": item_id,
"Option_groups": []
}
if item_id is not None:
url1 = f"https://www.eateasy.ae/dubai/order/add_to_cart_v1/{item_id}/1/"
response = requests.request("POST", url1, headers=headers2, data=payload1, files=files)
if response.status_code == 200:
try:
json_data = response.json()
option_group_data = {}
if 'arrResult' in json_data and 'arrFoodChoice' in json_data['arrResult']:
for option_group in json_data['arrResult']['arrFoodChoice']:
group_name = option_group['choice_name']
min_quantity = option_group['mandatory']
max_quantity = max((option_group['max_choice']), "1")
option_group_item = next((x for x in menu_item['Option_groups'] if x['Option_group_name'] == group_name), None)
if option_group_item:
option_group_item['Option_group_names'].append({
"Option_name": option_group['name'],
"Option_price": option_group['price']
})
else:
menu_item['Option_groups'].append({
"Option_group_name": group_name,
"Min": min_quantity,
"Max": max_quantity,
"Option_group_names": [{
"Option_name": option_group['name'],
"Option_price": option_group['price']
}]
})
except json.JSONDecodeError:
print("JSON decoding error. Response content may not be in valid JSON format.")
else:
print(f"Failed to get data for item with value {item_id}. Status code: {response.status_code}")
if not menu_item['Option_groups']:
menu_item["Has_choice"] = False
else:
menu_item["Has_choice"] = True
menu_items_list.append(menu_item)
else:
print(f"Failed to get menu items. Status code: {response.status_code}")
# Convert the list of menu items into JSON
# with open(f'{restaurant_code}.json', 'w') as json_file:
# json.dump(menu_items_list, json_file, indent=4)
print(f"Menu items saved to {restaurant_code}.json file.")
return json.dumps(menu_items_list, indent=4) , restaurant_code |