Showing
1 changed file
with
81 additions
and
0 deletions
api/search.js
0 → 100644
| 1 | +const rp = require("request-promise"); | ||
| 2 | +const cheerio = require("cheerio"); | ||
| 3 | +const Entities = require('html-entities').XmlEntities; | ||
| 4 | +const machineRead = require('./machineRead'); | ||
| 5 | + | ||
| 6 | +const entities = new Entities(); | ||
| 7 | + | ||
| 8 | +const keywordChecking = ( keywordText, $, elem ) => { | ||
| 9 | + let tempCheck = false; | ||
| 10 | + keywordText.split( ' ' ).forEach( ( Word ) => { | ||
| 11 | + if( $( elem ).text().indexOf( Word ) !== -1 ) { | ||
| 12 | + tempCheck = true; | ||
| 13 | + } | ||
| 14 | + }); | ||
| 15 | + | ||
| 16 | + if( tempCheck ) { | ||
| 17 | + return true; | ||
| 18 | + } | ||
| 19 | + return false; | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +const naver = ( searchResult, $, elem , defaultURL ) => { | ||
| 23 | + searchResult.title = $( elem ).parent().attr( "title" ); | ||
| 24 | + searchResult.passage = entities.decode( $( elem ).parent().parent().parent().text()).trim(), | ||
| 25 | + searchResult.url = $( elem ).parent().attr( "href" ); | ||
| 26 | + | ||
| 27 | + if( searchResult.url === undefined ) { | ||
| 28 | + searchResult.url = defaultURL; | ||
| 29 | + } | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +const searchToResult = (searchResult, result, keywordCheck) => { | ||
| 33 | + 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(); | ||
| 34 | + | ||
| 35 | + if( searchResult.title === undefined || !searchResult.title.length ) { | ||
| 36 | + searchResult.title = searchResult.passage.split(' ').slice( 0, 3 ).toString().replace(/,/g,' ') + ".."; | ||
| 37 | + } else { | ||
| 38 | + searchResult.title = searchResult.title.replace( /(http(s)?:\/\/)([a-z0-9\w]+\.*)+[a-z0-9]{2,4}/gi, ' ' ).replace( /\s{1,}|\s{1,}|\r\n|\r|\n/g, ' ' ).trim(); | ||
| 39 | + searchResult.passage = searchResult.passage.replace( searchResult.title, '' ); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + if( !result.length ) { | ||
| 43 | + if( keywordCheck ) { | ||
| 44 | + result.push( searchResult ); | ||
| 45 | + } | ||
| 46 | + } else if( keywordCheck ) { | ||
| 47 | +}} | ||
| 48 | + | ||
| 49 | +const getHtmlMain = ( main, keywordText, html, defaultURL, findSearchResult ) => { | ||
| 50 | + const $ = cheerio.load( html ); | ||
| 51 | + let result = []; | ||
| 52 | + $( main ).each( (i, elem ) => { | ||
| 53 | + let keywordCheck = keywordChecking( keywordText, $, elem ); | ||
| 54 | + if( keywordCheck ) { | ||
| 55 | + let searchResult = {}; | ||
| 56 | + findSearchResult( searchResult, $, elem , defaultURL ); | ||
| 57 | + searchToResult( searchResult, result, keywordCheck ); | ||
| 58 | + } | ||
| 59 | + }); | ||
| 60 | + return result; | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +const search = {}; | ||
| 64 | + | ||
| 65 | +search.naver = ( keywordText ) => { | ||
| 66 | + return new Promise( async ( resolve, reject ) => { | ||
| 67 | + let naverMain = "#main_pack strong", | ||
| 68 | + result = [], | ||
| 69 | + naverURL = "https://search.naver.com/search.naver?query=" + encodeURI( keywordText ); | ||
| 70 | + rp( { | ||
| 71 | + "uri" : naverURL, | ||
| 72 | + } ) | ||
| 73 | + .then( ( html ) => { | ||
| 74 | + result = getHtmlMain( naverMain, keywordText, html, naverURL, naver ); | ||
| 75 | + resolve( result ); | ||
| 76 | + }) | ||
| 77 | + }) | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | + | ||
| 81 | +module.exports = search | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment