review.controller.js 1.97 KB
Newer Older
1
import Review from '../models/Review.js'
Kim, Chaerin's avatar
Kim, Chaerin committed
2
import cheerio, { html } from "cheerio";
3
4
5
import jschardet from 'jschardet'
import iconv from 'iconv'
import fs from 'fs'
Kim, Chaerin's avatar
서연    
Kim, Chaerin committed
6
import axios from 'axios';
Kim, Chaerin's avatar
Kim, Chaerin committed
7
import { nextTick } from 'process';
8
9
const Iconv = iconv.Iconv

Kim, Chaerin's avatar
Kim, Chaerin committed
10
11
12
const search = async (req, res, next) => {
    try {
        let reviews = []
13
14
        let content = []
        const url = "https://www.google.com/search?q=" + encodeURI(req.params.search) + "+site%3Atistory.com&page_no=1"
Kim, Chaerin's avatar
Kim, Chaerin committed
15
        const response1 = await axios.get(url)
16
        // console.log(response1.data)
Kim, Chaerin's avatar
Kim, Chaerin committed
17
18
19
        const $1 = cheerio.load(response1.data);
        $1('.kCrYT').each(async function (i) {
            const title = $1(this).find('h3').text()
20
            const searchParams = new URLSearchParams($1(this).find('a').attr('href'));
Kim, Chaerin's avatar
Kim, Chaerin committed
21
22
            const link = searchParams.get("/url?q")
            const summary = $1(this).find('.s3v9rd').find('.s3v9rd').text()
23
            content.push(getReview(title, link, summary))
Kim, Chaerin's avatar
Kim, Chaerin committed
24
            if (title) {
25
                reviews[i] = { title: title, link: link }
Kim, Chaerin's avatar
Kim, Chaerin committed
26
27
28
29
            } else if (summary) {
                reviews[i - 1] = { ...reviews[i - 1], summary: summary }
                reviews = reviews.filter(e => e)
            }
30
        })
31
32
33
34
35
36
37
        const promiseReview = await Promise.all(content)
        reviews.forEach((review, i) => {
            review["content"] = promiseReview[i]
        })
        // reviews = { ...reviews, ...promiseReview }
        console.log("reviews", reviews)
        // console.log(promiseReview)
Kim, Chaerin's avatar
Kim, Chaerin committed
38
39
40
41
        res.send(reviews)
    } catch (error) {
        console.log(error)
        res.send(error)
42
43
44
    }
}

45
const getReview = async (title, link, summary) => {
Kim, Chaerin's avatar
Kim, Chaerin committed
46
    let content = '없음'
47
48
49
50
51
52
    if (link) {
        const res = await axios.get(link)
        const $2 = cheerio.load(res.data);
        if ($2('.tt_article_useless_p_margin').text()) {
            content = $2('.tt_article_useless_p_margin').text()
        }
Kim, Chaerin's avatar
Kim, Chaerin committed
53
54
55
    }
    return content
}
Kim, Chaerin's avatar
?    
Kim, Chaerin committed
56

Kim, Chaerin's avatar
Kim, Chaerin committed
57
export default { search, getReview }