Showing
1 changed file
with
77 additions
and
79 deletions
1 | var request = require("request"); | 1 | var request = require("request"); |
2 | -var express = require('express'); | 2 | +var express = require('express'); |
3 | +var fs=require('fs'); | ||
3 | var puuid_url_list=[] | 4 | var puuid_url_list=[] |
4 | var events=require('events') | 5 | var events=require('events') |
5 | -var key = "RGAPI-78e43419-9016-45e3-8300-1e5febc8ef54" // LOL API key | 6 | +var key = "RGAPI-82f68b2b-8db9-4b3d-951a-7684fbb49a4c" // LOL API key |
6 | var app = express(); | 7 | var app = express(); |
7 | var eventEmitter=new events.EventEmitter(); | 8 | var eventEmitter=new events.EventEmitter(); |
8 | var bodyParser = require('body-parser'); | 9 | var bodyParser = require('body-parser'); |
9 | let puuid | 10 | let puuid |
10 | let option | 11 | let option |
11 | -let checking=1 | ||
12 | app.use(bodyParser.urlencoded({ extended: false })); | 12 | app.use(bodyParser.urlencoded({ extended: false })); |
13 | app.use(bodyParser.json()); | 13 | app.use(bodyParser.json()); |
14 | var name_list=[] // 유저의 아이디와 매칭되는 고유번호 | 14 | var name_list=[] // 유저의 아이디와 매칭되는 고유번호 |
15 | var puuid_list=[] // puuid 저장을 위한 리스트 | 15 | var puuid_list=[] // puuid 저장을 위한 리스트 |
16 | +eventEmitter.setMaxListeners(200) | ||
17 | + | ||
18 | + | ||
16 | 19 | ||
17 | 20 | ||
18 | app.get('/', function (req, res) { | 21 | app.get('/', function (req, res) { |
19 | - res.send("My galaxy") // 버튼 구현 (은하계(맵) 으로 이루어진 버튼들) => 버튼 클릭시 해당 url로 get 하여 데이터 획득 | 22 | + |
20 | -}); | 23 | + }); |
24 | + // 버튼 구현 (은하계(맵) 으로 이루어진 버튼들) => 버튼 클릭시 해당 url로 get 하여 데이터 획득 | ||
21 | 25 | ||
22 | 26 | ||
23 | app.get('/galaxy',function(req,res) | 27 | app.get('/galaxy',function(req,res) |
... | @@ -31,95 +35,89 @@ app.get('/galaxy',function(req,res) | ... | @@ -31,95 +35,89 @@ app.get('/galaxy',function(req,res) |
31 | for (var value in name) | 35 | for (var value in name) |
32 | { | 36 | { |
33 | name_list.push(name[value]["summonerId"]) | 37 | name_list.push(name[value]["summonerId"]) |
34 | - | 38 | + console.log(name_list.length) |
35 | - } | 39 | + |
40 | + if(name_list.length==200) | ||
41 | + { | ||
36 | eventEmitter.emit('name_done') | 42 | eventEmitter.emit('name_done') |
43 | + console.log("!") | ||
44 | + } | ||
45 | + } | ||
37 | }); //request1 END | 46 | }); //request1 END |
38 | 47 | ||
39 | - | 48 | + eventEmitter.on("name_done",function() |
40 | - eventEmitter.on('name_done',function() //url 설정 | ||
41 | { | 49 | { |
42 | - | 50 | + console.log(name_list.length) |
43 | - for (i=0;i<name_list.length;i++) | 51 | + for (i=0; i<name_list.length;i++) |
44 | { | 52 | { |
53 | + console.log("https://kr.api.riotgames.com/tft/summoner/v1/summoners/"+name_list[i]) | ||
45 | puuid_url_list.push("https://kr.api.riotgames.com/tft/summoner/v1/summoners/"+name_list[i]) | 54 | puuid_url_list.push("https://kr.api.riotgames.com/tft/summoner/v1/summoners/"+name_list[i]) |
46 | - | 55 | + console.log(puuid_url_list) |
47 | - } | 56 | + if (puuid_url_list.length==200) |
48 | - eventEmitter.emit("setting_done") | ||
49 | -});//setting end | ||
50 | - | ||
51 | - | ||
52 | - eventEmitter.on("setting_done",function() //puuid 가져오기 | ||
53 | - { | ||
54 | - if (checking==1) | ||
55 | { | 57 | { |
56 | - option={ | 58 | + eventEmitter.emit("puuid_url_done") |
57 | - url:puuid_url_list[0], | 59 | + break |
58 | - method: 'GET', | ||
59 | - headers:{ | ||
60 | - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", | ||
61 | - "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", | ||
62 | - "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8", | ||
63 | - "Origin": "https://developer.riotgames.com", | ||
64 | - "X-Riot-Token": key} | ||
65 | - } | ||
66 | - eventEmitter.emit("run_request") //for 문 마다 run_request를 한다. | ||
67 | - | ||
68 | - } | ||
69 | - else | ||
70 | - { | ||
71 | - | ||
72 | - for (i=1;i<name_list.length;i++) | ||
73 | - { | ||
74 | - eventEmitter.emit("run_request") | ||
75 | - eventEmitter.on('run_request2',function(){ | ||
76 | - option={ | ||
77 | - url:puuid_url_list[i], | ||
78 | - method: 'GET', | ||
79 | - headers:{ | ||
80 | - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", | ||
81 | - "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", | ||
82 | - "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8", | ||
83 | - "Origin": "https://developer.riotgames.com", | ||
84 | - "X-Riot-Token": key} | ||
85 | } | 60 | } |
86 | - //for 문 마다 run_request를 한다. | ||
87 | - }); | ||
88 | } | 61 | } |
89 | -} | ||
90 | - eventEmitter.emit('data_received') | ||
91 | 62 | ||
92 | - });//event-setting done end | 63 | + });//name_done => puuid_url 설정 완료 |
93 | - | 64 | + |
94 | -eventEmitter.on('run_request',function()//자료 가져오기 (puuid) | 65 | + eventEmitter.on("puuid_url_done",function(){ //puuid 가져오기 |
95 | -{ | 66 | + console.log(puuid_url_list) |
96 | - request(option,function(err,res,body) | 67 | + function delay(option) { |
68 | + return new Promise(resolve => //option=> request hedear 가 설정되기 전에 request를 해버리는 문제 해결하기위해 promise 사용 | ||
69 | + setTimeout(() => { | ||
70 | + request(option,function(err,res,body) | ||
71 | + { | ||
72 | + | ||
73 | + puuid = JSON.parse(body) | ||
74 | + console.log(puuid) | ||
75 | + puuid=puuid["puuid"] | ||
76 | + puuid_list.push(puuid) | ||
77 | + console.log(puuid_list) | ||
78 | + console.log(puuid_list.length) | ||
79 | + if(puuid_list.length==200) //puuid 를 100개는 잘가져오고 100개는 못가져오는 문제 생김 | ||
80 | + { | ||
81 | + eventEmitter.emit("puuid_find_done") | ||
82 | + } | ||
83 | + }); | ||
84 | + resolve(); },400) ); | ||
85 | + } | ||
97 | 86 | ||
98 | - { | 87 | + async function loop(puuid_url_list) { |
99 | - puuid = JSON.parse(body) | 88 | + |
100 | - puuid=puuid["puuid"] | 89 | + { |
101 | - puuid_list.push(puuid) | 90 | + for (i=0;i<puuid_url_list.length;i++) |
102 | - if (checking==1) | 91 | + { |
103 | - { | 92 | + |
104 | - checking=2 | 93 | + option={ |
105 | - eventEmitter.emit("setting_done") | 94 | + url:puuid_url_list[i], //url 값 설정은 확인 완료 |
106 | - | 95 | + method: 'GET', |
96 | + headers:{ | ||
97 | + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", | ||
98 | + "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", | ||
99 | + "Accept-Charset": "application/x-www-form-urlencoded; charset=UTF-8", | ||
100 | + "Origin": "https://developer.riotgames.com", | ||
101 | + "X-Riot-Token": key} | ||
102 | + } | ||
103 | + | ||
104 | + | ||
105 | + await delay(option); | ||
107 | 106 | ||
107 | + } | ||
108 | + } | ||
109 | + | ||
108 | } | 110 | } |
109 | - else | 111 | + loop(puuid_url_list); |
110 | - { | ||
111 | - eventEmitter.emit("run_request2") | ||
112 | - } | ||
113 | - | ||
114 | }); | 112 | }); |
115 | -}); //run_request end | 113 | + |
116 | - | 114 | + eventEmitter.on("puuid_find_done",function(){ |
117 | - | 115 | + |
116 | + res.send(puuid_list) | ||
117 | + }); | ||
118 | + | ||
118 | });// app end | 119 | });// app end |
119 | 120 | ||
120 | 121 | ||
121 | var server = app.listen(80); | 122 | var server = app.listen(80); |
122 | -eventEmitter.on('data_received',function(){ | ||
123 | - console.log(name_list); | ||
124 | - console.log(puuid_list) | ||
125 | -}); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
123 | +console.log("run!") | ... | ... |
-
라이엇 api 에서 제가 필요한 정보를 받아오려면
- 사용자 아이디를 입력하여 아이디 값 (line 의 유저아이디와 비슷한 형태) 를 받아 옵니다.
- 이 아이디값으로 puuid 값을 받아 옵니다.
- puuid 를 사용하여 게임 정보를 가져옵니다. 단계로 진행해야 합니다.
현재 1번은 해결을 하였고 2번 과정에서 각자 다른 주소 200개를 request 해줘야하는데 이 과정에서 주석과 같이 100개 만 들어오고 100개는 손실되는 경우가 발생합니다. 서버 코드를 확인해보니 429 Rate limit exceeded 가 나옵니다. 통계적 자료이기 때문에 200명의 자료 모두 사용하고자 하지만 해결방안이 없으면 100명의 자료를 기준으로 하고자합니다.
-
Please register or login to post a comment