dataitgirls4 / team_5

데모데이 5조
https://dataitgirls4.github.io/team_5/
7 stars 5 forks source link

[데이터추출] API 연결 및 raw-data 파악하기 #1

Closed haein-kim closed 3 years ago

haein-kim commented 3 years ago

raw data 얻기 전에 먼저 제공되는 데이터 파악하기

과정:

주로 볼 엔드포인트

  1. MATCHES
  2. TELEMETRY
  3. TOURNAMENTS

파악 필요한 것

✅ URL ✅ 특이 파라미터 ✅ 알 수 있는 것

heezeo commented 3 years ago

2020.11.13의 성과

playerNames로 필터하여 데이터 가져오기 성공


import requests

url = "https://api.pubg.com/shards/kakao/players?filter[playerNames]=de_javu_" 

header = {
  "Authorization": "Personal API Key",
  "Accept": "application/vnd.api+json"
}

r = requests.get(url, headers=header)
json = r.json()

json

matches로 필터하여 데이터 가져오기 성공

url =  "https://api.pubg.com/shards/kakao/matches/24a26a10-ae7f-4cba-a717-f2b00465393e" 
header = {
  "Authorization": "Personal API Key",
  "Accept": "application/vnd.api+json"
}

r = requests.get(url, headers=header)
json=r.json()

json

아직 안 된 것

kwiseon commented 3 years ago

2020.11.13의 성과

이렇게 데이터를 가져올 수도 있습니다. api 주소가 매우 길기 때문에 따로 빼주면 좀 더 깔끔한 코드 모양이 됩니다.

playerNames로 필터하여 데이터 가져오기 2

api_key = 'Personal API Key'
headers = {'accept': 'application/vnd.api+json',
           'Authorization': f'Bearer {api_key}'}

url = "https://api.pubg.com/shards/kakao/players?filter[playerNames]=dataitgirls"
r = requests.get(url, headers=headers)
player_dataitgirls_json = r.json()
player_dataitgirls_json

현재 하고 있는 것

haein-kim commented 3 years ago

짧은 가이드

https://velog.io/@haenyy3153/PUBG-API-python-requests https://velog.io/@haenyy3153/%ED%8E%8D%EC%A7%80-API-url-%EB%A7%8C%EB%93%A4%EA%B8%B0

haein-kim commented 3 years ago

앞으로 시도해볼 것 제안

위의 짧은 가이드를 스르륵 읽어야 이 말이 이해가 될 수도 있습니다!

PLAYERS, SEASON STATS, LIFETIME STATS, MASTERY, MATCHES -- 엔드포인트(?) 파이썬 requests 코드 중에 URL을 우리가 필요한대로 커스텀할 수도 있지만, 일단은 펍지에서 분류해 놓은 것의 결과값 확인이 필요해보입니다. Authorization과 Accept 는 계속 같은 걸 쓰니까, URL의 파라미터만 알면 됩니다.

기준점

지정할 수 있는 URL일 경우, 샘플 playerName과 날짜를 몇 가지 정하면 서로 비교하기 쉬울 것 같습니다.

haein-kim commented 3 years ago

Endpoint PLAYERS

api-players.py 예시 Gen.G pio

URL

https://api.pubg.com/shards/steam/players?filter[playerNames]={playerName}

https://api.pubg.com/shards/steam/players/{account Id}

특이 파라미터

알 수 있는 것

haein-kim commented 3 years ago

Endpoint MATCHES

예시 Gen.G pio

URL

https://api.pubg.com/shards/steam/matches/{id}

특이 파라미터

알 수 있는 것

많음... 파악 중.... 중도하차.....

haein-kim commented 3 years ago

Endpoint TOURNAMENT

1. tournaments

URL
https://api.pubg.com/shards/steam/matches/tournaments
특이 파라미터
없음 알 수 있는 것
최근 정규 경기의 '토너먼트 아이디'

2. tournaments/{id}

URL
https://api.pubg.com/shards/steam/matches/tournaments/{id}
예: https://api.pubg.com/shards/steam/matches/tournaments/as-pcs3as
특이 파라미터
토너먼트 아이디는 1번을 통해서 얻을 수 있다.
알 수 있는 것
생성날짜와 매치 아이디 (이번 시즌 끝나면 총 24개)

더 필요한 작업

여기서 얻은 매치 아이디로 matches 검색이 안됨...

haein-kim commented 3 years ago

TOURNAMENT 로 PCS3 ASIA 매치 아이디 추출

참고1: 여기 참고2: 여기

PCS3 ASIA id : as-pcs3as

endpoint TOURNAMENT 에서 추출한 데이터

import requests
import pandas as pd

api_key = "본인 api_key"

