Skip to content

Instantly share code, notes, and snippets.

@alighafoori
Forked from SamadiPour/snappfood.js
Last active July 6, 2022 11:02
Show Gist options
  • Save alighafoori/1927de1a077b0012f4a9982a3e1059a0 to your computer and use it in GitHub Desktop.
Save alighafoori/1927de1a077b0012f4a9982a3e1059a0 to your computer and use it in GitHub Desktop.
Snappfood extract statistics
cookies = Object.fromEntries(document.cookie.split('; ').map(c => c.split('=')));
let UDID = cookies.UDID;
let jwt = cookies[['jwt-access_token']];
// let jwt = JSON.parse(window.localStorage.JWT).access_token;
var myHeaders = new Headers();
myHeaders.append("authority", "snappfood.ir");
myHeaders.append("accept", "application/json, text/plain, */*");
myHeaders.append("accept-language", "en-US,en;q=0.9,fa;q=0.8");
myHeaders.append("authorization", "Bearer " + jwt);
myHeaders.append("content-type", "application/x-www-form-urlencoded");
myHeaders.append("referer", "https://snappfood.ir/profile/orders");
myHeaders.append("sec-ch-ua", "\".Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"103\", \"Chromium\";v=\"103\"");
myHeaders.append("sec-ch-ua-mobile", "?1");
myHeaders.append("sec-ch-ua-platform", "\"Android\"");
myHeaders.append("sec-fetch-dest", "empty");
myHeaders.append("sec-fetch-mode", "cors");
myHeaders.append("sec-fetch-site", "same-origin");
myHeaders.append("user-agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36");
const requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
let response = await fetch(`https://snappfood.ir/mobile/v1/order/reorder?optionalClient=WEBSITE&client=WEBSITE&deviceType=WEBSITE&appVersion=8.1.1&UDID=${UDID}&page=0&size=5000&locale=fa`, requestOptions);
const content = (await response.json()).data.orders;
let price = 0;
let discount = 0;
function Detail(orders,total,discount,orderCanceled,delivery){
this.orders=orders
this.total=total
this.discount=discount
this.orderCanceled=orderCanceled
this.delivery=delivery
}
let stat={all:new Detail(0,0,0,0,0), months:{},days:{},dayOfWeeks:{},vendors:{},hourse:{}}
function setStat(order,stat){
if (order.orderCanceled) {
stat.orderCanceled+=1
} else {
stat.total += order['totalPrice'];
stat.discount += order['sumAllDiscount'];
stat.orders+=1
stat.delivery+=order['deliveryFee']
}
}
for (let i = 0; i < content.length; i++) {
let order = content[i];
setStat(order,stat.all)
let dsp=order.date.split(" ")
if(!stat.dayOfWeeks[dsp[0]])stat.dayOfWeeks[dsp[0]]=new Detail(0,0,0,0,0)
setStat(order,stat.dayOfWeeks[dsp[0]])
if(!stat.days[dsp[1]])stat.days[dsp[1]]=new Detail(0,0,0,0,0)
setStat(order,stat.days[dsp[1]])
if(!stat.months[dsp[2]])stat.months[dsp[2]]=new Detail(0,0,0,0,0)
setStat(order,stat.months[dsp[2]])
let ts=order.time.split(":")
if(!stat.hourse[ts[0]])stat.hourse[ts[0]]=new Detail(0,0,0,0,0)
setStat(order,stat.hourse[ts[0]])
if(!stat.vendors[order.vendorTitle])stat.vendors[order.vendorTitle]=new Detail(0,0,0,0,0)
setStat(order,stat.vendors[order.vendorTitle])
}
console.log(JSON.stringify(stat))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment