Цей проєкт виконує повний цикл:
- Скрапінг меню McDonald's Україна (асинхронно).
- Збереження даних у JSON.
- REST API на Flask для доступу до зібраної інформації.
- Python 3.9+
- requests — отримання HTML.
- BeautifulSoup4 — парсинг головної сторінки.
- aiohttp + asyncio — асинхронні запити до API McDonald's.
- Flask — REST API для роботи з даними.
- logging — централізоване логування.
.
├── scraper.py # асинхронний збір даних з меню
├── data_manager.py # збереження та завантаження JSON
├── app.py # Flask REST API
├── products.json # (створюється після збору даних)
└── README.md # документація
git clone https://github.com/your-username/mcdonalds-menu-api.git
cd mcdonalds-menu-apipython -m venv venv
source venv/bin/activate # Linux/MacOS
venv\Scripts\activate # Windowspip install -r requirements.txt📌
requirements.txtможна згенерувати командою:
pip freeze > requirements.txtpython scraper.pyУ результаті буде створено файл products.json з усіма продуктами.
python app.pyAPI за замовчуванням запускається на http://127.0.0.1:5000/.
GET /all_products/📌 Приклад відповіді:
[
{
"name": "Біг Мак",
"id": "12345",
"description": "Два біфштекси зі 100% яловичини...",
"алергени": "Глютен, молоко",
"калорії": "510 ккал",
"жири": "26 г",
"вуглеводи": "42 г"
},
...
]GET /products/<search_term>📌 Приклад:
GET /products/мак✅ Повертає всі продукти, в назві яких є мак.
GET /products/<product_name>/<field>📌 Приклад:
GET /products/Біг Мак/калорії📌 Відповідь:
{
"калорії": "510 ккал"
}Проєкт використовує logging замість print().
Вивід у консоль показує:
- час
- рівень повідомлення (INFO, WARNING, ERROR)
- текст події
Приклад:
2025-09-23 14:15:02 [INFO] Parsing the main page: https://www.mcdonalds.com/ua/uk-ua/eat/fullmenu.html
2025-09-23 14:15:05 [INFO] Found 120 products. Starting async data retrieval...
2025-09-23 14:15:07 [WARNING] No products found matching 'чай'
2025-09-23 14:15:09 [ERROR] Field 'вітаміни' not found for product 'Біг Мак'