김서영

add search.js description

...@@ -10,6 +10,13 @@ const searchURL = { ...@@ -10,6 +10,13 @@ const searchURL = {
10 "google" : "https://www.google.com/search?" 10 "google" : "https://www.google.com/search?"
11 } 11 }
12 12
13 +/**
14 + * @param {string} keywordText 검색할 키워드
15 + * @param {cheerio} $ cheerio임.
16 + * @param {string} elem 내용을 찾을 html의 selector인거같음
17 + * @return {boolean} 찾았다면 true
18 + * @description 주어진 html의 selector에서 keyword의 내용을 찾아 여부를 반환
19 + */
13 const keywordChecking = ( keywordText, $, elem ) => { 20 const keywordChecking = ( keywordText, $, elem ) => {
14 let tempCheck = false; 21 let tempCheck = false;
15 keywordText.split( ' ' ).forEach( ( Word ) => { 22 keywordText.split( ' ' ).forEach( ( Word ) => {
...@@ -24,6 +31,13 @@ const keywordChecking = ( keywordText, $, elem ) => { ...@@ -24,6 +31,13 @@ const keywordChecking = ( keywordText, $, elem ) => {
24 return false; 31 return false;
25 } 32 }
26 33
34 +/**
35 + * @param {Object} searchResult 검색된 내용이 담긴 빈 오브젝트
36 + * @param {cheerio} $ cheerio임.
37 + * @param {string} elem 내용을 찾을 html의 selector인거같음
38 + * @param {string} defaultURL url이 없을 경우 달아주는 비상용 원래 링크
39 + * @description 구글용 title passage 찾기함수
40 + */
27 const google = ( searchResult, $, elem , defaultURL ) => { 41 const google = ( searchResult, $, elem , defaultURL ) => {
28 searchResult.passage = entities.decode( $( elem ).parent().parent().parent().text()).trim(), 42 searchResult.passage = entities.decode( $( elem ).parent().parent().parent().text()).trim(),
29 searchResult.url = decodeURIComponent( $( elem ).attr( "href" ) ); 43 searchResult.url = decodeURIComponent( $( elem ).attr( "href" ) );
...@@ -38,6 +52,13 @@ const google = ( searchResult, $, elem , defaultURL ) => { ...@@ -38,6 +52,13 @@ const google = ( searchResult, $, elem , defaultURL ) => {
38 } 52 }
39 } 53 }
40 54
55 +/**
56 + * @param {object} searchResult 검색된 내용이 담긴 빈 오브젝트
57 + * @param {cheerio} $ cheerio임.
58 + * @param {string} elem 내용을 찾을 html의 selector인거같음
59 + * @param {string} defaultURL url이 없을 경우 달아주는 비상용 원래 링크
60 + * @description 네이버용 title passage 찾기함수
61 + */
41 const naver = ( searchResult, $, elem , defaultURL ) => { 62 const naver = ( searchResult, $, elem , defaultURL ) => {
42 searchResult.title = $( elem ).parent().attr( "title" ); 63 searchResult.title = $( elem ).parent().attr( "title" );
43 searchResult.passage = entities.decode( $( elem ).parent().parent().parent().text()).trim(), 64 searchResult.passage = entities.decode( $( elem ).parent().parent().parent().text()).trim(),
...@@ -48,6 +69,12 @@ const naver = ( searchResult, $, elem , defaultURL ) => { ...@@ -48,6 +69,12 @@ const naver = ( searchResult, $, elem , defaultURL ) => {
48 } 69 }
49 } 70 }
50 71
72 +/**
73 + * @param {{title:string,passage:string,ulr:string}} searchResult 검색 결과가 담긴 object
74 + * @param {[]} result 최종 결과가 담기는 어레이
75 + * @param {boolean} keywordCheck 키워드가 확인됐는지 여부
76 + * @description 타이틀이 없을 경우 달아주거나 중복된 것들 제거하는 등의 역활을 해 최종적으로 결과에 담아주는 함수
77 + */
51 const searchToResult = (searchResult, result, keywordCheck) => { 78 const searchToResult = (searchResult, result, keywordCheck) => {
52 searchResult.passage = searchResult.passage.replace( /(http(s)?:\/\/)([a-z0-9\w]+\.*)+[a-z0-9]{2,4}/gi, ' ' ).replace( /\s{1,}|\s{1,}|\r\n|\r|\n/g, ' ' ).trim(); 79 searchResult.passage = searchResult.passage.replace( /(http(s)?:\/\/)([a-z0-9\w]+\.*)+[a-z0-9]{2,4}/gi, ' ' ).replace( /\s{1,}|\s{1,}|\r\n|\r|\n/g, ' ' ).trim();
53 80
...@@ -70,6 +97,15 @@ const searchToResult = (searchResult, result, keywordCheck) => { ...@@ -70,6 +97,15 @@ const searchToResult = (searchResult, result, keywordCheck) => {
70 } 97 }
71 } 98 }
72 99
100 +/**
101 + * @param {string} main 검색할 사이트의 메인 내용이 들어있는 셀렉터를 줘야합니다.
102 + * @param {string} keywordText 분석할 키워드의 내용
103 + * @param {string} html html 파싱한 내용
104 + * @param {string} defaultURL url이 없을 경우 달아주는 비상용 원래 링크
105 + * @param {()=>{}} findSearchResult search result를 찾아주는 함수
106 + * @returns {{url:string,title:string,passage:string}[]} object 여러 개를 가진 list를 준다. 각 json의 url, title, passage로 접근가능
107 + * @description html을 크롤링한 데이터에서 url title passage를 캐오는 함수이다.
108 + */
73 const getHtmlMain = ( main, keywordText, html, defaultURL, findSearchResult ) => { 109 const getHtmlMain = ( main, keywordText, html, defaultURL, findSearchResult ) => {
74 const $ = cheerio.load( html ); 110 const $ = cheerio.load( html );
75 let result = []; 111 let result = [];
...@@ -86,6 +122,11 @@ const getHtmlMain = ( main, keywordText, html, defaultURL, findSearchResult ) => ...@@ -86,6 +122,11 @@ const getHtmlMain = ( main, keywordText, html, defaultURL, findSearchResult ) =>
86 122
87 const search = {}; 123 const search = {};
88 124
125 +/**
126 + * @param {string} keywordText 검색할 내용
127 + * @returns {{url:string,title:string,passage:string}[]} object 여러 개를 가진 list를 준다. 각 json의 url, title, passage로 접근가능
128 + * @description 네이버에서 키워드의 내용을 크롤링해온다.
129 + */
89 search.naver = ( keywordText ) => { 130 search.naver = ( keywordText ) => {
90 return new Promise( async ( resolve, reject ) => { 131 return new Promise( async ( resolve, reject ) => {
91 let naverMain = "#main_pack strong", 132 let naverMain = "#main_pack strong",
...@@ -104,6 +145,11 @@ search.naver = ( keywordText ) => { ...@@ -104,6 +145,11 @@ search.naver = ( keywordText ) => {
104 }) 145 })
105 } 146 }
106 147
148 +/**
149 + * @param {string} keywordText 검색할 내용
150 + * @returns {{url:string,title:string,passage:string}[]} object 여러 개를 가진 list를 준다. 각 json의 url, title, passage로 접근가능
151 + * @description 구글에서 키워드의 내용을 크롤링해온다.
152 + */
107 search.google = ( keywordText ) => { 153 search.google = ( keywordText ) => {
108 return new Promise( ( resolve, reject ) => { 154 return new Promise( ( resolve, reject ) => {
109 let googleMain = "#main a", 155 let googleMain = "#main a",
......