Skip to content

Commit

Permalink
Adjust to latest API changes
Browse files Browse the repository at this point in the history
- Use platform shard identifier rather than region
- New telemetry events and objects
- Remove status response class as it has no real info
- Refreshed example JSON
- Updated enums and data classes
  • Loading branch information
kevcodez committed Dec 29, 2018
1 parent 61a1435 commit 4ab476c
Show file tree
Hide file tree
Showing 32 changed files with 7,690 additions and 598 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ apply plugin: 'kotlin'
apply plugin: 'maven-publish'
apply plugin: 'signing'

version = "0.4.0"
version = "1.0.0"
archivesBaseName = 'pubg-api-wrapper'
group = 'de.kevcodez.pubg'

Expand Down
32 changes: 13 additions & 19 deletions src/main/kotlin/de.kevcodez.pubg.client/ApiClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,19 @@ import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.KotlinModule
import de.kevcodez.pubg.exception.ApiException
import de.kevcodez.pubg.model.Region
import de.kevcodez.pubg.model.Platform
import de.kevcodez.pubg.model.match.MatchResponse
import de.kevcodez.pubg.model.player.PlayerResponse
import de.kevcodez.pubg.model.player.PlayersResponse
import de.kevcodez.pubg.model.season.PlayerSeasonResponse
import de.kevcodez.pubg.model.season.SeasonResponse
import de.kevcodez.pubg.model.status.Status
import de.kevcodez.pubg.model.telemetry.events.TelemetryEvent
import de.kevcodez.pubg.model.tournament.TournamentResponse
import de.kevcodez.pubg.model.tournament.TournamentsResponse
import okhttp3.HttpUrl
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import org.slf4j.LoggerFactory

class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient) {

Expand All @@ -29,12 +27,12 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient
.registerModule(JavaTimeModule())
.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)

