Toggle navigation
Toggle navigation
This project
Loading...
Sign in
bluejoyq
/
searchGuide
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
김서영
2019-12-05 01:57:03 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
494f4ddca2f0118e8a2c99053f64d6c30aa1b246
494f4ddc
1 parent
8ce55ce5
add search.js description
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
0 deletions
api/search.js
api/search.js
View file @
494f4dd
...
...
@@ -10,6 +10,13 @@ const searchURL = {
"google"
:
"https://www.google.com/search?"
}
/**
* @param {string} keywordText 검색할 키워드
* @param {cheerio} $ cheerio임.
* @param {string} elem 내용을 찾을 html의 selector인거같음
* @return {boolean} 찾았다면 true
* @description 주어진 html의 selector에서 keyword의 내용을 찾아 여부를 반환
*/
const
keywordChecking
=
(
keywordText
,
$
,
elem
)
=>
{
let
tempCheck
=
false
;
keywordText
.
split
(
' '
).
forEach
(
(
Word
)
=>
{
...
...
@@ -24,6 +31,13 @@ const keywordChecking = ( keywordText, $, elem ) => {
return
false
;
}
/**
* @param {Object} searchResult 검색된 내용이 담긴 빈 오브젝트
* @param {cheerio} $ cheerio임.
* @param {string} elem 내용을 찾을 html의 selector인거같음
* @param {string} defaultURL url이 없을 경우 달아주는 비상용 원래 링크
* @description 구글용 title passage 찾기함수
*/
const
google
=
(
searchResult
,
$
,
elem
,
defaultURL
)
=>
{
searchResult
.
passage
=
entities
.
decode
(
$
(
elem
).
parent
().
parent
().
parent
().
text
()).
trim
(),
searchResult
.
url
=
decodeURIComponent
(
$
(
elem
).
attr
(
"href"
)
);
...
...
@@ -38,6 +52,13 @@ const google = ( searchResult, $, elem , defaultURL ) => {
}
}
/**
* @param {object} searchResult 검색된 내용이 담긴 빈 오브젝트
* @param {cheerio} $ cheerio임.
* @param {string} elem 내용을 찾을 html의 selector인거같음
* @param {string} defaultURL url이 없을 경우 달아주는 비상용 원래 링크
* @description 네이버용 title passage 찾기함수
*/
const
naver
=
(
searchResult
,
$
,
elem
,
defaultURL
)
=>
{
searchResult
.
title
=
$
(
elem
).
parent
().
attr
(
"title"
);
searchResult
.
passage
=
entities
.
decode
(
$
(
elem
).
parent
().
parent
().
parent
().
text
()).
trim
(),
...
...
@@ -48,6 +69,12 @@ const naver = ( searchResult, $, elem , defaultURL ) => {
}
}
/**
* @param {{title:string,passage:string,ulr:string}} searchResult 검색 결과가 담긴 object
* @param {[]} result 최종 결과가 담기는 어레이
* @param {boolean} keywordCheck 키워드가 확인됐는지 여부
* @description 타이틀이 없을 경우 달아주거나 중복된 것들 제거하는 등의 역활을 해 최종적으로 결과에 담아주는 함수
*/
const
searchToResult
=
(
searchResult
,
result
,
keywordCheck
)
=>
{
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
();
...
...
@@ -70,6 +97,15 @@ const searchToResult = (searchResult, result, keywordCheck) => {
}
}
/**
* @param {string} main 검색할 사이트의 메인 내용이 들어있는 셀렉터를 줘야합니다.
* @param {string} keywordText 분석할 키워드의 내용
* @param {string} html html 파싱한 내용
* @param {string} defaultURL url이 없을 경우 달아주는 비상용 원래 링크
* @param {()=>{}} findSearchResult search result를 찾아주는 함수
* @returns {{url:string,title:string,passage:string}[]} object 여러 개를 가진 list를 준다. 각 json의 url, title, passage로 접근가능
* @description html을 크롤링한 데이터에서 url title passage를 캐오는 함수이다.
*/
const
getHtmlMain
=
(
main
,
keywordText
,
html
,
defaultURL
,
findSearchResult
)
=>
{
const
$
=
cheerio
.
load
(
html
);
let
result
=
[];
...
...
@@ -86,6 +122,11 @@ const getHtmlMain = ( main, keywordText, html, defaultURL, findSearchResult ) =>
const
search
=
{};
/**
* @param {string} keywordText 검색할 내용
* @returns {{url:string,title:string,passage:string}[]} object 여러 개를 가진 list를 준다. 각 json의 url, title, passage로 접근가능
* @description 네이버에서 키워드의 내용을 크롤링해온다.
*/
search
.
naver
=
(
keywordText
)
=>
{
return
new
Promise
(
async
(
resolve
,
reject
)
=>
{
let
naverMain
=
"#main_pack strong"
,
...
...
@@ -104,6 +145,11 @@ search.naver = ( keywordText ) => {
})
}
/**
* @param {string} keywordText 검색할 내용
* @returns {{url:string,title:string,passage:string}[]} object 여러 개를 가진 list를 준다. 각 json의 url, title, passage로 접근가능
* @description 구글에서 키워드의 내용을 크롤링해온다.
*/
search
.
google
=
(
keywordText
)
=>
{
return
new
Promise
(
(
resolve
,
reject
)
=>
{
let
googleMain
=
"#main a"
,
...
...
Please
register
or
login
to post a comment