스모곤 사이트를 저장해서 뜯어보면 <head> 부분에 이런 스크립트 구문이 있다.

(모든 상세 페이지에 해당되는 내용)

   <script type="text/javascript">
            dexSettings = {"injectRpcs":[["[\"dex\",\"dump-gens\"]",[{"name":"Red/Blue","
shorthand":"RB"},{"name":"Gold/Silver","shorthand":"GS"},{"name":"Ruby/Sapphire",
"shorthand":"RS"},{"name":"Diamond/Pearl","shorthand":"DP"},{"name":"Black/White",
"shorthand":"BW"},{"name":"X/Y","shorthand":"XY"},{"name":"Sun/Moon","shorthand":"SM"},
{"name":"Sword/Shield","shorthand":"SS"}]],["[\"dex\",\"dump-basics\",{\"gen\":\"ss\"}]",
{"pokemon":[{"name":"Bulbasaur","hp":45,"atk":49,"def":49,"spa":65,"spd":65,"spe":45,
"weight":6.9,"height":0.7,"types":["Grass","Poison"],"abilities":["Chlorophyll",
"Overgrow"],"formats":["LC"],"isNonstandard":"Standard"...
....

자세한 작동원리는 모르겠으나, 중요한 건 저 스크립트 안에 dexSettings라는 아주 유용한 데이터가 있다는 점이다!

저 부분만 따로 떼어서 맵 자료형으로 만들어보았다.


일단 이렇게 포켓몬 / 포맷 / 성격 / 특성 / 기술 / 타입 / 도구에 대한 내용이 싹 다 들어있다.

물론 대부분은 int나 string으로만 들어있을 뿐이라서 이를 DB화하려면 추가적인 노력이 필요하긴 하다. 그래도 이게 어디인가!


일례로 이상해꽃을 보면

 {
      "name": "Venusaur",
      "hp": 80,
      "atk": 82,
      "def": 83,
      "spa": 100,
      "spd": 100,
      "spe": 80,
      "weight": 100,
      "height": 2,
      "types": ["Grass""Poison"],
      "abilities": ["Chlorophyll""Overgrow"],
      "formats": ["RUBL"],
      "isNonstandard": "Standard",
      "oob": {
        "dex_number": 3,
        "evos": [],
        "alts": ["Venusaur-Gmax""Venusaur-Mega"],
        "genfamily": ["RB""GS""RS""DP""BW""XY""SM""SS"]
      }
    },

종족값과 체중/키 (심지어 미터법!) 타입, 특성, 가라르에서 사용가능여부(isNonstandard) 전국도감번호, 폼체인지(alts), 등장 세대까지 다 나오는 것을 확인할 수 있다.

가라르 입국을 못한 포켓몬들은 isNonstandard에 NatDex라는 값이 들어가 있다.


아, 그리고 여기에는 CAT(Create A Pokemon)이라는 프로젝트에서 추가한 자작 포켓몬들 데이터도 몇 십개 정도 들어가 있으니ㅋㅋ 알아서 거르시길.


dexSettings_Smogon.dart 다운로드 링크


유용한 자료가 되기를.

왜 dart파일이냐하면.. 그나마 내가 쓸 줄 아는 언어가 Flutter 뿐이라 그러하다..ㅠ

물론 JS는 필수니까 배워보려 하는 중.