김동근

first Commit

1 const getCardId=require('./getCardId') 1 const getCardId=require('./getCardId')
2 const puppeteer=require('puppeteer') 2 const puppeteer=require('puppeteer')
3 +const request = require('request')
3 const cheerio=require('cheerio') 4 const cheerio=require('cheerio')
4 const fs=require('fs') 5 const fs=require('fs')
5 const ejs=require('ejs') 6 const ejs=require('ejs')
...@@ -36,13 +37,21 @@ exports.GetResult=(req,res)=>{ ...@@ -36,13 +37,21 @@ exports.GetResult=(req,res)=>{
36 for(let i=1;i<cardIds.length ;i++){ 37 for(let i=1;i<cardIds.length ;i++){
37 idInQuery+= '%2C'+cardIds[i].cardId 38 idInQuery+= '%2C'+cardIds[i].cardId
38 } 39 }
40 + //var url = 'https://hsreplay.net/decks/#timeRange=LAST_30_DAYS&includedCards=' + idInQuery
41 +
42 + /*request(url, function(err, res, html){
43 + if(!err){
44 + return cheerio.load(html)
45 + }
46 + })*/
39 return new Promise((resolve,reject)=>{ 47 return new Promise((resolve,reject)=>{
40 const asyncFunc=async ()=>{ 48 const asyncFunc=async ()=>{
41 const browser=await puppeteer.launch() 49 const browser=await puppeteer.launch()
42 try{ 50 try{
43 const page=await browser.newPage() 51 const page=await browser.newPage()
44 await page.setViewport({width:1366,height:768}) 52 await page.setViewport({width:1366,height:768})
45 - await page.goto(`https://hsreplay.net/decks/#timeRange=LAST_30_DAYS&includedCards=${idInQuery}`,{waitUntil: 'networkidle2'}) 53 + //idInQuery = '180%2C48886%2C904%2C461'
54 + await page.goto(`https://hsreplay.net/decks/#timeRange=LAST_30_DAYS&includedCards=${idInQuery}`,{waitUntil: 'load'})
46 const content=await page.content() 55 const content=await page.content()
47 browser.close() 56 browser.close()
48 return content 57 return content
...@@ -60,7 +69,7 @@ exports.GetResult=(req,res)=>{ ...@@ -60,7 +69,7 @@ exports.GetResult=(req,res)=>{
60 const GetDeckHref=(content)=>{ 69 const GetDeckHref=(content)=>{
61 return new Promise((resolve,reject)=>{ 70 return new Promise((resolve,reject)=>{
62 const $=cheerio.load(content) 71 const $=cheerio.load(content)
63 - let deck=$('#decks-container > div > main > div.deck-list > ul > li:nth-child(2)').find('a') 72 + let deck=$('#decks-container > main > div.deck-list-wrapper > section > ul > li:nth-child(2) > a')
64 const deckHref=$(deck).attr('href') 73 const deckHref=$(deck).attr('href')
65 console.log(deckHref) 74 console.log(deckHref)
66 resolve(deckHref) 75 resolve(deckHref)
......
...@@ -7,7 +7,8 @@ const charset=require('charset') ...@@ -7,7 +7,8 @@ const charset=require('charset')
7 exports.Crawl=(deckCode)=>{ 7 exports.Crawl=(deckCode)=>{
8 return new Promise((resolve,reject)=>{ 8 return new Promise((resolve,reject)=>{
9 request({ 9 request({
10 - url:`https://deck.codes/${deckCode}`, 10 + //url:`https://deck.codes/${deckCode}`,
11 + url:`https://hs.protolambda.com//${deckCode}`,
11 encoding:null, 12 encoding:null,
12 method:'GET', 13 method:'GET',
13 timeout:10000, 14 timeout:10000,
......
...@@ -5,7 +5,7 @@ const pool=mysql.createPool({ ...@@ -5,7 +5,7 @@ const pool=mysql.createPool({
5 host:process.env.DB_HOST, 5 host:process.env.DB_HOST,
6 user:process.env.DB_USER, 6 user:process.env.DB_USER,
7 password:process.env.DB_PASSWORD, 7 password:process.env.DB_PASSWORD,
8 - database:'WhoAreYou', 8 + database:'dapenda',
9 port:process.env.DB_PORT 9 port:process.env.DB_PORT
10 }) 10 })
11 11
......
This diff is collapsed. Click to expand it.
...@@ -17,17 +17,18 @@ ...@@ -17,17 +17,18 @@
17 "body-parser": "^1.18.3", 17 "body-parser": "^1.18.3",
18 "charset": "^1.0.1", 18 "charset": "^1.0.1",
19 "cheerio": "^1.0.0-rc.2", 19 "cheerio": "^1.0.0-rc.2",
20 - "dotenv": "^6.1.0", 20 + "dotenv": "^6.2.0",
21 "ejs": "^2.6.1", 21 "ejs": "^2.6.1",
22 - "express": "^4.16.4", 22 + "express": "^4.17.0",
23 "express-session": "^1.15.6", 23 "express-session": "^1.15.6",
24 "fs": "0.0.1-security", 24 "fs": "0.0.1-security",
25 "iconv-lite": "^0.4.24", 25 "iconv-lite": "^0.4.24",
26 + "jquery": "^3.4.1",
26 "morgan": "^1.9.1", 27 "morgan": "^1.9.1",
27 - "mysql": "^2.16.0", 28 + "mysql": "^2.17.1",
28 "mysql-apostrophe": "^1.0.8", 29 "mysql-apostrophe": "^1.0.8",
29 "path": "^0.12.7", 30 "path": "^0.12.7",
30 - "puppeteer": "^1.11.0", 31 + "puppeteer": "^1.17.0",
31 "request": "^2.88.0", 32 "request": "^2.88.0",
32 "request-promise": "^4.2.2" 33 "request-promise": "^4.2.2"
33 } 34 }
......
...@@ -87,17 +87,17 @@ ...@@ -87,17 +87,17 @@
87 <br> 87 <br>
88 <div class="row" style="text-align: center;"> 88 <div class="row" style="text-align: center;">
89 <div class="col-md-4"> 89 <div class="col-md-4">
90 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/c/c5/Garrosh_Hellscream%28635%29.png?version=bab934001bb784a94c59a47823d535a7" style="width:150px;height:200px;"/> 90 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/c/c5/Garrosh_Hellscream%28635%29.png?version=1b614ad5340f67612d99542b05168969" style="width:200px;height:250px;"/>
91 <br> 91 <br>
92 <input type="radio" name="checkOpponent" value="WARRIOR"/>전사 92 <input type="radio" name="checkOpponent" value="WARRIOR"/>전사
93 </div> 93 </div>
94 <div class="col-md-4"> 94 <div class="col-md-4">
95 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/4/4b/Thrall%28319%29.png?version=adcee55715548b949a7d973c2fddbd95" style="width:150px;height:200px;"/> 95 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/4/4b/Thrall%28319%29.png?version=d0a09d4b1a9973cf5d3853798915d1ac" style="width:200px;height:250px;"/>
96 <br> 96 <br>
97 <input type="radio" name="checkOpponent" value="SHAMAN"/>주술사 97 <input type="radio" name="checkOpponent" value="SHAMAN"/>주술사
98 </div> 98 </div>
99 <div class="col-md-4"> 99 <div class="col-md-4">
100 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/a/a4/Valeera_Sanguinar%282%29.png?version=84a816910b223169eb14cc93c20437b2" style="width:150px;height:200px;"/> 100 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/a/a4/Valeera_Sanguinar%282%29.png?version=8e1f8248cfd10cd0780944f5adae3c88" style="width:200px;height:250px;"/>
101 <br> 101 <br>
102 <input type="radio" name="checkOpponent" value="ROGUE"/>도적 102 <input type="radio" name="checkOpponent" value="ROGUE"/>도적
103 </div> 103 </div>
...@@ -107,17 +107,17 @@ ...@@ -107,17 +107,17 @@
107 <br> 107 <br>
108 <div class="row" style="text-align: center;"> 108 <div class="row" style="text-align: center;">
109 <div class="col-md-4"> 109 <div class="col-md-4">
110 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/4/4d/Uther_Lightbringer%28257%29.png?version=b45ade5ac3fdd2579160fe5d7b7c1b20" style="width:150px;height:200px;"/> 110 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/4/4d/Uther_Lightbringer%28257%29.png?version=6dfe616bf25bb33225417253ae47a6d8" style="width:200px;height:250px;"/>
111 <br> 111 <br>
112 <input type="radio" name="checkOpponent" value="PALADIN"/>성기사 112 <input type="radio" name="checkOpponent" value="PALADIN"/>성기사
113 </div> 113 </div>
114 <div class="col-md-4"> 114 <div class="col-md-4">
115 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/a/a0/Rexxar%28484%29.png?version=c21b57837db15d20cc814f2bf45682b6" style="width:150px;height:200px;"/> 115 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/a/a0/Rexxar%28484%29.png?version=f018fc6e46b383cc12aefb4b51a66206" style="width:200px;height:250px;"/>
116 <br> 116 <br>
117 <input type="radio" name="checkOpponent" value="HUNTER"/>사냥꾼 117 <input type="radio" name="checkOpponent" value="HUNTER"/>사냥꾼
118 </div> 118 </div>
119 <div class="col-md-4"> 119 <div class="col-md-4">
120 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/f/fa/Malfurion_Stormrage%28621%29.png?version=b3f5a40e33f33d32995f3becbdd7aa94" style="width:150px;height:200px;"/> 120 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/f/fa/Malfurion_Stormrage%28621%29.png?version=77c0505d00ce8f853911fe2926f85271" style="width:200px;height:250px;"/>
121 <br> 121 <br>
122 <input type="radio" name="checkOpponent" value="DRUID"/>드루이드 122 <input type="radio" name="checkOpponent" value="DRUID"/>드루이드
123 </div> 123 </div>
...@@ -127,17 +127,17 @@ ...@@ -127,17 +127,17 @@
127 <br> 127 <br>
128 <div class="row" style="text-align: center;"> 128 <div class="row" style="text-align: center;">
129 <div class="col-md-4"> 129 <div class="col-md-4">
130 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/0/0a/Gul%27dan%28618%29.png?version=90f421585c6f2d493ba94e259a76190e" style="width:150px;height:200px;"/> 130 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/0/0a/Gul%27dan%28618%29.png?version=cdc516499d50f4887dc32d5a57674c2d" style="width:200px;height:250px;"/>
131 <br> 131 <br>
132 <input type="radio" name="checkOpponent" value="WARLOCK"/>흑마법사 132 <input type="radio" name="checkOpponent" value="WARLOCK"/>흑마법사
133 </div> 133 </div>
134 <div class="col-md-4"> 134 <div class="col-md-4">
135 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/3/3c/Jaina_Proudmoore%28320%29.png?version=75868a59a53f90bce829edeb66126b73" style="width:150px;height:200px;"/> 135 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/3/3c/Jaina_Proudmoore%28320%29.png?version=3b2fe59be9088a51fc77e579e4faa8ce" style="width:200px;height:250px;"/>
136 <br> 136 <br>
137 <input type="radio" name="checkOpponent" value="MAGE"/>마법사 137 <input type="radio" name="checkOpponent" value="MAGE"/>마법사
138 </div> 138 </div>
139 <div class="col-md-4"> 139 <div class="col-md-4">
140 - <img src="https://d1u5p3l4wpay3k.cloudfront.net/hearthstone_gamepedia/8/80/Anduin_Wrynn%28110%29.png?version=ba8ecc39b3fdd4a2ede72e046c434454" style="width:150px;height:200px;"/> 140 + <img src="https://gamepedia.cursecdn.com/hearthstone_gamepedia/8/80/Anduin_Wrynn%28110%29.png?version=0bac7e0db29ce55f333afe972a0afdb0" style="width:200px;height:250px;"/>
141 <br> 141 <br>
142 <input type="radio" name="checkOpponent" value="PRIEST"/>사제 142 <input type="radio" name="checkOpponent" value="PRIEST"/>사제
143 </div> 143 </div>
......
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
89 </div> 89 </div>
90 90
91 <!-- jQuery (부트스트랩의 자바스크립트 플러그인을 위해 필요합니다) --> 91 <!-- jQuery (부트스트랩의 자바스크립트 플러그인을 위해 필요합니다) -->
92 - <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 92 + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
93 <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 --> 93 <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 -->
94 <script src="../../static/bootstrap-3.3.2-dist/js/bootstrap.min.js"></script> 94 <script src="../../static/bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
95 </body> 95 </body>
......
1 +-- MySQL dump 10.13 Distrib 8.0.13, for Win64 (x86_64)
2 +--
3 +-- Host: localhost Database: whoareyou
4 +-- ------------------------------------------------------
5 +-- Server version 8.0.13
6 +
7 +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
8 +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
9 +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
10 + SET NAMES utf8mb4 ;
11 +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
12 +/*!40103 SET TIME_ZONE='+00:00' */;
13 +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
14 +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
15 +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
16 +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
17 +
18 +--
19 +-- Table structure for table `card`
20 +--
21 +
22 +DROP TABLE IF EXISTS `card`;
23 +/*!40101 SET @saved_cs_client = @@character_set_client */;
24 + SET character_set_client = utf8mb4 ;
25 +CREATE TABLE `card` (
26 + `id` int(11) NOT NULL AUTO_INCREMENT,
27 + `deckId` int(11) DEFAULT NULL,
28 + `cardId` int(64) DEFAULT NULL,
29 + `cardCost` int(11) DEFAULT NULL,
30 + `cardName` varchar(45) DEFAULT NULL,
31 + `cardNum` int(11) DEFAULT NULL,
32 + PRIMARY KEY (`id`)
33 +) ENGINE=InnoDB AUTO_INCREMENT=677 DEFAULT CHARSET=utf8;
34 +/*!40101 SET character_set_client = @saved_cs_client */;
35 +
36 +--
37 +-- Dumping data for table `card`
38 +--
39 +
40 +LOCK TABLES `card` WRITE;
41 +/*!40000 ALTER TABLE `card` DISABLE KEYS */;
42 +INSERT INTO `card` VALUES (626,124,70,1,'Blessing of Might',2),(627,124,41323,1,'Fire Fly',2),(628,124,48982,1,'Glow-Tron',2),(629,124,41912,1,'Lost in the Jungle',2),(630,124,48886,1,'Mecharoo',2),(631,124,42467,1,'Righteous Protector',2),(632,124,679,3,'Divine Favor',2),(633,124,1401,3,'Raid Leader',2),(634,124,45782,3,'Unidentified Maul',2),(635,124,46461,3,'Void Ripper',2),(636,124,45265,5,'Fungalmancer',2),(637,124,559,5,'Leeroy Jenkins',1),(638,124,45877,5,'Level Up!',2),(639,124,43515,7,'Corridor Creeper',2),(640,124,41859,7,'Vinecleaver',2),(641,124,48158,9,'Baku the Mooneater',1),(642,125,70,1,'Blessing of Might',2),(643,125,41323,1,'Fire Fly',2),(644,125,48982,1,'Glow-Tron',2),(645,125,41912,1,'Lost in the Jungle',2),(646,125,48886,1,'Mecharoo',2),(647,125,42467,1,'Righteous Protector',2),(648,125,679,3,'Divine Favor',2),(649,125,1401,3,'Raid Leader',2),(650,125,45782,3,'Unidentified Maul',2),(651,125,46461,3,'Void Ripper',2),(652,125,45265,5,'Fungalmancer',2),(653,125,559,5,'Leeroy Jenkins',1),(654,125,45877,5,'Level Up!',2),(655,125,43515,7,'Corridor Creeper',2),(656,125,41859,7,'Vinecleaver',2),(657,125,48158,9,'Baku the Mooneater',1),(658,126,180,0,'Backstab',2),(659,126,365,0,'Shadowstep',2),(660,126,268,1,'Cold Blood',2),(661,126,41323,1,'Fire Fly',2),(662,126,45340,2,'Prince Keleseth',1),(663,126,306,3,'Edwin VanCleef',1),(664,126,41683,3,'Gluttonous Ooze',1),(665,126,47014,3,'Hench-Clan Thug',2),(666,126,1117,3,'SI:7 Agent',2),(667,126,41418,3,'Tar Creeper',1),(668,126,45531,4,'Elven Minstrel',2),(669,126,43228,4,'Fal\'dorei Strider',2),(670,126,42395,4,'Saronite Chain Gang',2),(671,126,49972,4,'Spirit of the Shark',1),(672,126,45265,5,'Fungalmancer',2),(673,126,559,5,'Leeroy Jenkins',1),(674,126,48487,5,'Myra\'s Unstable Element',1),(675,126,41217,5,'Vilespine Slayer',2),(676,126,49184,5,'Zilliax',1);
43 +/*!40000 ALTER TABLE `card` ENABLE KEYS */;
44 +UNLOCK TABLES;
45 +
46 +--
47 +-- Table structure for table `deck`
48 +--
49 +
50 +DROP TABLE IF EXISTS `deck`;
51 +/*!40101 SET @saved_cs_client = @@character_set_client */;
52 + SET character_set_client = utf8mb4 ;
53 +CREATE TABLE `deck` (
54 + `id` int(11) NOT NULL AUTO_INCREMENT,
55 + `deckOwner` varchar(45) DEFAULT NULL,
56 + `deckTitle` varchar(45) DEFAULT NULL,
57 + `deckCode` varchar(500) DEFAULT NULL,
58 + PRIMARY KEY (`id`)
59 +) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8;
60 +/*!40101 SET character_set_client = @saved_cs_client */;
61 +
62 +--
63 +-- Dumping data for table `deck`
64 +--
65 +
66 +LOCK TABLES `deck` WRITE;
67 +/*!40000 ALTER TABLE `deck` DISABLE KEYS */;
68 +INSERT INTO `deck` VALUES (124,'test','홀수 성기사','AAECAZ8FAq8EnvgCDkbrwgLW/gK4xwL2/QLjywKnBfkK1uUC/eoC0eECteYC+9MCg8cCAA=='),(125,'oss','홀수 성기사','AAECAZ8FAq8EnvgCDkbrwgLW/gK4xwL2/QLjywKnBfkK1uUC/eoC0eECteYC+9MCg8cCAA=='),(126,'oss','켈레서스 템포 토적','AAECAaIHCJziArIC08UCysMCtIYDrwTn+gKggAMLtAHtAowC68ICpu8C3Qjb4wLc0QKbywLR4QKBwgIA');
69 +/*!40000 ALTER TABLE `deck` ENABLE KEYS */;
70 +UNLOCK TABLES;
71 +
72 +--
73 +-- Table structure for table `user`
74 +--
75 +
76 +DROP TABLE IF EXISTS `user`;
77 +/*!40101 SET @saved_cs_client = @@character_set_client */;
78 + SET character_set_client = utf8mb4 ;
79 +CREATE TABLE `user` (
80 + `id` int(11) NOT NULL AUTO_INCREMENT,
81 + `userId` varchar(45) DEFAULT NULL,
82 + `password` longtext,
83 + PRIMARY KEY (`id`)
84 +) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
85 +/*!40101 SET character_set_client = @saved_cs_client */;
86 +
87 +--
88 +-- Dumping data for table `user`
89 +--
90 +
91 +LOCK TABLES `user` WRITE;
92 +/*!40000 ALTER TABLE `user` DISABLE KEYS */;
93 +INSERT INTO `user` VALUES (26,'test','$2a$10$l6IgaLy13XZ7gu3prxvwF.zFH5kfkZVw2AQ6eSZgIeyPjVL3w1fr.'),(27,'oss','$2a$10$79hOQPJMKrTaLo.wk72uReH3SdR2wj4NV2DmWROHZ05uUxgmsP28K');
94 +/*!40000 ALTER TABLE `user` ENABLE KEYS */;
95 +UNLOCK TABLES;
96 +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
97 +
98 +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
99 +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
100 +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
101 +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
102 +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
103 +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
104 +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
105 +
106 +-- Dump completed on 2019-05-24 18:28:39