Showing
1 changed file
with
46 additions
and
0 deletions
... | @@ -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", | ... | ... |
-
Please register or login to post a comment