저번에 만들어 놨던 Automatic_Steam_API 가 이상하다.
API를 사용해서 값을 받아오는데 , 이 때 값들이 누적되서 쌓인 뒤 , 그 값이 Excel 파일로 순차적으로 저장되야하는데 ,
이상하게 , 한 컬럼내에서 값이 바뀌고 결국에는 마지막 값만이 Excel에 남게 되었다 .
그래서 코드를 수정해 보았다 .
전체 코드는 다음인데 , 바뀐 부분만 따로 설명해 보겠따
import urllib.parse
import requests
import pandas as pd
# Steamspy API Get
main_api = "http://steamspy.com/api.php?request=tag&tag"
Searching_tags = "http://steamspy.com/api.php?request=appdetails&appid="
# User input
print("찾고자 하는 game 태그를 입력해 주세요.(영문)")
Userinput = input()
# main_api 에다가 사용자가 입력한 값을 encode해서 덧 붙여준다
url = main_api + urllib.parse.urlencode({'=':Userinput})
# url 요청을 json 형태로 받아온다 .
json_data = requests.get(url).json()
# 받아온 json 데이터가 이중 딕셔너리 형태이고 , 가져온 키값들이 규칙적인게 아니라
# 특정 appid 를 가지고 있다 . 그렇기 때문에 , key값만 빼서 따로 keys라는 변수에 저장시켜준다.
keys = [key for key in json_data]
# 특정 태그에 해당하는 특정 appid를 기반으로 다시 api 사용해서 appid에 해당하는 language + tags를 가져온다.
# decode 사용 필요 x , 숫자를 변수로 받기 때문에 , parse 필요없이 그냥 사용
data_1 = []
for Count in range(0,len(json_data)-4500):
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']))
# data 집합
#data =[['game_name','game_score_rank','game_userscore','game_owners','game_All_tags','game_languages'],
#[json_data[keys[Count]]['name'],json_data[keys[Count]]['score_rank'],json_data[keys[Count]]['userscore'],
# json_data[keys[Count]]['owners'],json_data2['tags'],json_data2['languages']]]
data_1.insert(Count ,
[json_data[keys[Count]]['name'],json_data[keys[Count]]['score_rank'],json_data[keys[Count]]['userscore'],
json_data[keys[Count]]['owners'],json_data2['tags'],json_data2['languages']])
# Dataframe 생성 및 csv 파일 생성
df = pd.DataFrame(data_1,columns=['game_name','game_score_rank','game_userscore','game_owners','game_All_tags','game_languages'])
df.to_csv("C:/Users/user/Desktop/졸작/2019-03-16-Steam_API/Steam_API_Beta_Data_2.csv",header=False,index=False)
기존에 for문에 존재했던 배열이다 .
# data 집합
#data =[['game_name','game_score_rank','game_userscore','game_owners','game_All_tags','game_languages'],
#[json_data[keys[Count]]['name'],json_data[keys[Count]]['score_rank'],json_data[keys[Count]]['userscore'],
# json_data[keys[Count]]['owners'],json_data2['tags'],json_data2['languages']]]
이 data라는 배열은 이중딕셔너리의 구조로써 , 차곡차곡 name , score_rank , userscor .. 등등 칼럼의 값이 들어가며
그 다음에는 각각의 받아온 데이터들이 들어갈 것이라고 생각을 하고 위처럼 코드를 생각했다.
근데 , 뭔가 이상했다 .
1. 배열에 주소값에 해당되는 특정 값의 지정이 없다 .
2. 배열은 위처럼 값을 할당해 주는것이 아니며 , insert를 통해서 값을 넣어 준다 .
그래서 이 생각을 바탕으로 다음 처럼 바꿨다 .
data_1 = []
먼저 , 내가 값을 넣어줄 배열이라는 공간을 만들어 준다 .
이 배열에는 name,score_rank... 차례대로 칼럼값과 그 칼럼에 해당되는 데이터 값이 들어 갈 것이다 .
이 배열은 for문 밖에 선언해 줌으로써 global 변수로 논다.
data_1.insert(Count ,
[json_data[keys[Count]]['name'],json_data[keys[Count]]['score_rank'],json_data[keys[Count]]['userscore'],
json_data[keys[Count]]['owners'],json_data2['tags'],json_data2['languages']])
--> 위는 위에 선언해준 배열에 값을 할당해 주는 것인데 , Count는 for문에서 받아온 변수이며 , 데이터를 가져온 길이까지의 숫자이다 .
insert의 형태는 다음과 같다 .
배열.insert(배열주소값,넣어줄값)
df = pd.DataFrame(data_1,columns=['game_name','game_score_rank','game_userscore','game_owners','game_All_tags','game_languages'])
df.to_csv("C:/Users/user/Desktop/졸작/2019-03-16-Steam_API/Steam_API_Beta_Data_2.csv",header=False,index=False)
--> 위는 배열로 선언되어진 데이터 값들을 pandas를 사용해서 DataFrame으로 만들어 주고 , 이 때 각각의 값들을 대표하는 칼럼의 이름을 선언해 준다 .
--> 마지막으로 만들어진 DataFrame을 to_csv 함수를 사용해서 csv파일로 저장한다 .
to_csv 는 다음과 같은 형태를 지닌다.
to_csv(경로,특정 옵션들...)
이제 만들어진 결과값을 확인해 보자 .
이건 추가로 알게 된 사실인데 , SteamAPI 에서도 업데이트를 하나 보다 .
원래 B칼럼에 해당되는 값들이 존재해야 하는데 없다 .
SteamAPI에 들어가서 직접 확인해 보니 없어졌다 .
결론은 업데이트에 따른 결과 값이 달라질 수 있구나 이다 .
'졸업작품_preparing.... > python_작업' 카테고리의 다른 글
Automatic_Steam_API 코드수정2 (0) | 2019.03.17 |
---|---|
%s , %d 의 차이 (0) | 2019.03.17 |
IndexError: list assignment index out of range 오류 (1) | 2019.03.16 |
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 |
#IT #먹방 #전자기기 #일상
#개발 #일상