Showing
1 changed file
with
156 additions
and
141 deletions
... | @@ -8,174 +8,191 @@ const cheerio = require('cheerio'); | ... | @@ -8,174 +8,191 @@ const cheerio = require('cheerio'); |
8 | const url = 'http://lol.inven.co.kr/dataninfo/proteam/progamer.php?code=135'; | 8 | const url = 'http://lol.inven.co.kr/dataninfo/proteam/progamer.php?code=135'; |
9 | 9 | ||
10 | const version = '0.1'; | 10 | const version = '0.1'; |
11 | +const dataFileName = 'data.json'; | ||
11 | 12 | ||
12 | var fakerData = {}; | 13 | var fakerData = {}; |
13 | 14 | ||
14 | -function checkData() { | 15 | +async function checkData() { |
15 | try { | 16 | try { |
16 | - const dataBuffer = fs.readFileSync('data.json'); | 17 | + if (fakerData.version == version) { |
17 | - console.log("데이터 파일이 존재합니다. 데이터를 읽습니다."); | 18 | + console.log("이미 데이터가 존재합니다."); |
18 | - fakerData = JSON.parse(dataBuffer.toString()); | 19 | + } |
19 | - console.log(fakerData); | 20 | + else if (fakerData.version == undefined) { |
20 | - | 21 | + const dataBuffer = fs.readFileSync(dataFileName); |
21 | - if(fakerData.version != version){ | 22 | + console.log("데이터를 읽습니다."); |
23 | + fakerData = JSON.parse(dataBuffer.toString()); | ||
24 | + console.log(fakerData); | ||
25 | + } | ||
26 | + else { | ||
22 | console.log("버전이 다릅니다. 데이터를 크롤링합니다."); | 27 | console.log("버전이 다릅니다. 데이터를 크롤링합니다."); |
23 | - getData(); | 28 | + await getData(); |
24 | } | 29 | } |
25 | } | 30 | } |
26 | catch (exception) { | 31 | catch (exception) { |
27 | - console.log(exception); | ||
28 | if (exception.code == "ENOENT") { | 32 | if (exception.code == "ENOENT") { |
29 | console.log("데이터 파일이 존재하지 않습니다. 데이터를 크롤링합니다."); | 33 | console.log("데이터 파일이 존재하지 않습니다. 데이터를 크롤링합니다."); |
30 | - getData(); | 34 | + await getData(); |
35 | + } | ||
36 | + else { | ||
37 | + console.log(exception); | ||
31 | } | 38 | } |
32 | } | 39 | } |
40 | + | ||
41 | + return new Promise(function (resolve, reject) { | ||
42 | + resolve(); | ||
43 | + }); | ||
33 | } | 44 | } |
34 | 45 | ||
35 | -const getHTML = async () => { | 46 | +async function getHTML() { |
36 | try { | 47 | try { |
37 | - return await axios.get(url); | 48 | + return axios.get(url); |
38 | } catch (error) { | 49 | } catch (error) { |
39 | console.error(error); | 50 | console.error(error); |
51 | + return null; | ||
40 | } | 52 | } |
41 | }; | 53 | }; |
42 | 54 | ||
43 | -function getData() { | 55 | +async function getData() { |
44 | - getHTML() | 56 | + const html = await getHTML(); |
45 | - .then(html => { | 57 | + if (html == null) { |
46 | - var today = new Date(); | 58 | + return; |
47 | - var dateInfo = `${today.getFullYear()}/${today.getMonth() + 1}/${today.getDate()}`; | 59 | + } |
48 | - fakerData['date'] = dateInfo; | ||
49 | 60 | ||
50 | - const $ = cheerio.load(html.data); | 61 | + fakerData['version'] = version; |
62 | + | ||
63 | + var today = new Date(); | ||
64 | + var dateInfo = `${today.getFullYear()}/${today.getMonth() + 1}/${today.getDate()}`; | ||
65 | + fakerData['date'] = dateInfo; | ||
66 | + | ||
67 | + const $ = cheerio.load(html.data); | ||
68 | + | ||
69 | + var playerName = $('div#lolMain h2.block.name').text().split(' '); | ||
70 | + fakerData['name'] = playerName[playerName.length - 1]; | ||
71 | + | ||
72 | + //#region LCK 통산 전적 | ||
73 | + var tr = $('table.table.log_list.log01 tbody').children(); | ||
74 | + var td = tr.eq(0).children(); | ||
75 | + | ||
76 | + fakerData['lCK'] = { | ||
77 | + totalGamePlay: td.eq(1).text(), | ||
78 | + totalWin: td.eq(2).text(), | ||
79 | + totalLose: td.eq(3).text(), | ||
80 | + winRate: td.eq(4).text(), | ||
81 | + killPerMatch: td.eq(5).text(), | ||
82 | + deathPerMatch: td.eq(6).text(), | ||
83 | + assistPerMatch: td.eq(7).text(), | ||
84 | + kDA: td.eq(8).text(), | ||
85 | + kP: td.eq(9).text() | ||
86 | + }; | ||
87 | + //#endregion | ||
88 | + | ||
89 | + //#region 최근 LCK 기록 | ||
90 | + var recentLCKInfo = $('div.block.scriptorium_box.scriptorium_player_info').children().eq(2); | ||
91 | + var mostInfo = recentLCKInfo.find('div.left ul.block.list').children(); | ||
92 | + var mostList = []; | ||
93 | + var indicatorInfo = recentLCKInfo.find('div.right ul.block.bottom.clearfix').children(); | ||
94 | + | ||
95 | + mostInfo.each(function (i, elem) { | ||
96 | + mostList[i] = { | ||
97 | + champion: $(this).find('div.name_area p.value b').text(), | ||
98 | + played: $(this).find('div.play_area p.value').text(), | ||
99 | + record: $(this).find('div.log_area p.value').text(), | ||
100 | + kDA: $(this).find('div.kda_area p.value').text() | ||
101 | + }; | ||
102 | + }); | ||
103 | + | ||
104 | + fakerData['recentLCK'] = { | ||
105 | + name: recentLCKInfo.find('h3.block.player_sub_title.clearfix').text(), | ||
106 | + most: mostList, | ||
107 | + comparison_WinRate: indicatorInfo.eq(0).find('div.progress.left div.text').text() | ||
108 | + .concat(" ", indicatorInfo.eq(0).find('div.progress.right div.text').text()), | ||
109 | + comparison_KDA: indicatorInfo.eq(1).find('div.progress.left div.text').text() | ||
110 | + .concat(" ", indicatorInfo.eq(1).find('div.progress.right div.text').text()), | ||
111 | + comparison_KP: indicatorInfo.eq(2).find('div.progress.left div.text').text() | ||
112 | + .concat(" ", indicatorInfo.eq(2).find('div.progress.right div.text').text()) | ||
113 | + }; | ||
114 | + //#endregion | ||
115 | + | ||
116 | + //#region 통산 전적 | ||
117 | + var td = $('div.scriptorium').children('div.listTable').eq(1).find('table tbody tr').children(); | ||
118 | + | ||
119 | + fakerData['fullCareer'] = { | ||
120 | + totalGamePlay: td.eq(0).text(), | ||
121 | + totalWin: td.eq(1).text(), | ||
122 | + totalLose: td.eq(2).text(), | ||
123 | + winRate: td.eq(3).text(), | ||
124 | + totalKill: td.eq(4).text(), | ||
125 | + totalDeath: td.eq(5).text(), | ||
126 | + totalAssist: td.eq(6).text(), | ||
127 | + killPerMatch: td.eq(7).text(), | ||
128 | + deathPerMatch: td.eq(8).text(), | ||
129 | + assistPerMatch: td.eq(9).text(), | ||
130 | + kDA: td.eq(10).text(), | ||
131 | + kP: td.eq(11).text() | ||
132 | + } | ||
133 | + //#endregion | ||
51 | 134 | ||
52 | - var playerName = $('div#lolMain h2.block.name').text().split(' '); | 135 | + //#region 대회 별 전적 |
53 | - fakerData['name'] = playerName[playerName.length - 1]; | 136 | + var tr = $('div.scriptorium').children('div.listTable').eq(3).find('table tbody').children(); |
137 | + var competitionData = {}; | ||
54 | 138 | ||
55 | - //#region LCK 통산 전적 | 139 | + tr.each(function (i, elem) { |
56 | - var tr = $('table.table.log_list.log01 tbody').children(); | 140 | + var td = $(this).children(); |
57 | - var td = tr.eq(0).children(); | 141 | + var competitionName = td.eq(0).text().replace(td.eq(0).find('span').text(), ''); |
58 | 142 | ||
59 | - fakerData['lCK'] = { | 143 | + competitionData[competitionName] = { |
144 | + name: competitionName, | ||
60 | totalGamePlay: td.eq(1).text(), | 145 | totalGamePlay: td.eq(1).text(), |
61 | totalWin: td.eq(2).text(), | 146 | totalWin: td.eq(2).text(), |
62 | totalLose: td.eq(3).text(), | 147 | totalLose: td.eq(3).text(), |
63 | winRate: td.eq(4).text(), | 148 | winRate: td.eq(4).text(), |
64 | - killPerMatch: td.eq(5).text(), | 149 | + totalKill: td.eq(5).text(), |
65 | - deathPerMatch: td.eq(6).text(), | 150 | + totalDeath: td.eq(6).text(), |
66 | - assistPerMatch: td.eq(7).text(), | 151 | + totalAssist: td.eq(7).text(), |
67 | - kDA: td.eq(8).text(), | 152 | + killPerMatch: td.eq(8).text(), |
68 | - kP: td.eq(9).text() | 153 | + deathPerMatch: td.eq(9).text(), |
69 | - }; | 154 | + assistPerMatch: td.eq(10).text(), |
70 | - //#endregion | 155 | + kDA: td.eq(11).text(), |
71 | - | 156 | + kP: td.eq(12).text() |
72 | - //#region 최근 LCK 기록 | ||
73 | - var recentLCKInfo = $('div.block.scriptorium_box.scriptorium_player_info').children().eq(2); | ||
74 | - var mostInfo = recentLCKInfo.find('div.left ul.block.list').children(); | ||
75 | - var mostList = []; | ||
76 | - var indicatorInfo = recentLCKInfo.find('div.right ul.block.bottom.clearfix').children(); | ||
77 | - | ||
78 | - mostInfo.each(function (i, elem) { | ||
79 | - mostList[i] = { | ||
80 | - champion: $(this).find('div.name_area p.value b').text(), | ||
81 | - played: $(this).find('div.play_area p.value').text(), | ||
82 | - record: $(this).find('div.log_area p.value').text(), | ||
83 | - kDA: $(this).find('div.kda_area p.value').text() | ||
84 | - }; | ||
85 | - }); | ||
86 | - | ||
87 | - fakerData['recentLCK'] = { | ||
88 | - name: recentLCKInfo.find('h3.block.player_sub_title.clearfix').text(), | ||
89 | - most: mostList, | ||
90 | - comparison_WinRate: indicatorInfo.eq(0).find('div.progress.left div.text').text() | ||
91 | - .concat(" ", indicatorInfo.eq(0).find('div.progress.right div.text').text()), | ||
92 | - comparison_KDA: indicatorInfo.eq(1).find('div.progress.left div.text').text() | ||
93 | - .concat(" ", indicatorInfo.eq(1).find('div.progress.right div.text').text()), | ||
94 | - comparison_KP: indicatorInfo.eq(2).find('div.progress.left div.text').text() | ||
95 | - .concat(" ", indicatorInfo.eq(2).find('div.progress.right div.text').text()) | ||
96 | }; | 157 | }; |
97 | - //#endregion | 158 | + }); |
98 | - | 159 | + |
99 | - //#region 통산 전적 | 160 | + fakerData['competitions'] = competitionData; |
100 | - var td = $('div.scriptorium').children('div.listTable').eq(1).find('table tbody tr').children(); | 161 | + //#endregion |
101 | - | 162 | + |
102 | - fakerData['fullCareer'] = { | 163 | + //#region 챔피언 별 전적 |
103 | - totalGamePlay: td.eq(0).text(), | 164 | + var tr = $('div.scriptorium').children('div.listTable').eq(4).find('table tbody').children(); |
104 | - totalWin: td.eq(1).text(), | 165 | + var championData = {}; |
105 | - totalLose: td.eq(2).text(), | 166 | + |
106 | - winRate: td.eq(3).text(), | 167 | + tr.each(function (i, elem) { |
107 | - totalKill: td.eq(4).text(), | 168 | + var td = $(this).children(); |
108 | - totalDeath: td.eq(5).text(), | 169 | + var championName = td.eq(0).text(); |
109 | - totalAssist: td.eq(6).text(), | 170 | + |
110 | - killPerMatch: td.eq(7).text(), | 171 | + championData[championName] = { |
111 | - deathPerMatch: td.eq(8).text(), | 172 | + name: championName, |
112 | - assistPerMatch: td.eq(9).text(), | 173 | + totalGamePlay: td.eq(1).text(), |
113 | - kDA: td.eq(10).text(), | 174 | + totalWin: td.eq(2).text(), |
114 | - kP: td.eq(11).text() | 175 | + totalLose: td.eq(3).text(), |
176 | + winRate: td.eq(4).text(), | ||
177 | + totalKill: td.eq(5).text(), | ||
178 | + totalDeath: td.eq(6).text(), | ||
179 | + totalAssist: td.eq(7).text(), | ||
180 | + killPerMatch: td.eq(8).text(), | ||
181 | + deathPerMatch: td.eq(9).text(), | ||
182 | + assistPerMatch: td.eq(10).text(), | ||
183 | + kDA: td.eq(11).text(), | ||
184 | + kP: td.eq(12).text() | ||
115 | } | 185 | } |
116 | - //#endregion | 186 | + }); |
117 | - | 187 | + |
118 | - //#region 대회 별 전적 | 188 | + fakerData['champions'] = championData; |
119 | - var tr = $('div.scriptorium').children('div.listTable').eq(3).find('table tbody').children(); | 189 | + //#endregion |
120 | - var competitionData = {}; | 190 | + |
121 | - | 191 | + console.log(fakerData); |
122 | - tr.each(function (i,elem) { | 192 | + fs.writeFileSync(dataFileName, JSON.stringify(fakerData)); |
123 | - var td = $(this).children(); | 193 | + |
124 | - var competitionName = td.eq(0).text().replace(td.eq(0).find('span').text(), ''); | 194 | + return new Promise(function (resolve, reject) { |
125 | - | 195 | + resolve(); |
126 | - competitionData[competitionName] = { | ||
127 | - name: competitionName, | ||
128 | - totalGamePlay: td.eq(1).text(), | ||
129 | - totalWin: td.eq(2).text(), | ||
130 | - totalLose: td.eq(3).text(), | ||
131 | - winRate: td.eq(4).text(), | ||
132 | - totalKill: td.eq(5).text(), | ||
133 | - totalDeath: td.eq(6).text(), | ||
134 | - totalAssist: td.eq(7).text(), | ||
135 | - killPerMatch: td.eq(8).text(), | ||
136 | - deathPerMatch: td.eq(9).text(), | ||
137 | - assistPerMatch: td.eq(10).text(), | ||
138 | - kDA: td.eq(11).text(), | ||
139 | - kP: td.eq(12).text() | ||
140 | - }; | ||
141 | - }); | ||
142 | - | ||
143 | - fakerData['competitions'] = competitionData; | ||
144 | - //#endregion | ||
145 | - | ||
146 | - //#region 챔피언 별 전적 | ||
147 | - var tr = $('div.scriptorium').children('div.listTable').eq(4).find('table tbody').children(); | ||
148 | - var championData = {}; | ||
149 | - | ||
150 | - tr.each(function (i, elem) { | ||
151 | - var td = $(this).children(); | ||
152 | - var championName = td.eq(0).text(); | ||
153 | - | ||
154 | - championData[championName] = { | ||
155 | - name: championName, | ||
156 | - totalGamePlay: td.eq(1).text(), | ||
157 | - totalWin: td.eq(2).text(), | ||
158 | - totalLose: td.eq(3).text(), | ||
159 | - winRate: td.eq(4).text(), | ||
160 | - totalKill: td.eq(5).text(), | ||
161 | - totalDeath: td.eq(6).text(), | ||
162 | - totalAssist: td.eq(7).text(), | ||
163 | - killPerMatch: td.eq(8).text(), | ||
164 | - deathPerMatch: td.eq(9).text(), | ||
165 | - assistPerMatch: td.eq(10).text(), | ||
166 | - kDA: td.eq(11).text(), | ||
167 | - kP: td.eq(12).text() | ||
168 | - } | ||
169 | - }); | ||
170 | - | ||
171 | - fakerData['champions'] = championData; | ||
172 | - //#endregion | ||
173 | - | ||
174 | - return fakerData; | ||
175 | - }) | ||
176 | - .then(res => { | ||
177 | - console.log(res) | ||
178 | - fs.writeFileSync('data.json', JSON.stringify(res)); | ||
179 | }); | 196 | }); |
180 | } | 197 | } |
181 | 198 | ||
... | @@ -184,6 +201,4 @@ app.get('/', (req, res) => { | ... | @@ -184,6 +201,4 @@ app.get('/', (req, res) => { |
184 | res.send('Express Test'); | 201 | res.send('Express Test'); |
185 | }); | 202 | }); |
186 | 203 | ||
187 | -app.listen(port, () => console.log(`app listening at http://localhost:${port}`)); | ||
188 | - | ||
189 | -checkData(); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
204 | +app.listen(port, () => console.log(`app listening at http://localhost:${port}`)); | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment