-
-
Save alighafoori/1927de1a077b0012f4a9982a3e1059a0 to your computer and use it in GitHub Desktop.
Snappfood extract statistics
This file contains hidden or 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
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