Class: Gs2::Ranking::Client
- Inherits:
-
Core::AbstractClient
- Object
- Core::AbstractClient
- Gs2::Ranking::Client
- Defined in:
- lib/gs2/ranking/Client.rb
Overview
GS2-Ranking クライアント
Constant Summary collapse
- @@ENDPOINT =
'ranking'
Class Method Summary collapse
-
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。.
Instance Method Summary collapse
-
#create_game_mode(request) ⇒ Array
ゲームモードを作成
ゲームモードを作成すると、ゲームモードの設定としてランキングが昇順なのか、降順なのかを設定できます。
レースゲームのようなタイムの値が小さいほど上位のランキングの場合は昇順を、
アクションゲームなどで、スコアの値が大きいほど上位のランキングの場合は降順を選択します。
他に、集計間隔を15分以上、24時間以下で分単位で設定できます。
ランキングを更新したい間隔に合わせて設定することになります。
集計処理毎に費用が発生するため、高頻度であればあるほど利用料金は高くなります。
. -
#create_ranking_table(request) ⇒ Array
ランキングテーブルを作成
GS2-Ranking を利用するには、まずランキングテーブルを作成する必要があります。
1つのランキングテーブルには複数のゲームモードのランキングを格納することができます。
. -
#delete_game_mode(request) ⇒ Object
ゲームモードを削除.
-
#delete_ranking_table(request) ⇒ Object
ランキングテーブルを削除.
-
#describe_game_mode(request, pageToken = nil, limit = nil) ⇒ Array
ゲームモードリストを取得.
-
#describe_ranking_table(pageToken = nil, limit = nil) ⇒ Array
ランキングテーブルリストを取得.
-
#get_estimate_rank(request) ⇒ Array
スコアを指定しておおよその順位を取得
指定したスコアを取ったと仮定して何位ぐらいになれるのか、といった指標を計算する際に利用します。
原則1000位単位でおおよその順位を応答します。
上位プレイヤーに対しては1000位単位の解像度では情報が不足している場合があると思いますので、
応答が上位プレイヤーだった場合は、更に #get_ranking で上位のスコアを取得して
さらに詳細な順位に絞り込んで情報提供する。というのもユーザ体験をよく出来ると思います。
. -
#get_game_mode(request) ⇒ Array
ゲームモードを取得.
-
#get_my_rank(request) ⇒ Array
自分の順位を取得
自分の順位を取得できます、応答される値は集計時点での正確な値となります。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#get_ranking(request, offset = nil, limit = nil) ⇒ Array
ランキングを取得
ランキングを取得します。
ランキングにはユーザID、スコア、メタデータといった基本情報のほかに、インデックスと順位が付加されています。
インデックスは先頭を1とした位置情報で、順位は同一スコアのユーザを同一順位として計算された値です。
ランキングの性質上、同一スコアでも別順位として扱いたい場合は順位の代わりにインデックスを利用することで実現できます。
ランキングデータはランダムアクセスができますので、#get_my_rank で自分の順位を取得して、
その前後のランキンデータを取得する。というような処理も実現できます。
. -
#get_ranking_table(request) ⇒ Array
ランキングテーブルを取得.
-
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
constructor
コンストラクタ.
-
#put_score(request) ⇒ Array
スコアを登録
スコアの登録は一時的にバッファリングされ、定期的にランキングデータとして書き込まれます。
そのため、スコア登録直後にランキング集計が開始された場合は、集計結果に含まれない可能性があります。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#update_game_mode(request) ⇒ Array
ゲームモードを更新.
-
#update_ranking_table(request) ⇒ Array
ランキングテーブルを更新.
Constructor Details
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
コンストラクタ
17 18 19 |
# File 'lib/gs2/ranking/Client.rb', line 17 def initialize(region, gs2_client_id, gs2_client_secret) super(region, gs2_client_id, gs2_client_secret) end |
Class Method Details
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。
22 23 24 25 26 27 28 |
# File 'lib/gs2/ranking/Client.rb', line 22 def self.ENDPOINT(v = nil) if v @@ENDPOINT = v else return @@ENDPOINT end end |
Instance Method Details
#create_game_mode(request) ⇒ Array
ゲームモードを作成
ゲームモードを作成すると、ゲームモードの設定としてランキングが昇順なのか、降順なのかを設定できます。
レースゲームのようなタイムの値が小さいほど上位のランキングの場合は昇順を、
アクションゲームなどで、スコアの値が大きいほど上位のランキングの場合は降順を選択します。
他に、集計間隔を15分以上、24時間以下で分単位で設定できます。
ランキングを更新したい間隔に合わせて設定することになります。
集計処理毎に費用が発生するため、高頻度であればあるほど利用料金は高くなります。
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/gs2/ranking/Client.rb', line 218 def create_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end body = {} if request.has_key?('gameMode'); body['gameMode'] = request['gameMode']; end if request.has_key?('asc'); body['asc'] = request['asc']; end if request.has_key?('calcInterval'); body['calcInterval'] = request['calcInterval']; end query = {} return post( 'Gs2Ranking', 'CreateGameMode', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode', body, query); end |
#create_ranking_table(request) ⇒ Array
ランキングテーブルを作成
GS2-Ranking を利用するには、まずランキングテーブルを作成する必要があります。
1つのランキングテーブルには複数のゲームモードのランキングを格納することができます。
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/gs2/ranking/Client.rb', line 72 def create_ranking_table(request) if not request; raise ArgumentError.new(); end body = {} if request.has_key?('name'); body['name'] = request['name']; end if request.has_key?('description'); body['description'] = request['description']; end query = {} return post( 'Gs2Ranking', 'CreateRankingTable', @@ENDPOINT, '/ranking', body, query); end |
#delete_game_mode(request) ⇒ Object
ゲームモードを削除
307 308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'lib/gs2/ranking/Client.rb', line 307 def delete_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} return delete( 'Gs2Ranking', 'DeleteGameMode', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'], query); end |
#delete_ranking_table(request) ⇒ Object
ランキングテーブルを削除
145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/gs2/ranking/Client.rb', line 145 def delete_ranking_table(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end query = {} return delete( 'Gs2Ranking', 'DeleteRankingTable', @@ENDPOINT, '/ranking/' + request['rankingTableName'], query); end |
#describe_game_mode(request, pageToken = nil, limit = nil) ⇒ Array
ゲームモードリストを取得
177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/gs2/ranking/Client.rb', line 177 def describe_game_mode(request, pageToken = nil, limit = nil) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end query = {} if pageToken; query['pageToken'] = pageToken; end if limit; query['limit'] = limit; end return get( 'Gs2Ranking', 'DescribeGameMode', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode', query); end |
#describe_ranking_table(pageToken = nil, limit = nil) ⇒ Array
ランキングテーブルリストを取得
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/gs2/ranking/Client.rb', line 44 def describe_ranking_table(pageToken = nil, limit = nil) query = {} if pageToken; query['pageToken'] = pageToken; end if limit; query['limit'] = limit; end return get( 'Gs2Ranking', 'DescribeRankingTable', @@ENDPOINT, '/ranking', query); end |
#get_estimate_rank(request) ⇒ Array
スコアを指定しておおよその順位を取得
指定したスコアを取ったと仮定して何位ぐらいになれるのか、といった指標を計算する際に利用します。
原則1000位単位でおおよその順位を応答します。
上位プレイヤーに対しては1000位単位の解像度では情報が不足している場合があると思いますので、
応答が上位プレイヤーだった場合は、更に #get_ranking で上位のスコアを取得して
さらに詳細な順位に絞り込んで情報提供する。というのもユーザ体験をよく出来ると思います。
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 |
# File 'lib/gs2/ranking/Client.rb', line 460 def get_estimate_rank(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} if request.has_key?('score'); query['score'] = request['score']; end return get( 'Gs2Ranking', 'GetEstimateRank', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking/estimate', query); end |
#get_game_mode(request) ⇒ Array
ゲームモードを取得
252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/gs2/ranking/Client.rb', line 252 def get_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} return get( 'Gs2Ranking', 'GetGameMode', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'], query); end |
#get_my_rank(request) ⇒ Array
自分の順位を取得
自分の順位を取得できます、応答される値は集計時点での正確な値となります。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 |
# File 'lib/gs2/ranking/Client.rb', line 423 def get_my_rank(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } query = {} return get( 'Gs2Ranking', 'GetMyRank', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking/rank', query, header); end |
#get_ranking(request, offset = nil, limit = nil) ⇒ Array
ランキングを取得
ランキングを取得します。
ランキングにはユーザID、スコア、メタデータといった基本情報のほかに、インデックスと順位が付加されています。
インデックスは先頭を1とした位置情報で、順位は同一スコアのユーザを同一順位として計算された値です。
ランキングの性質上、同一スコアでも別順位として扱いたい場合は順位の代わりにインデックスを利用することで実現できます。
ランキングデータはランダムアクセスができますので、#get_my_rank で自分の順位を取得して、
その前後のランキンデータを取得する。というような処理も実現できます。
347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'lib/gs2/ranking/Client.rb', line 347 def get_ranking(request, offset = nil, limit = nil) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} if offset; query['offset'] = offset; end if limit; query['limit'] = limit; end return get( 'Gs2Ranking', 'GetRanking', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking', query); end |
#get_ranking_table(request) ⇒ Array
ランキングテーブルを取得
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/gs2/ranking/Client.rb', line 99 def get_ranking_table(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end query = {} return get( 'Gs2Ranking', 'GetRankingTable', @@ENDPOINT, '/ranking/' + request['rankingTableName'], query); end |
#put_score(request) ⇒ Array
スコアを登録
スコアの登録は一時的にバッファリングされ、定期的にランキングデータとして書き込まれます。
そのため、スコア登録直後にランキング集計が開始された場合は、集計結果に含まれない可能性があります。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 |
# File 'lib/gs2/ranking/Client.rb', line 385 def put_score(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end body = {} if request.has_key?('score'); body['score'] = request['score']; end if request.has_key?('meta'); body['meta'] = request['meta']; end header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } query = {} return post( 'Gs2Ranking', 'PutScore', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking', body, query, header); end |
#update_game_mode(request) ⇒ Array
ゲームモードを更新
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
# File 'lib/gs2/ranking/Client.rb', line 284 def update_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end body = {} if request.has_key?('calcInterval'); body['calcInterval'] = request['calcInterval']; end query = {} return put( 'Gs2Ranking', 'UpdateGameMode', @@ENDPOINT, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'], body, query); end |
#update_ranking_table(request) ⇒ Array
ランキングテーブルを更新
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/gs2/ranking/Client.rb', line 125 def update_ranking_table(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end body = {} if request.has_key?('description'); body['description'] = request['description']; end query = {} return put( 'Gs2Ranking', 'UpdateRankingTable', @@ENDPOINT, '/ranking/' + request['rankingTableName'], body, query); end |