header = {
  "Authorization": api_key,
  "Accept": "application/vnd.api+json"
}

url = "https://api.pubg.com/tournaments/as-pcs3as"

r = requests.get(url, headers=header)
leagues_pcs3as = r.json()
leagues_pcs3as

matchId_dict = {match['attributes']['createdAt']: match['id'] for match in leagues_pcs3as['included']}
matchId_df = pd.DataFrame(sorted(matchId_dict.items(), key=lambda x: x[0]), columns=['createdAt', 'matchId'])
matchId_df

image

해당 매치 아이디를 가지고 매치 마다의 정보를 꺼내고 싶은데 어렵네요.

haein-kim commented 3 years ago

기본적으로 response 확인은 완료하였고 이후 방향이 바뀌어서 본 이슈는 닫겠습니다!

haein-kim commented 3 years ago

data depth 별로 분류해서 wiki화는 못했지만, dict 가 여러번 겹쳐진 데이터의 depth를 쉽게 파악하는 코드는 만들어볼 수 있었다.

json화한 데이터를 pprint 모듈을 사용해 확인해보는 코드

import pprint
pprint.pprint(players_sample, depth=15)

모든 depth가 다 확인되길 바라며 넉넉히 15로 넣어보면 아래와 같은 형태의 결과가 나온다.

{'data': [{'attributes': {'name': 'de_javu_',
                          'patchVersion': '',
                          'shardId': 'kakao',
                          'stats': None,
                          'titleId': 'bluehole-pubg'},
           'id': 'account.ca8daa0ecd934bfc8d2c928523cef677',
           'links': {'schema': '',
                     'self': 'https://api.pubg.com/shards/kakao/players/account.ca8daa0ecd934bfc8d2c928523cef677'},
           'relationships': {'assets': {'data': []},
                             'matches': {'data': [{'id': 'e35b54c0-973d-4378-b28e-6671dc071d22',
                                                   'type': 'match'},
                                                  {'id': '096d7fb1-086a-4674-a403-55b3cc66a322',
                                                   'type': 'match'},
                                                  {'id': '4b0b65cd-ac4a-4c5d-a651-519ca5d48468',
                                                   'type': 'match'},
                                                  {'id': '7a61887e-387c-4348-ac9d-62e2e89c448b',
                                                   'type': 'match'},
                                                  {'id': '5076eb9d-f077-4e63-98c3-e7b79620d0cd',
                                                   'type': 'match'},
                                                  {'id': '5f35024e-f1d9-4951-b170-8df6598079bf',
                                                   'type': 'match'},
                                                  {'id': '8b7a88e0-a182-4d28-9d41-070dc40807b8',
                                                   'type': 'match'},
                                                  {'id': '659b9b31-9b67-4566-b60d-2601e147ce03',
                                                   'type': 'match'},
                                                  {'id': '08bc0a33-653a-4a8e-9918-6cf6e91144f6',
                                                   'type': 'match'},
                                                  {'id': '043887bd-4cab-4f17-b511-b041597d6484',
                                                   'type': 'match'},
                                                  {'id': 'f4ca3b8f-2f2b-4312-b072-3dd5222ae4ab',
                                                   'type': 'match'},
                                                  {'id': '208006de-9679-45e5-93d3-e4de0d11d997',
                                                   'type': 'match'},
                                                  {'id': '24a26a10-ae7f-4cba-a717-f2b00465393e',
                                                   'type': 'match'},
                                                  {'id': 'bd694081-4b0a-4818-a084-35dc8fa29da4',
                                                   'type': 'match'},
                                                  {'id': 'cfcbb47a-57c2-49ca-aa01-00827399af13',
                                                   'type': 'match'},
                                                  {'id': 'b8dbab10-1caa-4de7-af0e-a4820e949a2b',
                                                   'type': 'match'},
                                                  {'id': 'e1d3938f-0597-49f0-a274-663421c6c721',
                                                   'type': 'match'},
                                                  {'id': '373f6004-e569-467e-9b07-c8797b926bb3',
                                                   'type': 'match'},
                                                  {'id': '3806573a-ee26-441f-acc8-86b0196f1241',
                                                   'type': 'match'},
                                                  {'id': 'e5ec3f51-cd86-4dbf-b633-47683538fe0c',
                                                   'type': 'match'},
                                                  {'id': 'f9ee7acd-6f53-40a5-9af1-c4b4a1949fa1',
                                                   'type': 'match'},
                                                  {'id': 'dcda5674-ff51-4a56-9e2a-1b3ca5f06584',
                                                   'type': 'match'}]}},
           'type': 'player'}],
 'links': {'self': 'https://api.pubg.com/shards/kakao/players?filter[playerNames]=de_javu_'},
 'meta': {}}