UNPKG

cky-image-public

Version:

public image to public host

93 lines (82 loc) 2.59 kB
const fs = require("fs"); const cheerio = require('cheerio'); const async = require('async'); const _ = require('lodash'); const request = require('request').defaults({ headers: { // 'upgrade-insecure-requests': 1, 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' }, jar: true }) let helper = require('../helper'); class Imgeto { constructor (options = {}) { this.cookie = request.jar(); } upload (imgPath, callback) { async.waterfall([ (next) => { request({ url: 'https://imge.to/', method: 'GET', jar: this.cookie }, (err, response, body) => { if (err) return next('EGETHOMEPAGE', err); let $ = cheerio.load(body); let scripts = $('script'); let _find = null; _.forEach(scripts, (s) => { let content = $(s).html(); if (content && content.indexOf('token') > -1) { _find = s; return false; } }); if (!_find) return next('EPARSETOKEN'); let token = $(_find).html(); token = token.substr(token.indexOf('token')); token = token.substr(0, token.indexOf(';')) console.log('token=', token); token = token.substr(token.indexOf('"')+1, token.lastIndexOf('"')-1); token = token.replace(/\"/g, ''); console.log('token=', token); return next(null, token); }); }, (auth_token, next) => { request({ url: 'https://imge.to/json', method: 'POST', headers: { origin: 'https://imge.to', 'accept-language': 'en-US,en;q=0.9,vi;q=0.8', 'content-type': 'multipart/form-data', accept: 'application/json', referer: 'https://imge.to', authority: 'imge.to' }, jar: this.cookie, formData: { source: { value: fs.createReadStream(imgPath), options: { filename: imgPath, contentType: 'image/jpeg' } }, type: 'file', action: 'upload', timestamp: new Date().getTime(), auth_token } }, (err, response, body) => { if (err) return next('EUPLOAD', err); body = helper.safeParse(body); return next(null, body); }); } ], callback); } } module.exports = Imgeto;