diff --git a/client/src/Pages/Search.js b/client/src/Pages/Search.js index dbdb27c0506c57d8253a16a2b2e8f71a7b2a71c7..0add168464c9d3d224ef721be9f83f61aec31ef8 100644 --- a/client/src/Pages/Search.js +++ b/client/src/Pages/Search.js @@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react'; import { Link, Redirect } from 'react-router-dom'; import ohuh from '../ohuh-sm.PNG'; import Place from '../Components/Place'; -import { Container, Form, Row, Col, Card, Image, InputGroup, FormControl, Button} from 'react-bootstrap'; +import { Container, Form, Row, Col, Card, Image, InputGroup, FormControl, Button } from 'react-bootstrap'; import Paginations from '../Components/Paginations'; import axios from 'axios'; import queryString from 'query-string' @@ -17,6 +17,7 @@ function Search(props) { const [place, setPlace] = useState([{ name: "", category: "", address: "" }]) const [imgUrl, setImgUrl] = useState([]) const [association, setAssociation] = useState([]) + const getImg = () => { axios.get(`/api/search/imges?keyword=${search}`) .then(res => { @@ -39,15 +40,15 @@ function Search(props) { }) } - const getAssociation =() => { + const getAssociation = () => { axios.get(`/api/search/association?keyword=${search}`) - .then(res => { - console.log("Associations = ", res.data) - setAssociation(res.data) - }) - .catch(err => { - console.log("search.associations 에러 발생", err) - }) + .then(res => { + console.log("Associations = ", res.data) + setAssociation(res.data) + }) + .catch(err => { + console.log("search.associations 에러 발생", err) + }) } @@ -61,11 +62,13 @@ function Search(props) { } else { setMobile(false) } - }, []); - - - + if (state) { + props.history.push('/search?keyword=' + search) + setState(false) + console.log("search야", search) + } + }, [search]); const places = [{ @@ -91,10 +94,14 @@ function Search(props) { }] if (state !== false) { - return ; + // console.log(queryString.parse(props.location.search)) + // = {keyword:search} + // return ; + // history.pushState(null, null, "?"+queryParams.toString()); + // return ; } const handlePage = (num) => { @@ -107,6 +114,7 @@ function Search(props) { } const handleSubmit = (e) => { + // e.preventDefault() setState(true); } @@ -158,7 +166,7 @@ function Search(props) { showArr[index] = true setShowSet(showArr) }}>{place.name} 자세히 살펴보기 - setShowSet([false, false, false, false])} /> + setShowSet([false, false, false, false])} /> diff --git a/server/controllers/place.controller.js b/server/controllers/place.controller.js index f4d2093fb3923a8282dd475f7926924a07219ac2..ebb9ccf83cb013a5e496466f945c78534220bed5 100644 --- a/server/controllers/place.controller.js +++ b/server/controllers/place.controller.js @@ -5,87 +5,96 @@ import axios from 'axios'; const searchPlace = async (req, res) => { - const url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=" + encodeURI(req.query.keyword) - const editUrl = /(http(s)?:\/\/)([a-z0-9\w]+\.*)+[a-z0-9]{2,4}/gi - axios.get(url) - .then(async (response) => { - const html = response.data - // console.log(html) - fs.writeFileSync("googleReview", html, { encoding: 'utf-8' }) - let $1 = cheerio.load(html); + let DuplicateCheckPlace = await Places.findOne({ name: req.query.keyword }) - let places = {} - $1('.ct_box_area').each(function (i) { - - - // console.log($1('.biz_name').text()) - // console.log($1('.category').text()) - // console.log($1('.addr').text()) - // console.log($1('.t?ime highlight').text()) - - - places[i] = { name: $1('.biz_name').text(), category: $1('.category').text(), address: $1('.addr').text() } + if (DuplicateCheckPlace) { + res.send(DuplicateCheckPlace) + console.log("11111111111111111111111Place################ 기존플레이스줄력중") + } + else { + console.log("2222222222222222222222222222222222222222222222222222222") + const url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=" + encodeURI(req.query.keyword) + const editUrl = /(http(s)?:\/\/)([a-z0-9\w]+\.*)+[a-z0-9]{2,4}/gi + axios.get(url) + .then(async (response) => { + const html = response.data + // fs.writeFileSync("googleReview", html, { encoding: 'utf-8' }) + let $1 = cheerio.load(html); + + let places = {} + $1('.ct_box_area').each(function (i) { + places[i] = { name: $1('.biz_name').text(), category: $1('.category').text(), address: $1('.addr').text() } + }) + // 값이 비어있거나 에러가 생겼을 때를 대비해 try catch를 해야함 + const newPlaces = await new Places(places[0] + ).save() + res.send(places) }) - }) + } } const searchImg = async (req, res) => { - const imgUrl = "https://www.google.com/search?q=" + encodeURI(req.query.keyword) + "+site:tistory.com/&sxsrf=ALeKk023Dv08KQDodRmpB5222lQuzw2Vaw:1610612821100&source=lnms&tbm=isch" - axios.get(imgUrl) - .then(async (response) => { - const html = response.data - let name = req.query.keyword - let $1 = cheerio.load(html); + let DuplicateCheckImg = await Places.findOne({ name: req.query.keyword }) + + if (DuplicateCheckImg) { + if (DuplicateCheckImg.img !== "https://t1.daumcdn.net/thumb/R600x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fqna%2Fimage%2F4b035cdf8372d67108f7e8d339660479dfb41bbd") { + res.send(DuplicateCheckImg) + console.log("333333333333333333333333333IMG@@@@@@@@@@@@@@@@@@@ 기존이미지줄력중") + } + else if (DuplicateCheckImg.img === "https://t1.daumcdn.net/thumb/R600x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fqna%2Fimage%2F4b035cdf8372d67108f7e8d339660479dfb41bbd") { + console.log("4444444444444444444444444444444444444444444444444") + const imgUrl = "https://www.google.com/search?q=" + encodeURI(req.query.keyword) + "+site:tistory.com/&sxsrf=ALeKk023Dv08KQDodRmpB5222lQuzw2Vaw:1610612821100&source=lnms&tbm=isch" axios.get(imgUrl) .then(async (response) => { const html = response.data - let name = req.params.search + let name = req.query.keyword let $1 = cheerio.load(html); let images = $1('.RAyV4b').find('img').attr('src') //사진만 업데이트 - let Place = await Places.findOne({ name: req.params.search }) + let Place = await Places.findOne({ name: req.query.keyword }) Place.times.push(new Date().toLocaleString()) - await Places.updateOne({ name: req.params.search }, { img: images, times: Place.times }) - - const newPlaces = await new Places( - ).save() + await Places.updateOne({ name: req.query.keyword }, { img: images, times: Place.times }) res.send(images) }) - //사진만 업데이트 - let Place = await Places.findOne({ name: req.query.keyword }) - Place.times.push(new Date().toLocaleString()) - await Places.updateOne({ name: req.query.keyword }, { img: images, times: Place.times }) + } else { + console.log("IMG에러") + } + } - }) + } const searchAssociation = async (req, res) => { let Place = await Places.findOne({ name: req.query.keyword }) - if (!Place) { - res.send([]) - } + // if (!Place) { + // res.send([]) + // } + if (!Place) { + res.status(404).send({ error: "Place.address is null" }) + } + else { let addresse = Place.address.split(' ')[0] - // let AssociationsId = [] - + let AssociationsId = [] let addressPlaces = new RegExp(`${addresse}`) + console.log("여기보세요", addressPlaces) let responsePlaces = await Places.find({ address: addressPlaces }) res.send(responsePlaces) - - // responsePlaces.map(Association => { - // AssociationsId.push(Association._id) - // }) - // console.log("Associations = ", Associations) - // res.send(AssociationsId) } + // responsePlaces.map(Association => { + // AssociationsId.push(Association._id) + // }) + // console.log("Associations = ", Associations) + // res.send(AssociationsId) +} export default { searchImg, searchPlace, searchAssociation }