진재영

main_ updated

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&params%5BdtlGnrCode%5D=&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN1201&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN1001&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN0901&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN1301&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN0501&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN1801&params%5BorderBy%5D=POP&params%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&params%5BdtlGnrCode%5D=GN1701&params%5BorderBy%5D=POP&params%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 +
...@@ -21,8 +21,11 @@ ...@@ -21,8 +21,11 @@
21 //request는 string으로 받아오기 때문에 JSON형태로 바꿔준다. 21 //request는 string으로 받아오기 때문에 JSON형태로 바꿔준다.
22 //var jsonObject = JSON.parse(); 22 //var jsonObject = JSON.parse();
23 var LocationName = jsonObject.name; //지역 이름 23 var LocationName = jsonObject.name; //지역 이름
24 + document.getElementById("LocationName").innerHTML= LocationName;
24 var WeatherCondition = jsonObject.weather[0].main; //현재 날씨 25 var WeatherCondition = jsonObject.weather[0].main; //현재 날씨
26 + document.getElementById("WeatherCondition").innerHTML= WeatherCondition;
25 var Temp = jsonObject.main.temp; //현재 기온 27 var Temp = jsonObject.main.temp; //현재 기온
28 + document.getElementById("Temp").innerHTML= Temp;
26 //console.log(body); 29 //console.log(body);
27 console.log(LocationName); 30 console.log(LocationName);
28 console.log(WeatherCondition); 31 console.log(WeatherCondition);
...@@ -86,6 +89,7 @@ ...@@ -86,6 +89,7 @@
86 clock(); 89 clock();
87 setInterval(clock, 1000); // 1초마다 실행 90 setInterval(clock, 1000); // 1초마다 실행
88 </script> 91 </script>
92 +
89 </fieldset> 93 </fieldset>
90 94
91 <fieldset> 95 <fieldset>
...@@ -104,6 +108,7 @@ ...@@ -104,6 +108,7 @@
104 <div><input type="button" value="음악 추천 받기"></div><br> 108 <div><input type="button" value="음악 추천 받기"></div><br>
105 109
106 <h4>추천 음악 1</h4> 110 <h4>추천 음악 1</h4>
111 + <div id="div1"></div>
107 <iframe width="942" height="530" src="https://www.youtube.com/embed/vnS_jn2uibs" title="YouTube video player" frameborder="0" 112 <iframe width="942" height="530" src="https://www.youtube.com/embed/vnS_jn2uibs" title="YouTube video player" frameborder="0"
108 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><br> 113 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><br>
109 <h4>추천 음악 2</h4> 114 <h4>추천 음악 2</h4>
......