'use strict'
const axios = require('axios')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')
const DB_HOST = process.env[`DB_HOST`]
const DB_PORT = process.env[`DB_PORT`]
const DB_DATABASE = process.env[`DB_DATABASE`]
const DB_USER = process.env[`DB_USER`]
const DB_PASSWORD = process.env[`DB_PASSWORD`]
const promisePool = require('mysql2')
.createPool({
host: DB_HOST,
user: DB_USER,
port: DB_PORT,
password: DB_PASSWORD,
database: DB_DATABASE,
connectionLimit: 1
})
.promise()
const createRequestUrl = function(page) {
return `http://tieba.baidu.com/f/search/res?isnew=1&kw=%BD%A3%CD%F83%D6%B8%BC%E2%BD%AD%BA%FE&qw=818&rn=10&un=&only_thread=1&sm=1&sd=&ed=&pn=${page}`
}
exports.main_handler = async (event, context, callback) => {
const chunks = []
const items = []
const result = await axios.get(createRequestUrl(event.page), {
responseType: 'stream'
})
const data = await new Promise(resolve => {
result.data.on('data', chunk => {
chunks.push(chunk)
})
result.data.on('end', () => {
const buffer = Buffer.concat(chunks)
const text = iconv.decode(buffer, 'gbk')
const $ = cheerio.load(text)
$('.s_post_list .s_post').each((index, element) => {
const $element = $(element)
if (
!$element.find('.p_title .user_head').length
) {
items.push([
$element.children('.p_content').text(),
$element
.find('.p_violet')
.text()
.slice(7),
$element.find('.p_title a').attr().href,
$element.find('.p_title a').text()
])
}
})
resolve(items)
})
})
if (data.length) {
await promisePool.query(
`INSERT IGNORE INTO storyList ( content,violet,href,title ) VALUES ?`,
[data]
)
}
return {
code: 0,
data: data
}
}