Steam_game 의 몇가지 필요한 정보들이 있었다.
예를 들면 , 특정 게임의 태그 . 이름 . 출시일 . 추천수 . 소유자 .. 등등이다.
크롤링을 사용하여서 할 수 있다 .
다만 , 시간적이 오래걸릴 뿐더러 , 데이터의 손실의 가능성이 있다.
그리고 내가 필요로 하는 정보가 사이트에 없는 경우가 있으며 , 이 정보를 따로 만들어서 합치는 작업을 생각하면
많은 시간을 필요로 한다.
그래서 알게된 api가 있다.
https://steamspy.com/api.php
--> 위 사이트는 steamspy 사이트이며 , Steam 게임에 대한 dataset을 가지고 있으며 , 무료 api를 제공한다.
위 api를 사용해서 사용자의 입력을 받아서 , 특정 태그에 따른 게임의 정보들을 출력해 보는 자동화도구를 만들어 보겠다.
작업환경은 Pycharm , Jupyter notebook 을 썼으며 , 주된 작업은 Jupyter notebook 에서 하고
완성된 코드는 Pycharm에서 정리를 하면서 해보았다.
코드를 통해서 확인해 본다 .
먼저 필요한 라이브러리를 로딩시켜준다.
import urllib.parse
import requests
parse는 url을 다룰때 변환할 때 사용할 것이다.
requests는 말 그대로 req 할 때 사용할 것이다.
다음은 우리가 사용할 url 을 변수에다가 저장시켜준 것이다.
내가 사용한 Steamspy 에서 제공한 api 는 특정 게임의 이름을 입력받아서 출력해 주는 메소드의 기능은 없었다.
그래서 , 특정 태그를 입력을 받았으며 , 태그를 통해서 얻을 수 있는 response에는 tags , language를 포함하고 있지 않았다.
그렇기 때문에 나는 , 2개의 api 메소드를 이용해야 했다.
게임의 자세한 정보는 appdetails&appid 를 통해서 얻을 수 있는데 , steamspy에서 appid는 규칙이 불규칙적이며 , 내가 그 appid를 유추하기 힘들었기 때문에 , tag 검색을 통해서 얻어진 appid를 기반으로 appdetails&appid 를 통해서 게임의 tags, language를 얻어 올 수 있었다.
# Steamspy API Get
main_api = "http://steamspy.com/api.php?request=tag&tag"
Searching_tags = "http://steamspy.com/api.php?request=appdetails&appid="
다음은 , 사용자에게 특정 태그를 입력받는 입력이다 ( 추후에 한글버전도 추가할 것이다 )
print("찾고자 하는 game 태그를 입력해 주세요.(영문)")
Userinput = input()
다음은 , 우리가 위에서 선언해준 api 주소에 urlencode를 통해서 url 변수를 만든다 .
그리고 url 변수를 req.get 으로써 request 를 하고 이 형태를 json형태로 받아온다
# main_api 에다가 사용자가 입력한 값을 encode해서 덧 붙여준다
url = main_api + urllib.parse.urlencode({'=':Userinput})
# url 요청을 json 형태로 받아온다 .
json_data = requests.get(url).json()
이렇게 받아온 json_data 를 확인해 보니 , 이중 딕셔너리 형태였다.
이중 딕셔너리 형태는 key : value 값으로 이루어 지는데 , 여기서 이 key값이 불규칙적이기 떄문에
특정 변수에 key값을 넣어 주어야 했다.
# 받아온 json 데이터가 이중 딕셔너리 형태이고 , 가져온 키값들이 규칙적인게 아니라
# 특정 appid 를 가지고 있다 . 그렇기 때문에 , key값만 빼서 따로 keys라는 변수에 저장시켜준다.
keys = [key for key in json_data]
다음 코드를 보면 for문으로써 출력을 한 형태이다.
다음 코드를 보면 위에서 왜 keys 라는 변수를 썼는지 알 수 있을 것이다.
내가 가져온 특정 태그의 response 의 parameter들은 이중 딕셔너리이며 , key 값이 불규칙적이기 때문에 ,
받아온 data의 크기만큼 for문을 돌리고 , 각 key값들은 배열의 주소값으로써 순서대로 저장되어 있기 때문에 ,
그 배열에 저장된 key값에 따라 내가 원하는 정보를 따로 걸러낼 수 있었다.
for문내에는 위에서 말한 2개의 api중 하나인데 , 이 api는 json_data의 appid의 값을 기반으로 api_requests를 한다.
위 url과는 다르게 str 로써 key값을 붙여주었는데 , 여기서의 appid는 숫자의 형태이기 때문에 , 문자열로만 형변환을 해주었다.
for Count in range(0,len(json_data)):
url2 = Searching_tags + str(keys[Count])
json_data2 = requests.get(url2).json()
print("game_appid : " + keys[Count])
print("================================")
print("game_name : " + json_data[keys[Count]]['name'])
print("================================")
print("game_score_rank : " + str(json_data[keys[Count]]['score_rank']))
print("================================")
print("game_userscore : " + str(json_data[keys[Count]]['userscore']))
print("================================")
print("game_owners : " + str(json_data[keys[Count]]['owners']))
print("================================")
print("game_All_tags : " + str(json_data2['tags']))
print("================================")
print("game_languages : " + str(json_data2['languages']))
출력화면은 다음과 같다.
먼저 , 사용자의 입력을 받는다
사용자의 입력을 통해 다음과 같은 결과값들이 나온다.
위 처럼 나오게 되는데 , tags는 이쁘게 출력되지 않았는데 , 이 점은 추후 고칠 것이다.
그리고 영문 뿐만아니라 한글도 되면 좋을것 같다는 생각이 든다 .
'졸업작품_preparing.... > python_작업' 카테고리의 다른 글
Python: Pandas pd.read_excel giving ImportError: Install xlrd >= 1.0.0 for Excel support (0) | 2019.02.24 |
---|---|
Steam_game_ 자동화도구 ( CSV 파일 추가 부분 ) (0) | 2019.02.10 |
Pythons에서 Exel,csv 파일 불러오기 (0) | 2019.01.20 |
Python_협업필터링_알고리즘3 (0) | 2019.01.01 |
Python 협업필터링_알고리즘2 (0) | 2018.12.31 |
#IT #먹방 #전자기기 #일상
#개발 #일상