import Review from '../models/Review.js' import cheerio from "cheerio"; // import jschardet from 'jschardet' // import iconv from 'iconv' // import fs from 'fs' import axios from 'axios'; // const Iconv = iconv.Iconv // const search = async (req, res) => { // const url = "https://www.google.com/search?q=" + encodeURI(req.params.search) + "+site%3Atistory.com&page_no=1" // const editUrl = /(http(s)?:\/\/)([a-z0-9\w]+\.*)+[a-z0-9]{2,4}/gi // axios.get(url) // // .then(anyToUtf8) // .then((html) => { // // fs.writeFileSync("googlez.txt", '\ufeff' + html, { encoding: 'utf8' }); // let $1 = cheerio.load(html.data); // let reviews = [] // $1('.kCrYT').each(function (i) { // let link = "" // if ($1(this).find('a').attr('href')) { // link = ($1(this).find('a').attr('href')).match(editUrl) // } // reviews[i] = { // title: $1(this).find('h3').text(), // link: link, // summary: $1(this).find('.s3v9rd').text(), // } // }) // // reviews.forEach((review, i) => { // // axios.get(review.link) // // .then((html) => { // // let $2 = cheerio.load(html.data); // // $2('').each(function(i){ // // review.content($2(this).find(''.text())) // // }) // // }) // // }) // console.log(reviews) // res.send(reviews) // }) // // function anyToUtf8(str) { // // const { encoding } = jschardet.detect(str); // 웹페이지 문서의 인코딩 타입을 확인 // // const iconv = new Iconv(encoding, "utf-8//translit//ignore"); // euc-kr 인코딩변환 // // return iconv.convert(str).toString(); // // } // // try { // // const newPlace = await new Place({ // // name: req.params.search, // // address, // // img, // // }) // // } const search = async (req, res, next) => { try { let reviews = [] let content = [] const url = "https://www.google.com/search?q=" + encodeURI(req.params.search) + "+site%3Atistory.com&page_no=1" const response1 = await axios.get(url) // console.log(response1.data) const $1 = cheerio.load(response1.data); $1('.kCrYT').each(async function (i) { const title = $1(this).find('h3').text() const searchParams = new URLSearchParams($1(this).find('a').attr('href')); const link = searchParams.get("/url?q") const summary = $1(this).find('.s3v9rd').find('.s3v9rd').text() content.push(getReview(link)) if (title) { reviews[i] = { title: title, link: link } } else if (summary) { reviews[i - 1] = { ...reviews[i - 1], summary: summary } reviews = reviews.filter(e => e) } }) const promiseReview = await Promise.all(content) reviews.forEach(async(review, i) => { review["content"] = promiseReview[i] }) res.send(reviews) } catch (error) { console.log(error) res.send(error) } } const getReview = async (link) => { let content = '없음' 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() } } return content } export default { search, getReview }