Profile picture

[Python] Steam API로 유저 프로필 정보 탐색하기

JaehyoJJAng2023년 12월 02일

◾️ 개요

image
Steam API를 사용하여 특정 유저의 프로필 정보를 탐색해보려고 한다.


내가 Steam API로 이루고자 하는 목적을 간단하게 말해보자면

게임 서버를 운영할 예정이고, 디스코드 API를 사용하여 간단한 인증 봇을 만들것이다.

해당 인증 봇은 아래와 같은 기능이 있다고 가정한다

  • /스팀등록 <사용자 스팀 프로필 주소>

최종적으로 봇이 유저가 입력한 스팀 프로필주소의 마지막 값(steamID64)를 추출하고,
해당 주소를 기반으로 steam api를 사용하여 해당 유저의 프로필 정보를 탐색하면 끝이다.

위 과정의 목적은 아래와 같다.

  • 게임을 보유중인지.

위처럼 귀찮은 과정을 거치는 이유는 내가 운영하려는 서버에 핵이 넘치기 때문에 1차적인 예방으로 어쩔 수 없이 인증 과정을 거쳐야한다.

물론, 유저가 입력한 프로필이 진짜 자신의 것인지 판별할 기능은 아직 없다..


▪️ 사전 준비

다음의 Steam API key 발급 페이지로 이동하여 steam api를 발급받도록 하자.
image


▪️ 코드 작성

  • Steam API UnOfficial Document
    • 위 링크를 추천하는 이유는 스팀 공식 API 문서는 개인적으로 불친절하다 느껴져서 가독성 좋게 정리된 곳이 없나 찾아보다가 발견한 사이트다.
    • 각 API 메서드들이 보기 좋게 서술되어 있으므로 애용하도록 하자.

main.py

import requests as rq

_key: str = '<STEAM API KEY>'
steamid: str ='xxxxxxxxxxx'

def target_appid() -> dict[str,str|int]:
    return {"appid": 1623730, "name": "Palworld"}

def get_user_profile(steamid: str) -> list[dict[str,int]]:
    request_url: str = 'https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001'
    params = {
        'key': _key,
        'steamid': steamid,
        'format': 'json'
    }
    response: rq.Response = rq.get(url=request_url,params=params)
    data: dict = response.json()['response']
    
    # data에 아무 값도 안 넘어온 경우 (프로필 비공개 또는 게임 정보 비공개)
    if len(data) == 0:
        print('프로필이 비공개이거나 게임정보 열람이 비공개인 상태입니다.')
        return None
    
    # 유저가 소유중인 game 목록 추출
    games: list[dict[str,int]] = [{'appid': game['appid'], 'playtime_forever': game['playtime_forever']} for game in data['games'] if game['appid'] == self.target_appid()['appid']]
    
    if len(games) != 0:
        return games

print(get_user_profile(steamid=steamid))
python3 main.py

image


Loading script...