보드게임 데이터 API 사용법 정리

안준성·2024년 4월 22일

Project::BoardPick

목록 보기
6/11

현재 진행하고 있는 프로젝트에서
보드게임에 대한 정보들을 제공할건데
이것들을 수작업으로 할 순 없으니
API나 데이터셋들에서 어떤 데이터들을 가져올 수 있는지 정리해보려 한다.


API

먼저 이쪽 분야에서 제일 유명한 BoardGame Geek을 살펴보자.
BoardGame Geek(이하 BGG) API는 xml형태로 응답한다.

들어가기에 앞서 해당 문서에서 여러 command들이 등장하는데
모두 정리하기에는 내용이 길어져
해당 포스팅에서는 쓸모 있어 보이는 정보들만 정리해 보겠다.

먼저 기본적인 url 형태가 다음과 같이 주어진다.

  • https://boardgamegeek.com/xmlapi2/
  • https://rpggeek.com/xmlapi2/
  • https://videogamegeek.com/xmlapi2/

3개 다 호환되기 때문에 아무거나 써도 된다.

thing

해당 문서에서 유형적인 것들을 thing이라고 부르는데
실질적으로 필요한 거의 모든 정보가 여기에 담겨있다.
thing을 통해 얻어올 수 있는 정보들은 대략 다음과 같다.

base URI : .../xmlapi2/thing?parameters

  • type (boardgame)

  • thumbnail

  • image

  • name (type=primary로 영어, type=alternate로 다양한 언어 버전 제공)

  • description (근데 영어다)

  • yearpublished (출시연도인듯)

  • minplayers

  • maxplayers

  • suggested_numplayers (각 숫자에 대해 사용자들의 Best, Recommended, Not Recommended 투표수를 담고있다.)

  • minplaytime

  • maxplaytime

  • minage

  • category (<link type="boardgamecategory"/>)

  • mechanic (<link type="boardgamemechanic"/>)

  • family (<link type="boardgamemefamily"/>)

    여기서 위 3가지의 차이점이 헷갈려서 정리해봤다.

    • category : 보드게임의 전반적인 테마나 장르 (ex. Economic)
    • mechanic : 게임 내에서 플레이어가 사용하는 구체적인 규칙이나 방법론 (ex. Market)
    • family : 특정 유형, 메커니즘, 테마 또는 게임 시리즈를 함께 묶은 것 (ex. Country: England)
      사실 정리해놓고 봐도 뭔 차인지 잘 모르겠다.
  • boardgameartist

  • boardgamepublisher

등이 있다. (불필요해보이는 부분들은 제외함.)

parameters

thing에는 다양한 파라미터들이 있다.
특히 stats 파라미터를 켜주게 되면 꽤나 쓸모있는 정보들을 받아올 수 있는데
이는 다음과 같다.

  • usersrated: 이 게임에 평가를 남긴 사용자 수.
  • average: 게임의 평균 평점
  • bayesaverage: Bayesian 평균 평점. 이는 특정 최소 응답 수를 만족시키기 위해 조정된 평균 평점으로, 평점 조작을 방지하고 더 안정적인 평가를 제공하기 위해 사용.
  • ranks: 이 게임의 다양한 카테고리에서의 순위.
    • subtype (boardgame): "Board Game Rank"에서의 순위로, 이 게임은 1위입니다.
    • family (strategygames): "Strategy Game Rank"에서의 순위로, 이 게임은 역시 1위입니다.
  • stddev: 평점의 표준 편차로, 사용자 평가의 분산 정도를 나타낸다.
  • median: 평점의 중앙값. 여기서는 0인데, 이는 모든 평가가 한쪽으로 치우쳐 있지 않음을 의미.
  • wishing: 이 게임을 위시리스트에 추가한 사용자 수
  • numcomments: 이 게임에 대한 코멘트 수
  • numweights: 이 게임의 복잡성에 대한 평가를 남긴 사용자 수
  • averageweight: 게임의 평균 복잡성(난이도) 평점으로, 1(가벼움)에서 5(무거움) 사이의 척도를 가짐.

또한 추가적으로 쓸모 있어 보이는 파라미터로는

  • versions=1 : 해당 보드게임의 다양한 버전들에 대한 정보가 포함되어있다. 주로 출시연도나 언어에 따라 버전이 나뉘는 듯하다.
  • videos=1 : 비디오 링크 정보가 포함된다.
  • comments=1 : 유저들이 작성한 rating 값과 comment 내용이 포함된다.
  • ratingcomments=1 : comments와 유사하나 rating 기준으로 내림차순 정렬되어 있다. comments와 동시에 쓸 수 없다.
    • page=NNN : comments에 대해 몇 페이지껄 들고 올건지 정할 수 있다.
    • pagesize=NNN : 한 페이지에 담길 레코드 수. (10 ~ 100)

등이 있다.


Data Set

kaggle에 사람들이 이미 수집해놓은 data set을 올려둔게 있었다.
다만 수집일이 약간 오래 돼 직접 API에서 받아오는 정보보단 못한거 같았다.

원래는 api 뜯어보는게 생각보다 쉽지 않아서
이 data set을 쓸까 했는데,
api 문서를 계속 보다보니 어느 순간 읽히게 돼서 그냥 api에서 받아올련다.

혹시나 필요하신 분들을 위해 링크만 걸어놓겠다.
Board Game Data (수집일 2017년 3월)
bgg-games-data (수집일 2020년 7월)
Board Games Analysis 🎲🎲🎯 (수집일은 명시되어 있지 않으나 작성일이 3년전인걸로 보아 2021년쯤으로 예상된다.)

profile
안녕하세요

0개의 댓글