Showing
8 changed files
with
85 additions
and
31 deletions
| ... | @@ -1323,9 +1323,9 @@ | ... | @@ -1323,9 +1323,9 @@ |
| 1323 | }, | 1323 | }, |
| 1324 | "dependencies": { | 1324 | "dependencies": { |
| 1325 | "acorn": { | 1325 | "acorn": { |
| 1326 | - "version": "5.7.3", | 1326 | + "version": "5.7.4", |
| 1327 | - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", | 1327 | + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", |
| 1328 | - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" | 1328 | + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" |
| 1329 | } | 1329 | } |
| 1330 | } | 1330 | } |
| 1331 | }, | 1331 | }, |
| ... | @@ -8448,9 +8448,9 @@ | ... | @@ -8448,9 +8448,9 @@ |
| 8448 | }, | 8448 | }, |
| 8449 | "dependencies": { | 8449 | "dependencies": { |
| 8450 | "acorn": { | 8450 | "acorn": { |
| 8451 | - "version": "5.7.3", | 8451 | + "version": "5.7.4", |
| 8452 | - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", | 8452 | + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", |
| 8453 | - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" | 8453 | + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" |
| 8454 | }, | 8454 | }, |
| 8455 | "parse5": { | 8455 | "parse5": { |
| 8456 | "version": "4.0.0", | 8456 | "version": "4.0.0", |
| ... | @@ -15942,9 +15942,9 @@ | ... | @@ -15942,9 +15942,9 @@ |
| 15942 | }, | 15942 | }, |
| 15943 | "dependencies": { | 15943 | "dependencies": { |
| 15944 | "acorn": { | 15944 | "acorn": { |
| 15945 | - "version": "5.7.3", | 15945 | + "version": "5.7.4", |
| 15946 | - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", | 15946 | + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", |
| 15947 | - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" | 15947 | + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" |
| 15948 | }, | 15948 | }, |
| 15949 | "eslint-scope": { | 15949 | "eslint-scope": { |
| 15950 | "version": "4.0.3", | 15950 | "version": "4.0.3", | ... | ... |
| ... | @@ -6,7 +6,7 @@ const { Title } = Typography; | ... | @@ -6,7 +6,7 @@ const { Title } = Typography; |
| 6 | function App() { | 6 | function App() { |
| 7 | return ( | 7 | return ( |
| 8 | <div> | 8 | <div> |
| 9 | - <div style={{ display: 'flex', justifyContent: 'center', marginTop: '2rem' }}> | 9 | + <div style={{ display: 'flex', justifyContent: 'center', marginTop: '1rem' }}> |
| 10 | <Title level={2} >CHATBOT <Icon type="robot" /></Title> | 10 | <Title level={2} >CHATBOT <Icon type="robot" /></Title> |
| 11 | </div> | 11 | </div> |
| 12 | <div style={{ display: 'flex', justifyContent: 'center' }}> | 12 | <div style={{ display: 'flex', justifyContent: 'center' }}> | ... | ... |
| ... | @@ -11,7 +11,8 @@ function Chatbot() { | ... | @@ -11,7 +11,8 @@ function Chatbot() { |
| 11 | 11 | ||
| 12 | useEffect(() => { | 12 | useEffect(() => { |
| 13 | 13 | ||
| 14 | - eventQuery('welcomeToMyWebsite') | 14 | + eventQuery('001_Welcome') |
| 15 | + eventQuery('002_Intro') | ||
| 15 | 16 | ||
| 16 | }, []) | 17 | }, []) |
| 17 | 18 | ||
| ... | @@ -39,7 +40,7 @@ function Chatbot() { | ... | @@ -39,7 +40,7 @@ function Chatbot() { |
| 39 | } | 40 | } |
| 40 | try { | 41 | try { |
| 41 | if(inputString[0] === '@'){ | 42 | if(inputString[0] === '@'){ |
| 42 | - const response = await Axios.post('/api/crawling/textQuery', textQueryVariables) | 43 | + await Axios.post('/api/crawling/textQuery', textQueryVariables) |
| 43 | } else { | 44 | } else { |
| 44 | //I will send request to the textQuery ROUTE | 45 | //I will send request to the textQuery ROUTE |
| 45 | const response = await Axios.post('/api/dialogflow/textQuery', textQueryVariables) | 46 | const response = await Axios.post('/api/dialogflow/textQuery', textQueryVariables) |
| ... | @@ -47,7 +48,7 @@ function Chatbot() { | ... | @@ -47,7 +48,7 @@ function Chatbot() { |
| 47 | for (let content of response.data.fulfillmentMessages) { | 48 | for (let content of response.data.fulfillmentMessages) { |
| 48 | 49 | ||
| 49 | conversation = { | 50 | conversation = { |
| 50 | - who: 'bot', | 51 | + who: '소통이', |
| 51 | content: content | 52 | content: content |
| 52 | } | 53 | } |
| 53 | 54 | ||
| ... | @@ -57,7 +58,7 @@ function Chatbot() { | ... | @@ -57,7 +58,7 @@ function Chatbot() { |
| 57 | 58 | ||
| 58 | } catch (error) { | 59 | } catch (error) { |
| 59 | conversation = { | 60 | conversation = { |
| 60 | - who: 'bot', | 61 | + who: '소통이', |
| 61 | content: { | 62 | content: { |
| 62 | text: { | 63 | text: { |
| 63 | text: " Error just occured, please check the problem" | 64 | text: " Error just occured, please check the problem" |
| ... | @@ -77,13 +78,16 @@ function Chatbot() { | ... | @@ -77,13 +78,16 @@ function Chatbot() { |
| 77 | const eventQueryVariables = { | 78 | const eventQueryVariables = { |
| 78 | event | 79 | event |
| 79 | } | 80 | } |
| 81 | + | ||
| 82 | + | ||
| 83 | + | ||
| 80 | try { | 84 | try { |
| 81 | //I will send request to the textQuery ROUTE | 85 | //I will send request to the textQuery ROUTE |
| 82 | const response = await Axios.post('/api/dialogflow/eventQuery', eventQueryVariables) | 86 | const response = await Axios.post('/api/dialogflow/eventQuery', eventQueryVariables) |
| 83 | for (let content of response.data.fulfillmentMessages) { | 87 | for (let content of response.data.fulfillmentMessages) { |
| 84 | 88 | ||
| 85 | let conversation = { | 89 | let conversation = { |
| 86 | - who: 'bot', | 90 | + who: '소통이', |
| 87 | content: content | 91 | content: content |
| 88 | } | 92 | } |
| 89 | 93 | ||
| ... | @@ -93,7 +97,7 @@ function Chatbot() { | ... | @@ -93,7 +97,7 @@ function Chatbot() { |
| 93 | 97 | ||
| 94 | } catch (error) { | 98 | } catch (error) { |
| 95 | let conversation = { | 99 | let conversation = { |
| 96 | - who: 'bot', | 100 | + who: '소통이', |
| 97 | content: { | 101 | content: { |
| 98 | text: { | 102 | text: { |
| 99 | text: " Error just occured, please check the problem" | 103 | text: " Error just occured, please check the problem" |
| ... | @@ -110,7 +114,7 @@ function Chatbot() { | ... | @@ -110,7 +114,7 @@ function Chatbot() { |
| 110 | if (e.key === "Enter") { | 114 | if (e.key === "Enter") { |
| 111 | 115 | ||
| 112 | if (!e.target.value) { | 116 | if (!e.target.value) { |
| 113 | - return alert('you need to type somthing first') | 117 | + return alert('you need to type something first') |
| 114 | } | 118 | } |
| 115 | 119 | ||
| 116 | //we will send request to text query route | 120 | //we will send request to text query route |
| ... | @@ -136,7 +140,7 @@ function Chatbot() { | ... | @@ -136,7 +140,7 @@ function Chatbot() { |
| 136 | return <Message key={i} who={message.who} text={message.content.text.text} /> | 140 | return <Message key={i} who={message.who} text={message.content.text.text} /> |
| 137 | } else if (message.content && message.content.payload.fields.card) { | 141 | } else if (message.content && message.content.payload.fields.card) { |
| 138 | 142 | ||
| 139 | - const AvatarSrc = message.who === 'bot' ? <Icon type="robot" /> : <Icon type="smile" /> | 143 | + const AvatarSrc = message.who === '소통이' ? <Icon type="robot" /> : <Icon type="smile" /> |
| 140 | 144 | ||
| 141 | return <div> | 145 | return <div> |
| 142 | <List.Item style={{ padding: '1rem' }}> | 146 | <List.Item style={{ padding: '1rem' }}> |
| ... | @@ -175,10 +179,10 @@ function Chatbot() { | ... | @@ -175,10 +179,10 @@ function Chatbot() { |
| 175 | 179 | ||
| 176 | return ( | 180 | return ( |
| 177 | <div style={{ | 181 | <div style={{ |
| 178 | - height: 500, width: 700, | 182 | + height: 620, width: 700, |
| 179 | border: '3px solid black', borderRadius: '7px' | 183 | border: '3px solid black', borderRadius: '7px' |
| 180 | }}> | 184 | }}> |
| 181 | - <div style={{ height: 444, width: '100%', overflow: 'auto' }}> | 185 | + <div style={{ height: 564, width: '100%', overflow: 'auto' }}> |
| 182 | 186 | ||
| 183 | 187 | ||
| 184 | {renderMessage(messagesFromRedux)} | 188 | {renderMessage(messagesFromRedux)} | ... | ... |
| 1 | +@import url('https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap'); | ||
| 1 | * { | 2 | * { |
| 2 | word-break: keep-all; | 3 | word-break: keep-all; |
| 3 | overflow-wrap: break-word; | 4 | overflow-wrap: break-word; |
| ... | @@ -12,7 +13,7 @@ body { | ... | @@ -12,7 +13,7 @@ body { |
| 12 | body { | 13 | body { |
| 13 | margin: 0; | 14 | margin: 0; |
| 14 | padding: 0; | 15 | padding: 0; |
| 15 | - font-family: Lato, Helvetica Neue, Arial, Helvetica, sans-serif; | 16 | + font-family: Nanum Gothic,Lato, Helvetica Neue, Arial, Helvetica, sans-serif; |
| 16 | -webkit-font-smoothing: antialiased; | 17 | -webkit-font-smoothing: antialiased; |
| 17 | } | 18 | } |
| 18 | 19 | ... | ... |
| ... | @@ -4,15 +4,11 @@ const bodyParser = require("body-parser"); | ... | @@ -4,15 +4,11 @@ const bodyParser = require("body-parser"); |
| 4 | const app = express(); | 4 | const app = express(); |
| 5 | 5 | ||
| 6 | const config = require("./server/config/keys"); | 6 | const config = require("./server/config/keys"); |
| 7 | -// const mongoose = require("mongoose"); | ||
| 8 | -// mongoose.connect(config.mongoURI, { useNewUrlParser: true, useUnifiedTopology: true }) | ||
| 9 | -// .then(() => console.log('MongoDB Connected...')) | ||
| 10 | -// .catch(err => console.log(err)); | ||
| 11 | 7 | ||
| 12 | app.use(bodyParser.urlencoded({ extended: true })); | 8 | app.use(bodyParser.urlencoded({ extended: true })); |
| 13 | app.use(bodyParser.json()); | 9 | app.use(bodyParser.json()); |
| 14 | 10 | ||
| 15 | - | 11 | +app.use('/api/crawling', require('./server/routes/crawling')); |
| 16 | app.use('/api/dialogflow', require('./server/routes/dialogflow')); | 12 | app.use('/api/dialogflow', require('./server/routes/dialogflow')); |
| 17 | 13 | ||
| 18 | // Serve static assets if in production | 14 | // Serve static assets if in production | ... | ... |
server/cheerio/video.js
0 → 100644
| 1 | +const axios = require('axios'); | ||
| 2 | +const cheerio = require('cheerio'); | ||
| 3 | + | ||
| 4 | +/* | ||
| 5 | +한글 utf-8 인코딩해서 searchquery에 저장해야함. | ||
| 6 | +*/ | ||
| 7 | + | ||
| 8 | +function video(name){ | ||
| 9 | + console.log("My favorite singer",name) | ||
| 10 | + var url = 'https://tv.naver.com/search/clip?query=' //naverTV의 링크 | ||
| 11 | + var sort = '&sort=date' | ||
| 12 | + | ||
| 13 | + url = url + name + sort | ||
| 14 | + url = encodeURI(url) | ||
| 15 | + console.log("url is ",url) | ||
| 16 | + const getHtml = async() => { | ||
| 17 | + try{ | ||
| 18 | + return await axios.get(url); //axios.get 함수를 이용해서 비동기로 네이버티비의 해당 가수의 최신 영상 html 파일을 가져온다. | ||
| 19 | + } catch(error){ | ||
| 20 | + console.log("error! check your code"); | ||
| 21 | + } | ||
| 22 | + }; | ||
| 23 | + | ||
| 24 | + getHtml() | ||
| 25 | + .then(html => { | ||
| 26 | + let videoList = []; | ||
| 27 | + const $ = cheerio.load(html.data); | ||
| 28 | + const $bodyList = $("div.src_wrap div.thl ").children("div.thl_a"); | ||
| 29 | + | ||
| 30 | + $bodyList.each(function(i, elem){ | ||
| 31 | + videoList[i] = { | ||
| 32 | + thumbnail : $(this).find('a.cds_thm').children('img').attr('src'), | ||
| 33 | + title : $(this).find('a.cds_thm').attr('title'), | ||
| 34 | + link : "https://tv.naver.com/" + $(this).find('a.cds_thm').attr('href') | ||
| 35 | + } | ||
| 36 | + }) | ||
| 37 | + | ||
| 38 | + const data = videoList.filter(n => n.title); | ||
| 39 | + return data; | ||
| 40 | + }) | ||
| 41 | + .then(res=>console.log(res)); | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +module.exports = video; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
server/routes/crawling.js
0 → 100644
| 1 | +const express = require('express'); | ||
| 2 | +const router = express.Router(); | ||
| 3 | +const uuid = require('uuid'); //uuid 제대로 이해하고 다시 작성하기. | ||
| 4 | +const getvideo = require('../cheerio/video'); | ||
| 5 | +//@가수명 으로 입력이 들어왔을 때, 가수명만 받아서 | ||
| 6 | + | ||
| 7 | +router.post('/textQuery',async(req,res)=>{ | ||
| 8 | + const result = req.body.text; | ||
| 9 | + console.log(result.substring(1)); | ||
| 10 | + getvideo(result.substring(1)); | ||
| 11 | + res.send(result); | ||
| 12 | +}) | ||
| 13 | + | ||
| 14 | +module.exports = router; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -15,14 +15,9 @@ const languageCode = config.dialogFlowSessionLanguageCode | ... | @@ -15,14 +15,9 @@ const languageCode = config.dialogFlowSessionLanguageCode |
| 15 | const sessionClient = new dialogflow.SessionsClient(); | 15 | const sessionClient = new dialogflow.SessionsClient(); |
| 16 | const sessionPath = sessionClient.sessionPath(projectId, sessionId); | 16 | const sessionPath = sessionClient.sessionPath(projectId, sessionId); |
| 17 | 17 | ||
| 18 | -// We will make two routes | ||
| 19 | - | ||
| 20 | - | ||
| 21 | // Text Query Route | 18 | // Text Query Route |
| 22 | 19 | ||
| 23 | router.post('/textQuery', async (req, res) => { | 20 | router.post('/textQuery', async (req, res) => { |
| 24 | - //We need to send some information that comes from the client to Dialogflow API | ||
| 25 | - // The text query request. | ||
| 26 | const request = { | 21 | const request = { |
| 27 | session: sessionPath, | 22 | session: sessionPath, |
| 28 | queryInput: { | 23 | queryInput: { | ... | ... |
-
Please register or login to post a comment