Commit be97b8ef authored by 李尚科's avatar 李尚科

fix

parent e4f15b67
Pipeline #6101 passed with stage
in 53 seconds
'use strict';
const cheerio = require('cheerio');
const request = require('request');
const Controller = require('egg').Controller;
const USER_AGENT = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36',
......@@ -173,7 +174,7 @@ class ToolController extends Controller {
floor: { type: 'string', required: true },
total_floor: { type: 'string', required: true },
};
ctx.validate(rule, input_params);
// ctx.validate(rule, input_params);
const residential_id = input_params.residential_id;
const residential_name = input_params.residential_name;
const area = input_params.area;
......@@ -181,26 +182,28 @@ class ToolController extends Controller {
const floor = input_params.floor;
const total_floor = input_params.total_floor;
const qfang_url_area = 'https://hangzhou.qfang.com/fangjia/area';
const qfang_url_chaxun = 'https://hangzhou.qfang.com/fangjia/chaxun?userName=&gardenId=&gardenInternalID=1f552c71-2747-4539-aeaa-0fc37a6dcd10&name=%E4%B8%87%E9%83%BD%E6%99%B6%E5%BA%A7&area=12&floor=2&totlaFloor=10&directionStr=SOUTHEAST&buildingId=&building=&roomNoId=&roomNo=&subQueryType=quick';
// const query_string = encodeURIComponent(`userName=&gardenId=&gardenInternalID=${residential_id}&name=${residential_name}&area=${area}&floor=${floor}&totlaFloor=${total_floor}&directionStr=${direction_str}&buildingId=&building=&roomNoId=&roomNo=&subQueryType=quick`);
// const qfang_url_chaxun = 'https://hangzhou.qfang.com/fangjia/chaxun?userName=&gardenId=&gardenInternalID=1f552c71-2747-4539-aeaa-0fc37a6dcd10&name=%E4%B8%87%E9%83%BD%E6%99%B6%E5%BA%A7&area=12&floor=2&totlaFloor=10&directionStr=SOUTHEAST&buildingId=&building=&roomNoId=&roomNo=&subQueryType=quick';
const qfang_url_chaxun = `https://hangzhou.qfang.com/fangjia/chaxun?userName=&gardenId=&gardenInternalID=${residential_id}&name=${encodeURIComponent(residential_name)}&area=${area}&floor=${floor}&totlaFloor=${total_floor}&directionStr=${direction_str}&buildingId=&building=&roomNoId=&roomNo=&subQueryType=quick`;
console.info(qfang_url_chaxun);
const data = {
userName: '',
gardenId: '',
gardenInternalID: 'c1283359-9995-4a52-ae76-ca06135b825c',
name: '中天九溪诚品',
area: 100,
floor: 2,
totlaFloor: 6,
directionStr: 'SOUTHEAST',
buildingId: '',
building: '',
roomNoId: '',
roomNo: '',
subQueryType: 'quick',
}
await this.httprequest(qfang_url_chaxun, data);
return;
// const data = {
// userName: '',
// gardenId: '',
// gardenInternalID: 'c1283359-9995-4a52-ae76-ca06135b825c',
// name: '中天九溪诚品',
// area: 100,
// floor: 2,
// totlaFloor: 6,
// directionStr: 'SOUTHEAST',
// buildingId: '',
// building: '',
// roomNoId: '',
// roomNo: '',
// subQueryType: 'quick',
// }
// await this.httprequest(qfang_url_chaxun, data);
// return;
const ret1 = await ctx.curl(qfang_url_area, { method: 'POST' });
const headers = ret1.headers;
const cookies = headers['set-cookie'];
......@@ -212,52 +215,70 @@ class ToolController extends Controller {
const user_agent_length = USER_AGENT.length;
const random = Math.floor(Math.random() * user_agent_length);
const user_agent = USER_AGENT[random];
console.info(ret1);
const ret2 = await ctx.curl(qfang_url_chaxun, {
const ret2 = await new Promise((resolve, reject) => {
request({
url: qfang_url_chaxun,
jar: request.jar(),
headers: {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'max-age=0',
'cookie': cookie,
'referer': 'https://hangzhou.qfang.com/fangjia/chaxun?userName=&gardenId=&gardenInternalID=F3365A31BBB6F477E040A8C112002A44&name=%E5%9F%8E%E4%B8%AD%E8%8A%B1%E5%9B%AD&area=100&floor=1&totlaFloor=12&directionStr=NORTHSOUTH&buildingId=&building=&roomNoId=&roomNo=&subQueryType=quick',
'referer': qfang_url_chaxun,
'upgrade-insecure-requests': 1,
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
});
// ctx.success(ret2);
// return ;
ctx.logger.info('qfang_url_chaxun_result: ' + JSON.stringify(ret2));
const html = ret2.data.toString('utf8');
//console.info(html);
if (ret2.status !== 200) {
ctx.failed('估算过程中出了点错,请稍后再试。');
'user-agent': user_agent,
}
// const html = ret2.data.toString('utf8');
const $ = cheerio.load(html);
const average_price = $('p.title-result').text();
// const total_price = $('#targetNum').html();
const total_price = $('span.average-price', '.fl').text();
}, function (error, response, body) {
ctx.logger.info('qfang_url_chaxun_result: ' + JSON.stringify(response));
// ctx.logger.info('qfang_url_chaxun_html: ' + body);
if (!error && response.statusCode == 200) {
var resultStr = body.replace(/\ +/g, ""); //去掉空格
resultStr = resultStr.replace(/[ ]/g, ""); //去掉空格
resultStr = resultStr.replace(/[\r\n]/g, ""); //去掉回车换行
resultStr = resultStr.replace(/[\n]/g, ""); //去掉换行
resultStr = resultStr.replace(/[\r]/g, ""); //去掉回车
resolve(body) // 请求成功的处理逻辑
}
});
});
let average_price = 0;
let average_price_unit = '';
let total_price = 0;
let total_price_unit = '';
if (ret2 && ret2.length !== 0) {
const $ = cheerio.load(ret2);
average_price_unit = $('p.title-result span').text();
average_price = parseFloat($('.average-price-data p.title-result').text().replace(average_price_unit, ''));
total_price = parseFloat($('#targetNum').text());
total_price_unit = $('span.average-price', '.fl').text().replace(total_price, '');
if (!average_price || !total_price) {
ctx.failed('估算过程中出了点错,请稍后再试!');
average_price = 0;
average_price_unit = '';
total_price = 0;
total_price_unit = '';
}
}
ctx.success({ average_price, total_price });
ctx.success({ average_price, average_price_unit, total_price, total_price_unit });
}
async httprequest(url, data){
//并无实际用途 只用于调试测试用
async httprequest(url, data) {
const { ctx } = this;
let ret2 = await ctx.curl('https://hangzhou.qfang.com/fangjia/area', { method: 'POST', data: data});
let ret2 = await ctx.curl('https://hangzhou.qfang.com/fangjia/area', { method: 'POST', data: data });
var cookies = ret2.headers['set-cookie'];
var cookie = '';
for(let item in cookies) {
for (let item in cookies) {
let cookie_items = cookies[item].split(';');
cookie += cookie_items[0] + '; ';
}
var request = require('request');
console.log(url)
request({
url: url,
......@@ -273,7 +294,7 @@ class ToolController extends Controller {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
}, function(error, response, body) {
}, function (error, response, body) {
//console.log(error)
console.log(response)
if (!error && response.statusCode == 200) {
......
......@@ -24,6 +24,7 @@
"node-cache": "^4.2.0",
"parameter": "^3.3.1",
"ramda": "^0.25.0",
"request": "^2.88.0",
"uuid": "^3.3.2"
},
"devDependencies": {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment