Showing
3 changed files
with
235 additions
and
8 deletions
... | @@ -9,6 +9,9 @@ var async = require('async'); | ... | @@ -9,6 +9,9 @@ var async = require('async'); |
9 | var crawlReol = require('./crawling/Reol'); | 9 | var crawlReol = require('./crawling/Reol'); |
10 | var crawlYonezu = require('./crawling/Yonezu'); | 10 | var crawlYonezu = require('./crawling/Yonezu'); |
11 | var crawlYorusika = require('./crawling/Yorusika'); | 11 | var crawlYorusika = require('./crawling/Yorusika'); |
12 | +var crawlGuckkasten = require('./crawling/Guckkasten'); | ||
13 | +var crawlMot = require('./crawling/Mot'); | ||
14 | + | ||
12 | var singer; | 15 | var singer; |
13 | 16 | ||
14 | //body-parser 미들웨어 사용 | 17 | //body-parser 미들웨어 사용 |
... | @@ -25,7 +28,7 @@ app.get('/keyboard', function(req,res){ | ... | @@ -25,7 +28,7 @@ app.get('/keyboard', function(req,res){ |
25 | }); | 28 | }); |
26 | 29 | ||
27 | //8080포트로 서버 접속 | 30 | //8080포트로 서버 접속 |
28 | -http.createServer(app).listen(8080, () => { | 31 | +http.createServer(app).listen(9000, () => { |
29 | console.log('Server running..'); | 32 | console.log('Server running..'); |
30 | }); | 33 | }); |
31 | 34 | ||
... | @@ -57,6 +60,18 @@ app.post('/message', function(req,res){ | ... | @@ -57,6 +60,18 @@ app.post('/message', function(req,res){ |
57 | callback(null,yorusika); | 60 | callback(null,yorusika); |
58 | }); | 61 | }); |
59 | break; | 62 | break; |
63 | + case 'Guckkasten-Discography' : | ||
64 | + singer = 'guckkasten'; | ||
65 | + crawlGuckkasten.crawl_guckkasten(function(guckkasten){ | ||
66 | + callback(null,guckkasten); | ||
67 | + }); | ||
68 | + break; | ||
69 | + case 'Mot-Discography': | ||
70 | + singer = 'mot'; | ||
71 | + crawlMot.crawl_mot(function (mot) { | ||
72 | + callback(null, mot); | ||
73 | + }); | ||
74 | + break; | ||
60 | default: | 75 | default: |
61 | if(singer == 'Reol'){ | 76 | if(singer == 'Reol'){ |
62 | crawlReol.crawl_Reol('https://namu.wiki/w/%EB%A0%88%EC%98%A4%EB%A3%A8/%EC%9D%8C%EB%B0%98#toc',function(Reol){ | 77 | crawlReol.crawl_Reol('https://namu.wiki/w/%EB%A0%88%EC%98%A4%EB%A3%A8/%EC%9D%8C%EB%B0%98#toc',function(Reol){ |
... | @@ -68,11 +83,21 @@ app.post('/message', function(req,res){ | ... | @@ -68,11 +83,21 @@ app.post('/message', function(req,res){ |
68 | callback(null,yonezu) | 83 | callback(null,yonezu) |
69 | }); | 84 | }); |
70 | } | 85 | } |
71 | - else if(singer=='yorusika'){ | 86 | + else if(singer=='yorusika'){ |
72 | crawlYorusika.crawl_yorusika('http://yorushika.com/discography/', function(yorusika){ | 87 | crawlYorusika.crawl_yorusika('http://yorushika.com/discography/', function(yorusika){ |
73 | callback(null,yorusika); | 88 | callback(null,yorusika); |
74 | }); | 89 | }); |
75 | } | 90 | } |
91 | + else if(singer=='guckkasten'){ | ||
92 | + crawlGuckkasten.crawl_guckkasten(function(guckkasten){ | ||
93 | + callback(null,guckkasten); | ||
94 | + }); | ||
95 | + } | ||
96 | + else if(singer=='mot'){ | ||
97 | + crawlMot.crawl_mot(function (mot) { | ||
98 | + callback(null, mot); | ||
99 | + }); | ||
100 | + } | ||
76 | else | 101 | else |
77 | callback(null,null); | 102 | callback(null,null); |
78 | break; | 103 | break; |
... | @@ -81,7 +106,6 @@ app.post('/message', function(req,res){ | ... | @@ -81,7 +106,6 @@ app.post('/message', function(req,res){ |
81 | }, | 106 | }, |
82 | 107 | ||
83 | // 사용자의 msg를 받아 res를 보냄 // | 108 | // 사용자의 msg를 받아 res를 보냄 // |
84 | - | ||
85 | function(discography, callback){ | 109 | function(discography, callback){ |
86 | var index = parseInt(msg[0])-1; | 110 | var index = parseInt(msg[0])-1; |
87 | switch (msg) { | 111 | switch (msg) { |
... | @@ -101,11 +125,11 @@ app.post('/message', function(req,res){ | ... | @@ -101,11 +125,11 @@ app.post('/message', function(req,res){ |
101 | case '한국': | 125 | case '한국': |
102 | send = { | 126 | send = { |
103 | 'message': { | 127 | 'message': { |
104 | - 'text': '미구현' | 128 | + 'text': '등록된 가수 목록입니다.' |
105 | }, | 129 | }, |
106 | keyboard: { | 130 | keyboard: { |
107 | 'type': 'buttons', | 131 | 'type': 'buttons', |
108 | - 'buttons': ['MOT', 'Gukkasten', 'ZICO'] | 132 | + 'buttons': ['Mot', 'Guckkasten'] |
109 | } | 133 | } |
110 | }; | 134 | }; |
111 | break; | 135 | break; |
... | @@ -203,7 +227,7 @@ app.post('/message', function(req,res){ | ... | @@ -203,7 +227,7 @@ app.post('/message', function(req,res){ |
203 | case 'ヨルシカ': | 227 | case 'ヨルシカ': |
204 | send = { | 228 | send = { |
205 | 'message': { | 229 | 'message': { |
206 | - 'text': '개요 : 2인조 밴드\n멤버 : n-buna, suis \n역할 : 작사, 작곡, 편곡 - n-buna\n 보컬 - suis\n서포트 멤버 : \n 下鶴光康(Guitar)\n キタニタツヤ(Bass)\n Masack(Drums)', | 230 | + 'text': '설명 : 2인조 밴드\n멤버 : n-buna, suis \n역할 : 작사, 작곡, 편곡 - n-buna\n 보컬 - suis\n서포트 멤버 : \n 下鶴光康(Guitar)\n キタニタツヤ(Bass)\n Masack(Drums)', |
207 | 'photo': { | 231 | 'photo': { |
208 | 'url': 'http://yorushika.com/wp-content/uploads/2018/05/biography_image2.jpg', | 232 | 'url': 'http://yorushika.com/wp-content/uploads/2018/05/biography_image2.jpg', |
209 | 'width': 1000, | 233 | 'width': 1000, |
... | @@ -241,11 +265,76 @@ app.post('/message', function(req,res){ | ... | @@ -241,11 +265,76 @@ app.post('/message', function(req,res){ |
241 | 265 | ||
242 | }; | 266 | }; |
243 | break; | 267 | break; |
268 | + //////////////// | ||
269 | + // Guckkasten // | ||
270 | + //////////////// | ||
271 | + case 'Guckkasten': | ||
272 | + send = { | ||
273 | + 'message': { | ||
274 | + 'text': '설명 : 4인조 밴드\n멤버 :\n 하현우(Vocal, Guitar)\n 전규호(Guitar)\n 이정길(Drum)\n 김기범(Bass)\n장르 : 싸이키델릭 록\n데뷔 : 2007년\n소속사 : 인터파크', | ||
275 | + 'photo': { | ||
276 | + 'url': 'http://ticketimage.interpark.com/interparkenter/guckkasten/about/guckkasten_about_pc_image(540x420px).jpg', | ||
277 | + 'width': 540, | ||
278 | + 'height': 420 | ||
279 | + }, | ||
280 | + 'message_button': { | ||
281 | + 'label': '공식 홈페이지', | ||
282 | + 'url': "http://www.interparkenter.com/guckkasten/Main" | ||
283 | + } | ||
284 | + }, | ||
285 | + keyboard: { | ||
286 | + 'type': 'buttons', | ||
287 | + 'buttons': ['Guckkasten-Discography'] | ||
288 | + } | ||
289 | + }; | ||
290 | + break; | ||
291 | + case 'Guckkasten-Discography': | ||
292 | + send = { | ||
293 | + 'message': { | ||
294 | + 'text': 'Album List', | ||
295 | + }, | ||
296 | + keyboard: { | ||
297 | + 'type': 'buttons', | ||
298 | + 'buttons': discography[0].json_album | ||
299 | + } | ||
244 | 300 | ||
301 | + }; | ||
302 | + break; | ||
245 | ///////////// | 303 | ///////////// |
246 | - //// MOT //// | 304 | + //// Mot //// |
247 | ///////////// | 305 | ///////////// |
306 | + case 'Mot': | ||
307 | + send = { | ||
308 | + 'message': { | ||
309 | + 'text': '설명 : 5인조 밴드\n현멤버(3집 이후) :\n 이이언(Vocal)\n 유웅렬(Guitar)\n 조남열(Drum)\n 송인섭(Bass)\n 이하윤(Keyboard)\n구멤버(1, 2집) :\n 이이언(Vocal)\n지이(Guitar)\n장르 : Indie Rock\n 데뷔 : 2007년\n소속사 : 인터파크', | ||
310 | + 'photo': { | ||
311 | + 'url': 'https://scontent-icn1-1.xx.fbcdn.net/v/t1.0-1/p320x320/31164203_908165976030791_1214044515636084736_n.jpg?_nc_cat=111&_nc_ht=scontent-icn1-1.xx&oh=7da23be5eb9dfcd537287b012f231dbb&oe=5C9B33D0', | ||
312 | + 'width': 1000, | ||
313 | + 'height': 677 | ||
314 | + }, | ||
315 | + 'message_button': { | ||
316 | + 'label': '공식 Facebook', | ||
317 | + 'url': "https://www.facebook.com/bandmot.official" | ||
318 | + } | ||
319 | + }, | ||
320 | + keyboard: { | ||
321 | + 'type': 'buttons', | ||
322 | + 'buttons': ['Mot-Discography'] | ||
323 | + } | ||
324 | + }; | ||
325 | + break; | ||
326 | + case 'Mot-Discography': | ||
327 | + send = { | ||
328 | + 'message': { | ||
329 | + 'text': 'Album List', | ||
330 | + }, | ||
331 | + keyboard: { | ||
332 | + 'type': 'buttons', | ||
333 | + 'buttons': discography[0].json_album | ||
334 | + } | ||
248 | 335 | ||
336 | + }; | ||
337 | + break; | ||
249 | 338 | ||
250 | // 앨범 정보 읽기 // | 339 | // 앨범 정보 읽기 // |
251 | 340 | ||
... | @@ -284,7 +373,28 @@ app.post('/message', function(req,res){ | ... | @@ -284,7 +373,28 @@ app.post('/message', function(req,res){ |
284 | } | 373 | } |
285 | } | 374 | } |
286 | } | 375 | } |
287 | - break; | 376 | + else if (singer == 'guckkasten'){ |
377 | + send = { | ||
378 | + 'message': { | ||
379 | + 'text': album + '\n발매년도 : ' + discography[0].json_year[index] + '\n수록곡 : \n' + discography[0].json_track[index] | ||
380 | + }, | ||
381 | + keyboard: { | ||
382 | + 'type': 'buttons', | ||
383 | + 'buttons': ['Guckkasten-Discography', '초기화면'] | ||
384 | + } | ||
385 | + } | ||
386 | + } | ||
387 | + else if (singer == 'mot'){ | ||
388 | + send = { | ||
389 | + 'message': { | ||
390 | + 'text': album + '\n발매년도 : ' + discography[0].json_year[index] + '\n수록곡 : \n' + discography[0].json_track[index] | ||
391 | + }, | ||
392 | + keyboard: { | ||
393 | + 'type': 'buttons', | ||
394 | + 'buttons': ['Mot-Discography', '초기화면'] | ||
395 | + } | ||
396 | + } | ||
397 | + } | ||
288 | 398 | ||
289 | // 초기 설정으로 돌아가기 // | 399 | // 초기 설정으로 돌아가기 // |
290 | 400 | ... | ... |
crawling/Guckkasten.js
0 → 100644
1 | +var request = require('request'); | ||
2 | +var cheerio = require('cheerio'); | ||
3 | + | ||
4 | +function crawl_guckkasten(callback){ | ||
5 | + var n = 0; | ||
6 | + var guckkasten = []; | ||
7 | + crawl(function(album,year,track){ | ||
8 | + n++ | ||
9 | + if (n == 10) { | ||
10 | + var j; | ||
11 | + var a, y, t; | ||
12 | + for (var i = 1; i < year.length; i++) { | ||
13 | + y = year[i]; | ||
14 | + a = album[i]; | ||
15 | + t = track[i] | ||
16 | + j = i - 1; | ||
17 | + while (j >= 0 && year[j] > y) { | ||
18 | + album[j + 1] = album[j]; | ||
19 | + year[j + 1] = year[j]; | ||
20 | + track[j + 1] = track[j]; | ||
21 | + j--; | ||
22 | + } | ||
23 | + album[j + 1] = a; | ||
24 | + year[j + 1] = y; | ||
25 | + track[j + 1] = t; | ||
26 | + } | ||
27 | + for(var i = 0; i<album.length; i++){ | ||
28 | + album[i] = (i+1)+'. ' +album[i]; | ||
29 | + } | ||
30 | + guckkasten.push(album, year, track); | ||
31 | + callback(guckkasten); | ||
32 | + } | ||
33 | + }) | ||
34 | +} | ||
35 | + | ||
36 | +function crawl(callback){ | ||
37 | + var url; | ||
38 | + let json_album = [], json_year = [], json_track = []; | ||
39 | + var track; | ||
40 | + var year; | ||
41 | + var album; | ||
42 | + for (var i = 1; i <= 13; i++) { | ||
43 | + url = 'http://www.interparkenter.com/guckkasten/Album/' + i; | ||
44 | + if (!(i > 9 && i < 13)) { | ||
45 | + request(url, function (err, res, body) { | ||
46 | + const $ = cheerio.load(body); | ||
47 | + | ||
48 | + var track_num = 0; | ||
49 | + var album_track = ''; | ||
50 | + $('#divDetail > div.disco_left_box > div.track_area > div > ol').find('li').each(function () { | ||
51 | + track_num++; | ||
52 | + track = $('#divDetail > div.disco_left_box > div.track_area > div > ol > li:nth-child(' + track_num + ')').text() | ||
53 | + album_track += track + '\n'; | ||
54 | + }) | ||
55 | + json_track.push(album_track); | ||
56 | + | ||
57 | + year = $('#divDetail > div.disco_right_box > div.Introduction > p.txt_release').text(); | ||
58 | + year = year.substr(3); | ||
59 | + json_year.push(year); | ||
60 | + | ||
61 | + album = $('#divDetail > div.disco_right_box > div.Introduction > p.txt_title').text(); | ||
62 | + json_album.push(album); | ||
63 | + callback(json_album,json_year,json_track); | ||
64 | + }); | ||
65 | + } | ||
66 | + } | ||
67 | +} | ||
68 | + | ||
69 | + | ||
70 | +exports.crawl_guckkasten = crawl_guckkasten; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
crawling/Mot.js
0 → 100644
1 | +var request = require('request'); | ||
2 | +var cheerio = require('cheerio'); | ||
3 | + | ||
4 | +function crawl_mot(callback){ | ||
5 | + var url = 'https://namu.wiki/w/%EB%AA%BB(%EB%B0%B4%EB%93%9C)'; | ||
6 | + let json_album = [], json_year = [], json_track = []; | ||
7 | + let Mot = []; | ||
8 | + var track; | ||
9 | + json_year.push('2004. 06. 18'); | ||
10 | + json_year.push('2007. 05. 22'); | ||
11 | + json_year.push('2016. 02. 19'); | ||
12 | + | ||
13 | + request(url, function (err, res, body) { | ||
14 | + const $ = cheerio.load(body); | ||
15 | + var index = 12; | ||
16 | + var album_num = 0; | ||
17 | + for(var i = 1; i<=3; i++){ | ||
18 | + index += 2; | ||
19 | + if(index == 18) | ||
20 | + index += 6; | ||
21 | + var title_index = 0; | ||
22 | + var track_cnt = 0; | ||
23 | + var album_track = ''; | ||
24 | + $('body > div.content-wrapper > article > div.wiki-content.clearfix > div > div:nth-child('+index+') > div > table > tbody').find('tr').each(function () { | ||
25 | + title_index++; | ||
26 | + if (title_index == 1) { | ||
27 | + album_num++; | ||
28 | + album = $('body > div.content-wrapper > article > div.wiki-content.clearfix > div > div:nth-child('+index+') > div > table > tbody > tr:nth-child(1)').text() | ||
29 | + album = album_num + '. ' + album; | ||
30 | + } | ||
31 | + else if (title_index >= 3) { | ||
32 | + track_cnt++; | ||
33 | + track = $('body > div.content-wrapper > article > div.wiki-content.clearfix > div > div:nth-child('+index+') > div > table > tbody > tr:nth-child(' + title_index + ') > td:nth-child(2)').text(); | ||
34 | + track = track_cnt + '. ' + track; | ||
35 | + album_track += track + '\n'; | ||
36 | + } | ||
37 | + }); | ||
38 | + json_album.push(album); | ||
39 | + json_track.push(album_track); | ||
40 | + } | ||
41 | + | ||
42 | + Mot.push({ json_album, json_year, json_track}); | ||
43 | + callback(Mot); | ||
44 | + }); | ||
45 | +} | ||
46 | + | ||
47 | +exports.crawl_mot = crawl_mot; |
-
Please register or login to post a comment