fun getPlayer(region: Region, id: String, season: String? = null): PlayerResponse {
fun getPlayer(platform: Platform, id: String, season: String? = null): PlayerResponse {
var urlBuilder = HttpUrl.Builder()
.scheme(API_SCHEME)
.host(API_HOST)
.addPathSegment("shards")
.addPathSegment(region.identifier)
.addPathSegment(platform.identifier)
.addPathSegment("players")
.addPathSegment(id)

Expand All @@ -49,12 +47,12 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient
return objectMapper.readValue(response.body()!!.string(), PlayerResponse::class.java)
}

fun getPlayers(region: Region, playerFilter: PlayerFilter): PlayersResponse {
fun getPlayers(platform: Platform, playerFilter: PlayerFilter): PlayersResponse {
var urlBuilder = HttpUrl.Builder()
.scheme(API_SCHEME)
.host(API_HOST)
.addPathSegment("shards")
.addPathSegment(region.identifier)
.addPathSegment(platform.identifier)
.addPathSegment("players")

if (playerFilter.playerIds.isNotEmpty()) {
Expand All @@ -76,12 +74,12 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient
return objectMapper.readValue(bodyAsString, PlayersResponse::class.java)
}

fun getMatch(region: Region, id: String): MatchResponse {
fun getMatch(platform: Platform, id: String): MatchResponse {
val urlBuilder = HttpUrl.Builder()
.scheme(API_SCHEME)
.host(API_HOST)
.addPathSegment("shards")
.addPathSegment(region.identifier)
.addPathSegment(platform.identifier)
.addPathSegment("matches")
.addPathSegment(id)

Expand All @@ -105,12 +103,12 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient
return objectMapper.readValue(response.body()!!.string(), object : TypeReference<List<TelemetryEvent>>() {})
}

fun getSeasons(region: Region): SeasonResponse {
fun getSeasons(platform: Platform): SeasonResponse {
val urlBuilder = HttpUrl.Builder()
.scheme(API_SCHEME)
.host(API_HOST)
.addPathSegment("shards")
.addPathSegment(region.identifier)
.addPathSegment(platform.identifier)
.addPathSegment("seasons")

val request = buildRequest(urlBuilder.build())
Expand All @@ -122,12 +120,12 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient
return objectMapper.readValue(bodyAsString, SeasonResponse::class.java)
}

fun getSeason(region: Region, accountId: String, seasonId: String): PlayerSeasonResponse {
fun getSeason(platform: Platform, accountId: String, seasonId: String): PlayerSeasonResponse {
val urlBuilder = HttpUrl.Builder()
.scheme(API_SCHEME)
.host(API_HOST)
.addPathSegment("shards")
.addPathSegment(region.identifier)
.addPathSegment(platform.identifier)
.addPathSegment("players")
.addPathSegment(accountId)
.addPathSegment("seasons")
Expand Down Expand Up @@ -174,18 +172,16 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient
}


fun getStatus(): Status {
fun isStatusOk(): Boolean {
val urlBuilder = HttpUrl.Builder()
.scheme(API_SCHEME)
.host(API_HOST)
.addPathSegment("status")

val request = buildRequest(urlBuilder.build())

val response = httpClient.newCall(request).execute()
validateResponse(response)

return objectMapper.readValue(response.body()!!.string(), Status::class.java)
return response.isSuccessful
}

private fun buildRequest(url: HttpUrl): Request {
Expand All @@ -204,8 +200,6 @@ class ApiClient(private val apiKey: String, private val httpClient: OkHttpClient

companion object {

private val LOG = LoggerFactory.getLogger(ApiClient::class.java)

private const val API_SCHEME = "https"
private const val API_HOST = "api.playbattlegrounds.com"
}
Expand Down
8 changes: 8 additions & 0 deletions src/main/kotlin/de.kevcodez.pubg.model/Platform.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package de.kevcodez.pubg.model

enum class Platform(val identifier: String) {
STEAM("steam"),
PSN("psn"),
XBOX("xbox"),
KAKAO("kakao")
}
20 changes: 0 additions & 20 deletions src/main/kotlin/de.kevcodez.pubg.model/Region.kt

This file was deleted.

21 changes: 0 additions & 21 deletions src/main/kotlin/de.kevcodez.pubg.model/status/Status.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@ package de.kevcodez.pubg.model.telemetry.enums

enum class SubCategory {
Backpack,
Belt,
Boost,
Bottoms,
Footwear,
Fuel,
Gloves,
Handgun,
Headgear,
Heal,
Jacket,
Main,
Mask,
Melee,
None,
Throwable,
Expand Down
10 changes: 10 additions & 0 deletions src/main/kotlin/de.kevcodez.pubg.model/telemetry/events/Heal.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character
import de.kevcodez.pubg.model.telemetry.objects.Item

class Heal : TelemetryEvent() {
lateinit var character: Character
lateinit var item: Item
var healAmount: Float = 0.0F
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character
import de.kevcodez.pubg.model.telemetry.objects.Item

class ItemPickupFromCarePackage : TelemetryEvent() {
lateinit var character: Character
lateinit var item: Item
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character
import de.kevcodez.pubg.model.telemetry.objects.Item

class ItemPickupFromLootBox : TelemetryEvent() {
lateinit var character: Character
lateinit var item: Item
var ownerTeamId: Int = 0
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character
import de.kevcodez.pubg.model.telemetry.objects.Location

class ObjectDestroy : TelemetryEvent() {
lateinit var character: Character
lateinit var objectType: String
lateinit var objectLocation: Location
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character

class ParachuteLanding : TelemetryEvent() {
lateinit var character: Character
var distance: Float = 0.0F
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character
import de.kevcodez.pubg.model.telemetry.objects.GameResult

class PlayerKill : TelemetryEvent() {
var attackId: Int = 0
lateinit var killer: Character
lateinit var victim: Character
var dBNOId: Int = 0
lateinit var damageTypeCategory: String
lateinit var damageCauserName: String
var damageCauserAdditionalInfo: List<String>? = null
lateinit var damageReason: String
var distance: Float = 0.0F
lateinit var victimGameResult: GameResult
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character

class RedZoneEnded : TelemetryEvent() {
lateinit var drivers: List<Character>
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,20 @@ import java.time.Instant
JsonSubTypes.Type(value = PlayerPosition::class, name = "LogPlayerPosition"),
JsonSubTypes.Type(value = PlayerAttack::class, name = "LogPlayerAttack"),
JsonSubTypes.Type(value = ItemPickup::class, name = "LogItemPickup"),
JsonSubTypes.Type(value = ItemPickupFromCarePackage::class, name = "LogItemPickupFromCarePackage"),
JsonSubTypes.Type(value = ItemPickupFromLootBox::class, name = "LogItemPickupFromLootBox"),
JsonSubTypes.Type(value = ItemUnequip::class, name = "LogItemUnequip"),
JsonSubTypes.Type(value = ItemEquip::class, name = "LogItemEquip"),
JsonSubTypes.Type(value = VehicleRide::class, name = "LogVehicleRide"),
JsonSubTypes.Type(value = MatchDefinition::class, name = "LogMatchDefinition"),
JsonSubTypes.Type(value = MatchStart::class, name = "LogMatchStart"),
JsonSubTypes.Type(value = ObjectDestroy::class, name = "LogObjectDestroy"),
JsonSubTypes.Type(value = ParachuteLanding::class, name = "LogParachuteLanding"),
JsonSubTypes.Type(value = GameStatePeriodic::class, name = "LogGameStatePeriodic"),
JsonSubTypes.Type(value = Heal::class, name = "LogHeal"),
JsonSubTypes.Type(value = VehicleLeave::class, name = "LogVehicleLeave"),
JsonSubTypes.Type(value = PlayerTakeDamage::class, name = "LogPlayerTakeDamage"),
JsonSubTypes.Type(value = RedZoneEnded::class, name = "LogRedZoneEnded"),
JsonSubTypes.Type(value = PlayerLogout::class, name = "LogPlayerLogout"),
JsonSubTypes.Type(value = ItemAttach::class, name = "LogItemAttach"),
JsonSubTypes.Type(value = ItemDrop::class, name = "LogItemDrop"),
Expand All @@ -34,10 +40,12 @@ import java.time.Instant
JsonSubTypes.Type(value = MatchEnd::class, name = "LogMatchEnd"),
JsonSubTypes.Type(value = SwimEnd::class, name = "LogSwimEnd"),
JsonSubTypes.Type(value = SwimStart::class, name = "LogSwimStart"),
JsonSubTypes.Type(value = VaultStart::class, name = "LogVaultStart"),
JsonSubTypes.Type(value = PlayerMakeGroggy::class, name = "LogPlayerMakeGroggy"),
JsonSubTypes.Type(value = ArmorDestroy::class, name = "LogArmorDestroy"),
JsonSubTypes.Type(value = PlayerRevive::class, name = "LogPlayerRevive"),
JsonSubTypes.Type(value = WheelDestroy::class, name = "LogWheelDestroy")
JsonSubTypes.Type(value = WheelDestroy::class, name = "LogWheelDestroy"),
JsonSubTypes.Type(value = WeaponFireCount::class, name = "LogWeaponFireCount")
)
@JsonIgnoreProperties(ignoreUnknown = true)
open class TelemetryEvent {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character

class VaultStart : TelemetryEvent() {
lateinit var character: Character
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package de.kevcodez.pubg.model.telemetry.events

import de.kevcodez.pubg.model.telemetry.objects.Character

class WeaponFireCount : TelemetryEvent() {
lateinit var character: Character
lateinit var weaponId: String
var fireCount: Int = 0
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package de.kevcodez.pubg.model.telemetry.events
package de.kevcodez.pubg.model.telemetry.objects

data class BlueZoneCustomOption(
val phaseNum: Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,7 @@ data class Character(
val health: Float,
val location: Location,
val ranking: Int,
val accountId: String
val accountId: String,
val isInBlueZone: Boolean,
val isInRedZone: Boolean
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package de.kevcodez.pubg.model.telemetry.objects

import com.fasterxml.jackson.annotation.JsonIgnoreProperties

@JsonIgnoreProperties(ignoreUnknown = true)
data class GameResult(
val rank: Int,
val gameResult: String,
val teamId: Int,
val stats: Stats,
val accountId: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ data class Item(
val itemId: String,
val stackCount: Int,
var itemCategory: Category? = null,
var itemSubCategory: SubCategory?,
var itemSubCategory: SubCategory? = null,
val attachedItems: List<String>
) {
@JsonProperty("category")
Expand Down
10 changes: 10 additions & 0 deletions src/main/kotlin/de.kevcodez.pubg.model/telemetry/objects/Stats.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.kevcodez.pubg.model.telemetry.objects

data class Stats(
val killCount: Int,
val distanceOnFoot: Float,
val distanceOnSwim: Float,
val distanceOnVehicle: Float,
val distanceOnParachute: Float,
val distanceOnFreefall: Float
)
Loading

0 comments on commit 4ab476c

Please sign in to comment.