const axios = require('axios'); const cheerio = require('cheerio'); async function listMenu() { const url = 'https://www.mcdonalds.co.id/menu'; const headers = { 'User-Agent': 'Mozilla/5.0' }; const res = await axios.get(url, { headers }); const $ = cheerio.load(res.data); const menus = []; $('section.section-menu-list').each((_, section) => { const cat = $(section).attr('id') || 'Unknown'; $(section).find('a.card-menu').each((_, card) => { const name = $(card).find('p').text().trim(); if (name) { menus.push({ name: name, category: cat, image: $(card).find('img').attr('src'), url: $(card).attr('href') }); } }); }); return menus; } async function searchMenu(category) { const url = 'https://www.mcdonalds.co.id/menu'; const headers = { 'User-Agent': 'Mozilla/5.0' }; const res = await axios.get(url, { headers }); const $ = cheerio.load(res.data); const results = []; $('section.section-menu-list').each((_, section) => { if ($(section).attr('id') === category) { $(section).find('a.card-menu').each((_, card) => { const name = $(card).find('p').text().trim(); if (name) { results.push({ name: name, image: $(card).find('img').attr('src'), url: $(card).attr('href') }); } }); } }); return results; } async function detailMenu(url) { const headers = { 'User-Agent': 'Mozilla/5.0' }; const res = await axios.get(url, { headers }); const $ = cheerio.load(res.data); const title = $('h2.title').first().text().trim() || null; const desc = $('p.subtitle').first().text().trim() || null; const image = $('img.img-fluid.animated.vp-slideinleft.delayp3').first().attr('src') || null; const nutrition = {}; const fat = $('.nutrition_weight-value-fat').data('val'); if (fat) nutrition.fat = parseFloat(fat); const protein = $('.nutrition_weight-value-protein').data('val'); if (protein) nutrition.protein = parseFloat(protein); const carbs = $('.nutrition_weight-value-karbohidrat').data('val'); if (carbs) nutrition.carbs = parseFloat(carbs); const energy = $('.nutrition_weight-value-energy').data('val'); if (energy) nutrition.energy = parseFloat(energy); if (Object.keys(nutrition).length === 0) { nutrition.available = false; } else { nutrition.available = true; } return { title, desc, image, nutrition, url }; } listMenu().then(data => console.log(JSON.stringify(data, null, 2))); searchMenu('Sarapan Pagi').then(data => console.log(JSON.stringify(data, null, 2))); detailMenu('https://www.mcdonalds.co.id/menu/chicken-muffin').then(data => console.log(JSON.stringify(data, null, 2)));