Skip to content

MykheiSilchuk/McDonald-s-Menu-Scraper-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍔 McDonald's Menu Scraper & API

Цей проєкт виконує повний цикл:

  1. Скрапінг меню McDonald's Україна (асинхронно).
  2. Збереження даних у JSON.
  3. 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          # документація

🚀 Як запустити

1️⃣ Клонування репозиторію

git clone https://github.com/your-username/mcdonalds-menu-api.git
cd mcdonalds-menu-api

2️⃣ Створення віртуального середовища

python -m venv venv
source venv/bin/activate   # Linux/MacOS
venv\Scripts\activate      # Windows

3️⃣ Встановлення залежностей

pip install -r requirements.txt

📌 requirements.txt можна згенерувати командою:

pip freeze > requirements.txt

4️⃣ Збір даних

python scraper.py

У результаті буде створено файл products.json з усіма продуктами.

5️⃣ Запуск API

python app.py

API за замовчуванням запускається на http://127.0.0.1:5000/.


🔗 REST API ендпоінти

Отримати всі продукти

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 'Біг Мак'

About

Асинхронний скрейпер меню McDonald's Україна з API на Flask. Збирає дані про всі страви (назви, опис, алергени, нутрієнти), зберігає у JSON та надає доступ через REST API.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages