Merge branch 'master' of http://khuhub.khu.ac.kr/2021105563/Music_Recommendation_Website
Showing
1 changed file
with
112 additions
and
0 deletions
main_/MelonChart.js
0 → 100644
1 | +const axios = require("axios"); | ||
2 | +const cheerio = require("cheerio"); | ||
3 | + | ||
4 | +const url_ballad = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0100#params%5BgnrCode%5D=GN0100¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
5 | +const url_hiphop_kr = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0300#params%5BgnrCode%5D=GN0300¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
6 | +const url_hiphop_us = "https://www.melon.com/genre/song_list.htm?gnrCode=GN1200#params%5BgnrCode%5D=GN1200¶ms%5BdtlGnrCode%5D=GN1201¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
7 | +const url_dance = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0200#params%5BgnrCode%5D=GN0200¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
8 | +const url_rock_kr = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0600#params%5BgnrCode%5D=GN0600¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
9 | +const url_rock_us = "https://www.melon.com/genre/song_list.htm?gnrCode=GN1000#params%5BgnrCode%5D=GN1000¶ms%5BdtlGnrCode%5D=GN1001¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
10 | +const url_pop = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0900#params%5BgnrCode%5D=GN0900¶ms%5BdtlGnrCode%5D=GN0901¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
11 | +const url_RNB_kr = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0400#params%5BgnrCode%5D=GN0400¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
12 | +const url_RNB_us = "https://www.melon.com/genre/song_list.htm?gnrCode=GN1300#params%5BgnrCode%5D=GN1300¶ms%5BdtlGnrCode%5D=GN1301¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
13 | +const url_indie = "https://www.melon.com/genre/song_list.htm?gnrCode=GN0500#params%5BgnrCode%5D=GN0500¶ms%5BdtlGnrCode%5D=GN0501¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
14 | +const url_newage = "https://www.melon.com/genre/song_list.htm?gnrCode=GN1800#params%5BgnrCode%5D=GN1800¶ms%5BdtlGnrCode%5D=GN1801¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1" | ||
15 | +const url_classic = "" | ||
16 | +const url_jazz = "https://www.melon.com/genre/jazz_list.htm?gnrCode=GN1700#params%5BgnrCode%5D=GN1700¶ms%5BdtlGnrCode%5D=GN1701¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=&po=pageObj&startIndex=1" | ||
17 | + | ||
18 | + | ||
19 | +const getHTML = async(genre) => { | ||
20 | + try{ | ||
21 | + return await axios.get(genre) | ||
22 | + | ||
23 | + }catch(err) { | ||
24 | + console.log(err); | ||
25 | + } | ||
26 | +} | ||
27 | +// parsing() 함수는 한가지 파라미터를 가집니다. 파라미터에 각 장르이름 변수를 넣으면 각 장르별 5곡이 리턴됩니다. | ||
28 | +// 장르별 변수명은 다음과 같습니다. | ||
29 | +// url_ballad | ||
30 | +// url_hiphop_kr | ||
31 | +// url_hiphop_us | ||
32 | +// url_dance | ||
33 | +// url_rock_kr | ||
34 | +// url_rock_us | ||
35 | +// url_pop | ||
36 | +// url_RNB_kr | ||
37 | +// url_RNB_us | ||
38 | +// url_indie | ||
39 | +// url_newage | ||
40 | +// url_jazz | ||
41 | +// parsing_exception()은 한가지 파라미터를 가집니다. 그 인자는 'snow' 또는 'classic'으로 해야 합니다. | ||
42 | +// 'classic' 이나 'snow'를 인자로 주면 각각 배열에 저장되어있는 노래 중 랜덤으로 5개가 출력됩니다. | ||
43 | +// classic | ||
44 | +// snow | ||
45 | + | ||
46 | +const parsing = async(genre) => { | ||
47 | + const html = await getHTML(genre); | ||
48 | + const $ = cheerio.load(html.data); | ||
49 | + const $TitleList = $("div.ellipsis.rank01"); | ||
50 | + | ||
51 | + | ||
52 | + let Titles = []; | ||
53 | + $TitleList.each((index, node) => { | ||
54 | + const title = $(node).find("a").text(); | ||
55 | + Titles[Titles.length] = title; | ||
56 | + }); | ||
57 | + | ||
58 | + let Titles5 = []; | ||
59 | + for(i = 0; i <= 4; i++){ | ||
60 | + Titles5.push(Titles[i]) | ||
61 | + }; | ||
62 | + | ||
63 | + console.log(Titles5); | ||
64 | + return(Titles5); | ||
65 | +} | ||
66 | + | ||
67 | +const parsing_exception = (genre) => { // 'snow' 또는 'classic' 에만 작동합니다. | ||
68 | + snow = ['눈사람', '십이월 이십오일의 고백', '첫 눈', '첫눈처럼 너에게 가겠다', '겨울사랑', '눈꽃', '사월의 눈', '코끝에 겨울', '눈이 내린다', '새겨울', '공드리', | ||
69 | +'눈이 오네', '이번 겨울', 'I Miss You', '나의 옛날 이야기', '너의 모든 순간', '내 생에 아름다운', '너를', '눈의꽃', '야생화']; | ||
70 | + | ||
71 | + classic = ['G선상의 아리아', '트로이메라이', '무언가', '백조', '세레나데', '울게하소서', '카발레리아 루스티카나', '사랑의 인사', '보칼리제', '뱃노래', | ||
72 | +'안단테 칸타빌레', '월광의 소나타', '미뉴엣 G장조', '엘리제를 위하여', '로망스']; | ||
73 | + | ||
74 | + function shuffleArray(array) { // array의 요소들을 임의로 섞어주는 함수 | ||
75 | + array.sort(() => Math.random() - 0.5); | ||
76 | + } | ||
77 | + shuffleArray(snow); //실행할 때마다 snow와 classic에 들어있는 요소들을 랜덤으로 배치 | ||
78 | + shuffleArray(classic); | ||
79 | + | ||
80 | + let snow5 = [];// 그 중 앞에서 5개를 뽑아 제공 | ||
81 | + let classic5 = []; | ||
82 | + for(i = 0; i <= 4; i++){ | ||
83 | + snow5.push(snow[i]) | ||
84 | + }; | ||
85 | + | ||
86 | + for(i = 0; i <= 4; i++){ | ||
87 | + classic5.push(classic[i]) | ||
88 | + }; | ||
89 | + | ||
90 | + if(genre == 'snow'){ | ||
91 | + console.log(snow5); // console.log() 는 값 시험용으로 우선 넣어두었습니다. | ||
92 | + return(snow5); | ||
93 | + }else if(genre == 'classic'){ | ||
94 | + console.log(snow5); // | ||
95 | + return(classic5); | ||
96 | + }else{ | ||
97 | + console.log("input value error(The input value is snow or classic)"); | ||
98 | + } | ||
99 | +} | ||
100 | + | ||
101 | +// parsing(url_ballad); | ||
102 | +// parsing_exception('snow'); | ||
103 | + | ||
104 | +var ballad = parsing(url_ballad); | ||
105 | +document.getElementByld("div1").innerHTML(ballad[0]); | ||
106 | + | ||
107 | + | ||
108 | + | ||
109 | + | ||
110 | + | ||
111 | + | ||
112 | + |
-
Please register or login to post a comment