index.js 2.34 KB
'use strict';

const ROOT_PATH = global.ROOT_PATH;
const _ = require('lodash');
const rp = require('request-promise');
const util = require(`${ROOT_PATH}/libs/util`);
const senUrl = 'http://data.zz.baidu.com/urls?appid=1583402501013173&token=K0L5PUhk1XOko81r&type=';

class XzhIndexModel extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    index() {
        // 新增
        return this.getLastArticleList({page: 1, limit: 100}).then(rdata => {
            rdata = _.get(rdata, 'data.artList', []);

            return this.sendData(rdata, 'realtime');
        });
    }

    sendDataHistory(page) {
        return util.sleep(3000).then(() => {
            return this.getLastArticleList({page: 1, limit: 1000});
        }).then(rdata => {
            let code = rdata.code || 400;

            rdata = _.get(rdata, 'data.artList', []);

            if (code === 200 && rdata.length <= 0) {
                return false;
            }

            return this.sendData(rdata).then(result => {
                console.log(`sendDataHistory => result: ${JSON.stringify(result)}, page: ${page} `);
                return this.sendDataHistory(++page);
            });
        });
    }

    // 向百度发送数据
    sendData(data, type) {

        if (data.length <= 0) {
            return Promise.resolve({code: 400, data:{}, message: 'data is empty'});
        }

        type = type || 'batch';

        data = _.map(data, item => {
            return `https://m.yohobuy.com/mip/guang/${item.articleId}.html`;
        });

        return rp({
            method: 'POST',
            uri: `${senUrl}${type}`,
            body: data.join('\n'),
            timeout: 8 * 1000
        }).then(result => {
            return JSON.parse(result || '{}');
        }).catch(e => {
            console.log(e.message);
            return {code: 400, data: {}, message: e.message};
        });
    }

    getLastArticleList(params) {
        params = _.assign({
            limit: 100,
            udid: 'seo_format_data'
        }, params);

        return this.get({
            url: '/guang/api/v2/article/getLastArticleList',
            data: params,
            api: global.yoho.ServiceAPI
        }).catch(e => {
            console.log(e.message);
            return {code: 400, data: {}, message: e.message};
        });
    }
}

module.exports = XzhIndexModel;