const axios = require('axios'); async function pinterest(query) { try { const url = `https://id.pinterest.com/resource/BaseSearchResource/get/?source_url=/search/pins/?q=${query}&rs=rs&data=${encodeURIComponent(JSON.stringify({ options: { query: query, rs: "rs", scope: "pins", redux_normalize_feed: true, source_url: `/search/pins/?q=${encodeURIComponent(query)}&rs=rs` }, context: {} }))}`; const res = await axios.get(url, { headers: { "accept": "application/json, text/javascript, */*; q=0.01", "x-pinterest-appstate": "active", "x-pinterest-pws-handler": "www/search/[scope].js", "x-requested-with": "XMLHttpRequest", "user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36", "referer": "https://id.pinterest.com/", "accept-language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7" } }); if (res.status !== 200) { return { error: `Pinterest error ${res.status} ${res.statusText}` }; } let json; try { json = res.data; } catch (err) { return { error: "Invalid JSON response: " + err.message }; } const results = json.resource_response?.data?.results || []; if (results.length === 0) return { error: "No results" }; const formatted = results.map(pin => ({ id: pin.id, title: pin.seo_alt_text || "No Title", image: pin.images?.["474x"]?.url || pin.images?.["236x"]?.url || null, board: pin.board?.name || "-", username: pin.pinner?.username || "-", source: `https://id.pinterest.com/pin/${pin.id}/` })); return { query, count: formatted.length, results: formatted }; } catch (e) { return { error: e.message }; } } module.exports = { pinterest };