sanuwa-npm
Version:
npm package for sanuwa-api
101 lines (97 loc) • 3.44 kB
JavaScript
const fetch = require("node-fetch");
const cheerio = require("cheerio");
const cookie = require("cookie");
const axios = require("axios");
const FormData = require("form-data");
function gaspost(url, form1, headers = {}) {
let e = encodeURIComponent
pormdata = form1.replace('{"radio":"', '"radio=').replace('"}', '"')
tespor = 'radio0=radio=ok'
const formdata = JSON.parse(form1)
let body = Object.keys(formdata).map(key => {
let vals = formdata[key]
let isArray = Array.isArray(vals)
let keyq = e(key + (isArray ? '[]' : ''))
if (!isArray) vals = [vals]
let out = []
for (let valq of vals) out.push(keyq + '=' + e(valq))
return out.join('&')
}).join('&')
body2 = body.split('radio0=%5Bobject%20Object%5D').join('radio0%5Bradio%5D=' + formdata.radio0.radio)
//console.log(formdata)
return axios(url, {
method: 'POST',
headers: {
accept: '/',
'accept-language': "en-US,en;q=0.9",
'content-type': "application/x-www-form-urlencoded; charset=UTF-8",
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
...headers
},
data: body2
})
}
async function ephoto4(url, texts = ['text'], radio0) {
if (!/^https:\/\/en.ephoto360\.com\/.+\.html$/.test(url)) throw new Error('Invalid URL')
let res = await axios.get(url, {
method: 'GET',
headers: {
accept: '/',
'accept-language': "en-US,en;q=0.9",
'content-type': "application/x-www-form-urlencoded; charset=UTF-8",
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
})
let html = res.data
//console.log(res.headers)
const cfuid = res.headers['set-cookie'][0].split(',').map(v => cookie.parse(v)).reduce((a, c) => {
return {
...a,
...c
}
}, {})
//console.log('ini cfuid == ' + cfuid)
const phpses = res.headers['set-cookie'][0].split(',').map(v => cookie.parse(v)).reduce((a, c) => {
return {
...a,
...c
}
}, {})
cookies = {
_cfduid: cfuid._cfduid,
PHPSESSID: phpses.PHPSESSID,
}
let forms = {
submit: 'Create a photo',
token: /name="token".*value="(.+?)"/.exec(html)[1],
build_server: 'https://s1.ephoto360.com/',
build_server_id: 1,
"radio0[radio]": radio0
}
let form = new FormData
if (typeof texts === 'string') texts = [texts]
for (let text of texts) form.append('text[]', text)
for (let key in forms) form.append(key, forms[key])
cookies = Object.entries(cookies).map(([name, value]) => cookie.serialize(name, value)).join('; ')
//console.log(cookies)
let res2 = await axios(url, {
method: 'POST',
headers: {
accept: '/',
'accept-language': "en-US,en;q=0.9",
...form.getHeaders(),
cookie: cookies,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
},
data: form.getBuffer()
})
let html2 = res2.data
let form_value = /name="form_value_input".*value="(.+?)"/.exec(html2)
if (!form_value) throw new Error('Token invalid? ' + /No token/i.test(html2))
let tokenval = form_value[1].split('"').join('"')
let res3 = await gaspost('https://en.ephoto360.com/effect/create-image', tokenval, {
cookie: cookies
})
return await `https://s1.ephoto360.com${res3.data.image}`
}
module.exports = ephoto4;