Last active
November 11, 2023 09:24
-
-
Save Pourghannad/45aba406a68549ca23820f509864d647 to your computer and use it in GitHub Desktop.
snapp-food sort resturant menu by price
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let allRestaurantProduct = []; | |
const UUID = document.cookie.split("UUID=")[1].split(";")[0]; | |
const vendorID = | |
window.location.pathname.split("/")[3].split("-").length === 1 | |
? window.location.pathname.split("/")[3] | |
: window.location.pathname.split("/")[3].split("-")[2]; | |
fetch( | |
`https://snappfood.ir/mobile/v2/restaurant/details/dynamic?optionalClient=WEBSITE&client=WEBSITE&deviceType=WEBSITE&appVersion=8.1.1&UDID=${UUID}&vendorCode=${vendorID}&show_party=1&fetch-static-data=1&locale=fa`, | |
{ | |
headers: { | |
accept: "application/json, text/plain, */*", | |
"accept-language": "en-GB,en-US;q=0.9,en;q=0.8", | |
"content-type": "application/x-www-form-urlencoded", | |
"sec-fetch-dest": "empty", | |
"sec-fetch-mode": "cors", | |
"sec-fetch-site": "same-origin", | |
}, | |
referrer: `https://snappfood.ir/confectionery/menu/${vendorID}`, | |
referrerPolicy: "strict-origin-when-cross-origin", | |
body: null, | |
method: "GET", | |
mode: "cors", | |
credentials: "include", | |
} | |
) | |
.then((res) => res.json()) | |
.then((res) => { | |
res.data.menus.forEach((menu) => { | |
if (menu.categoryId !== 1 && menu.categoryId !== 4) { | |
menu.products.forEach((product) => { | |
allRestaurantProduct.push(product); | |
}); | |
} | |
}); | |
}) | |
.then(() => { | |
sortedProducts(true); | |
}); | |
const sortedProducts = (sortType) => { | |
const sorted = allRestaurantProduct.sort( | |
sortType | |
? (x, y) => (x.price < y.price ? -1 : x.price > y.price ? 1 : 0) | |
: (x, y) => (x.price > y.price ? -1 : x.price < y.price ? 1 : 0) | |
); | |
const sortedHTML = sorted.map((product) => { | |
return ` | |
<div class="sc-citwmv jQhxGx"> | |
<section class="sc-dlfnbm ProductCard__Box-sc-1wfx2e0-0 dUormP cDIPGb"> | |
<div cursor="pointer" class="sc-dlfnbm ProductCard__Body-sc-1wfx2e0-2 fBrhOL jnbSAm"> | |
<div> | |
<h2 class="sc-hKgILt esHHju">${ | |
product.title | |
}</h2><strong class="sc-hKgILt fYlAbO">${ | |
product.description | |
}</strong> | |
</div> | |
<div class="ProductCard__ImgWrapper-sc-1wfx2e0-3 gWgJa-D"><img alt="${ | |
product.title | |
}" | |
src="${ | |
product.images && | |
product.images[0] && | |
product.images[0].imageThumbnailSrc | |
? product.images[0].imageThumbnailSrc | |
: "" | |
}" | |
loading="lazy" width="112" height="112"></div> | |
</div> | |
<div class="sc-dlfnbm dUormP"> | |
<footer class="sc-dlfnbm ProductCard__Footer-sc-1wfx2e0-1 iTOHqT iOANJo"> | |
<div class="sc-dlfnbm indexstyles__Container-sc-12ty73j-0 iTOHqT inAVCp"> | |
<div class="sc-dlfnbm dSQnRH"> | |
<div class="sc-dlfnbm jZmgpb"> | |
<div class="sc-dlfnbm cwaYxy"> | |
<div class="sc-dlfnbm hmnfCP"><span class="sc-hKgILt hxREoh">${new Intl.NumberFormat( | |
"fa", | |
{ useGrouping: true } | |
).format(product.price)} <span | |
class="sc-hKgILt cnaQBH">تومان</span></span></div> | |
</div> | |
</div> | |
</div> | |
<div class="sc-dlfnbm indexstyles__AddRemoveWrapper-sc-1f5wecv-0 LBOlG kbYkee"><button | |
class="sc-fFubgz kNRNFK Buttonsstyles__AddButton-sc-1ysvht6-2 ewbiVE" | |
dir="rtl">افزودن</button></div> | |
</div> | |
</footer> | |
</div> | |
</section> | |
</div> | |
`; | |
}); | |
const sortMainGrid = document.createElement("div"); | |
sortMainGrid.className = "menu-category-wrapper sorted-base-container"; | |
sortMainGrid.innerHTML = ` | |
<h3 class="menu-category-title sorted-title"> | |
مرتب شده براساس قیمت | |
<b style="color: #000;font-size: 18px;cursor: pointer;">${ | |
sortType ? "کم به زیاد" : "زیاد به کم" | |
}</b> | |
</h3> | |
<div class="kk-grid-menu-category-container" id="menu-category--sorted"> | |
<div class="row" style="position: relative;"></div> | |
</div>`; | |
const mainSnappFoodListGrid = document.querySelector( | |
"#__next > div > main > div > section > section" | |
); | |
mainSnappFoodListGrid.prepend(sortMainGrid); | |
const sortedContainer = document.querySelector("#menu-category--sorted .row"); | |
sortedContainer.innerHTML = sortedHTML.join(" ").trim(); | |
document.querySelector(".menu-category-title.sorted-title b").onclick = | |
() => { | |
document.querySelector(".sorted-base-container").remove(); | |
sortedProducts(!sortType); | |
}; | |
}; |
The script is not working!
not found https://snappfood.ir/restaurant/menu/new-menu/load?code=city&date=today&time=-1%20404 i
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://twitter.com/Pourghannad/status/1150887054051557379