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

fix

parent e4f15b67
Pipeline #6101 passed with stage
in 53 seconds
'use strict'; 'use strict';
const cheerio = require('cheerio'); const cheerio = require('cheerio');
const request = require('request');
const Controller = require('egg').Controller; const Controller = require('egg').Controller;
const USER_AGENT = [ 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', '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 { ...@@ -173,7 +174,7 @@ class ToolController extends Controller {
floor: { type: 'string', required: true }, floor: { type: 'string', required: true },
total_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_id = input_params.residential_id;
const residential_name = input_params.residential_name; const residential_name = input_params.residential_name;
const area = input_params.area; const area = input_params.area;
...@@ -181,26 +182,28 @@ class ToolController extends Controller { ...@@ -181,26 +182,28 @@ class ToolController extends Controller {
const floor = input_params.floor; const floor = input_params.floor;
const total_floor = input_params.total_floor; const total_floor = input_params.total_floor;
const qfang_url_area = 'https://hangzhou.qfang.com/fangjia/area'; 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); console.info(qfang_url_chaxun);
const data = { // const data = {
userName: '', // userName: '',
gardenId: '', // gardenId: '',
gardenInternalID: 'c1283359-9995-4a52-ae76-ca06135b825c', // gardenInternalID: 'c1283359-9995-4a52-ae76-ca06135b825c',
name: '中天九溪诚品', // name: '中天九溪诚品',
area: 100, // area: 100,
floor: 2, // floor: 2,
totlaFloor: 6, // totlaFloor: 6,
directionStr: 'SOUTHEAST', // directionStr: 'SOUTHEAST',
buildingId: '', // buildingId: '',
building: '', // building: '',
roomNoId: '', // roomNoId: '',
roomNo: '', // roomNo: '',
subQueryType: 'quick', // subQueryType: 'quick',
} // }
await this.httprequest(qfang_url_chaxun, data); // await this.httprequest(qfang_url_chaxun, data);
return; // return;
const ret1 = await ctx.curl(qfang_url_area, { method: 'POST' }); const ret1 = await ctx.curl(qfang_url_area, { method: 'POST' });
const headers = ret1.headers; const headers = ret1.headers;
const cookies = headers['set-cookie']; const cookies = headers['set-cookie'];
...@@ -212,52 +215,70 @@ class ToolController extends Controller { ...@@ -212,52 +215,70 @@ class ToolController extends Controller {
const user_agent_length = USER_AGENT.length; const user_agent_length = USER_AGENT.length;
const random = Math.floor(Math.random() * user_agent_length); const random = Math.floor(Math.random() * user_agent_length);
const user_agent = USER_AGENT[random]; const user_agent = USER_AGENT[random];
console.info(ret1);
const ret2 = await ctx.curl(qfang_url_chaxun, { const ret2 = await new Promise((resolve, reject) => {
headers: { request({
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', url: qfang_url_chaxun,
'accept-encoding': 'gzip, deflate, br', jar: request.jar(),
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', headers: {
'cache-control': 'max-age=0', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'cookie': cookie, 'accept-encoding': 'gzip, deflate, br',
'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', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'upgrade-insecure-requests': 1, 'cache-control': 'max-age=0',
'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', 'cookie': cookie,
} 'referer': qfang_url_chaxun,
'upgrade-insecure-requests': 1,
'user-agent': user_agent,
}
}, 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) // 请求成功的处理逻辑
}
});
}); });
// 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('估算过程中出了点错,请稍后再试。');
}
// const html = ret2.data.toString('utf8'); let average_price = 0;
const $ = cheerio.load(html); let average_price_unit = '';
const average_price = $('p.title-result').text(); let total_price = 0;
// const total_price = $('#targetNum').html(); let total_price_unit = '';
const total_price = $('span.average-price', '.fl').text();
if (!average_price || !total_price) { if (ret2 && ret2.length !== 0) {
ctx.failed('估算过程中出了点错,请稍后再试!'); 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) {
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; 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 cookies = ret2.headers['set-cookie'];
var cookie = ''; var cookie = '';
for(let item in cookies) { for (let item in cookies) {
let cookie_items = cookies[item].split(';'); let cookie_items = cookies[item].split(';');
cookie += cookie_items[0] + '; '; cookie += cookie_items[0] + '; ';
} }
var request = require('request');
console.log(url) console.log(url)
request({ request({
url: url, url: url,
...@@ -273,11 +294,11 @@ class ToolController extends Controller { ...@@ -273,11 +294,11 @@ 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', '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(error)
console.log(response) console.log(response)
if (!error && response.statusCode == 200) { if (!error && response.statusCode == 200) {
var resultStr = body.replace(/\ +/g, ""); //去掉空格 var resultStr = body.replace(/\ +/g, ""); //去掉空格
resultStr = resultStr.replace(/[ ]/g, ""); //去掉空格 resultStr = resultStr.replace(/[ ]/g, ""); //去掉空格
...@@ -290,7 +311,7 @@ class ToolController extends Controller { ...@@ -290,7 +311,7 @@ class ToolController extends Controller {
} }
}); });
}; };
async getQFangAreaList() { async getQFangAreaList() {
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
"node-cache": "^4.2.0", "node-cache": "^4.2.0",
"parameter": "^3.3.1", "parameter": "^3.3.1",
"ramda": "^0.25.0", "ramda": "^0.25.0",
"request": "^2.88.0",
"uuid": "^3.3.2" "uuid": "^3.3.2"
}, },
"devDependencies": { "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