사용자:Senouis/게임 탐색기 2.0
이것은 새로운 게임 목록 문서와 각 게임의 대문에 붙는 정보 틀 통합을 구현해 내기 위한 최종 구현 사항이다.
게임 목록 문서 2.0[편집 | 원본 편집]
두 가지 안이 있다.
다음과 같은 API 요청을 보내면 50개의 game.json 문서를 골라 보낸다. 그리고 continue JSON 하위 객체를 반환하는 데 이걸 query 갱신에 사용해 continue 객체를 쿼리 결과로 반환하지 않을 때까지 반복한다.
https://libertygame.miraheze.org/w/api.php?action=query&format=json&list=search&srwhat=title&srsearch=game.json&srnamespace=0&srlimit=50
- query.searchinfo.totalhits로 전체 game.json 문서 수를 알아낸다.
- 일단 기본적으로 전체 게임을 볼 때는 위 주소에 추가로 sroffset 파라미터가 설정된 것과 동일한 데이터를 보여준다. 이 파라미터 값을 변화시키며 0.5초에 50개씩 게임 이름들을 쿼리로 요청한다.
- query.search.title의 string을 URL Decode하는 작업을 반드시 거친 다음 json 객체에 집어넣고 continue JSON 객체로 API 헤더 객체를 update 메서드로 갱신하고 다시 전송하는 행위를 반복하여 game.json 파일의 목록을 구성한다.
- game.json 문서 목록 객체에 query.searchinfo.totalhits 값을 추가하고, 목록을 구성한 시간의 timestamp도 저장한 뒤 Localstorage에 저장한다.
- Localstorage에 있는 전체 game.json 문서 수가 게임 목록 문서에 진입했을 때 기본적으로 수행하는 검색 쿼리(sroffset=0)로 새로 얻은 query.searchinfo.totalhits와 다르면 총 게임 수에 변동이 있으므로 즉시 리프레시하며, 리버티게임 내 게임들의 추가/삭제로 인한 변동에도 우연히 접속하는 타이밍마다 게임 갯수가 일치하는 상황을 막기 위해 현재 시간 timestamp와 저장된 timestamp의 차이가 48시간을 초과하면 역시 리프레시한다. 그 외에는 LocalStorage에 분류한 데이터를 바로 사용한다.
- 게임 목록 빌딩이 끝나면 리버티게임 게임 목록 문서에서 게임 목록 링크를 표시하고 그 옆에 클릭시 게임 정보를 서버로 비동기 요청해서 가져와 보여주는 '자세히 보기' 역할의 HTML element를 둔다.
추후 wikibase 탐색 모듈이 개발될 때까지 이 형태로 두며, wikibase 탐색 모듈이 개발되는 대로 아래 게임 정보 틀과 연계해 모든 탐색을 서버 단에서 처리하는 것으로 한다.
두 번째로, Categorymembers API를 이용하는 것으로, 틀:JSON을 활용해 game.json의 장르 값을 가져와 게임 타이틀 문서에 category를 추가하여 장르별 분류를 전술한 API 요청으로 감지하도록 한다. 현재 {{장르 분류}}를 게임마다 붙이는 매크로 작업이 되어 이 방법을 먼저 진행한다. API 사용법은 search API와 유사하다.
통합된 게임 정보 틀[편집 | 원본 편집]
모듈:Metadata는 게임 목록 아이콘을 틀:JSON 기반 파싱이 아닌 Scribunto 루아 모듈 기반으로 결정하는 것이다. Scripbunto의 Documentation을 확인한 결과 현재는 Hsl0님이 직접 mw.wikibase에 접근하는 모듈을 만든 것이 확인되지 않은 이상 게임 목록 문서 작성에 쓰지 않고, 대신 틀:공사중과 같은 각종 게임 개발 정보 및 틀:등급 등 게임 컨텐츠 특성 표시를 통합하는 데에 사용 가능하다.
그래서 이건 게임 대문 게임의 타이틀 문서(메인 문서)에 사용을 강제하도록 한다.
- 이렇게 된 이상 이 경우는 리버티게임토론:대문의 레이아웃 토론도 함께 하는 겁니다. --명진 (토론) 2023년 6월 4일 (일) 00:07 (KST)
UI[편집 | 원본 편집]
리버티게임:게임 목록/세부에 구현되는 형태로 게임 정보를 요청하였을 때 자세한 정보를 표시하도록 한다.