Repository navigation
Codes examples
Damian Staszewski edited this page Aug 14, 2018
·
16 revisions
- System.Web.Extensions.dll - JSON Serializing
namespace RealmRoyaleAPIWrapper {
class Program {
public class Session {
public string ret_msg { get; set; }
public string session_id { get; set; }
public string timestamp { get; set; }
public override string ToString () {
return string.Format ("[Session Ret_msg={0}, Session_id={1}, Timestamp={2}]", this.ret_msg, this.session_id, this.timestamp);
}
}
public class RealmAPI {
private int devID;
private string authKey;
private static string BASE_ENDPOINT = "http://api.realmroyale.com/realmapi.svc";
private Session currentSession;
public RealmAPI (string devID, string authKey) : this (int.Parse (devID), authKey) { }
public RealmAPI (int devID, string authKey) {
this.authKey = authKey;
this.devID = devID;
}
public void CreateSession () {
string url = string.Format ("{0}/createsessionjson/{1}/{2}/{3}", baseEndpoint, this.devID, this.GenerateSignature ("createsession"), this.GetTimeStamp ());
this.currentSession = this.Deserialize <Session> (this.RequestURL (url));
System.Console.WriteLine (this.currentSession);
}
private string RequestURL (string url) {
if (!string.IsNullOrEmpty (url)) {
var request = System.Net.WebRequest.Create (url);
string str = string.Empty;
using (var response = request.GetResponse ()) {
using (var dataStream = response.GetResponseStream ()) {
using (var reader = new System.IO.StreamReader (dataStream)) {
str = reader.ReadToEnd ();
}
}
}
return str;
} return url;
}
protected T Deserialize <T> (string input) {
T ret = default (T);
var jss = new System.Web.Script.Serialization.JavaScriptSerializer ();
ret = jss.Deserialize <T> (input);
return ret;
}
private static string GetMD5Hash (string input) {
using (var md5 = System.Security.Cryptography.MD5.Create ()) {
var bytes = md5.ComputeHash (System.Text.Encoding.UTF8.GetBytes (input));
var stringBuilder = new System.Text.StringBuilder ();
foreach (byte b in bytes)
stringBuilder.Append (b.ToString ("x2").ToLower ());
return stringBuilder.ToString ();
}
}
public string GenerateSignature (string method, string timestamp = "") {
if (string.IsNullOrEmpty (method)) return string.Empty;
return GetMD5Hash (this.devID + method + this.authKey + (string.IsNullOrEmpty (timestamp) ? this.GetTimeStamp () : timestamp));
}
public string GetTimeStamp (string format = "yyyyMMddHHmmss") {
return System.DateTime.UtcNow.ToString (format);
}
}
public static void Main (string [] args) {
RealmAPI realmAPI = new RealmAPI (1004, "23DF3C7E9BD14D84BF892AD206B6755C");
realmAPI.CreateSession ();
System.Console.Write ("Press any key to continue . . . ");
System.Console.ReadKey (true);
}
}
}- OkHttp3 - Http Client
- Jackson Databind - JSON Serializing
- Project Lombok - for annotation processing
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.SimpleTimeZone;
import java.util.stream.Collectors;
class Program {
@Data
public static class Session {
private String retMsg;
private String sessionId;
private String timestamp;
}
public static class RealmAPI {
private static final String BASE_ENDPOINT = "http://api.realmroyale.com/realmapi.svc";
private final Integer devId;
private final String authKey;
@Getter
@Setter
private Session currentSession;
private final ObjectMapper mapper = new ObjectMapper();
private final OkHttpClient httpClient = new OkHttpClient();
public RealmAPI(String devId, String authKey) {
this(Integer.parseInt(devId), authKey);
}
public RealmAPI(Integer devId, String authKey) {
this.devId = devId;
this.authKey = authKey;
this.mapper.disable(JsonGenerator.Feature.IGNORE_UNKNOWN);
this.mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
}
public RealmAPI buildSession() {
try {
setCurrentSession(exchange("createsession", Session.class));
} catch (IOException e) {
e.printStackTrace();
}
return this;
}
private <T> T exchange(String method, Class<T> responseType, String... params) throws IOException {
String signature = generateSignature(method) + ((currentSession != null && !method.equalsIgnoreCase("createsession")) ? currentSession.getSessionId() : "");
String uri = String.format("%s/%s/%s/%s",
BASE_ENDPOINT, method + "json", signature, getTimestamp());
if (params.length > 0) {
uri += '/' + Arrays.stream(params).collect(Collectors.joining("/"));
}
Response response = httpClient.newCall(new Request.Builder().get().url(uri).build()).execute()
return mapper.readValue(response.body().bytes(), responseType);
}
private String generateSignature(String method) {
String templateSignature = devId + method + authKey + getTimestamp();
StringBuilder signatureBuilder = new StringBuilder();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(templateSignature.getBytes());
byte[] bytes = md.digest();
for (byte b : bytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
signatureBuilder.append("0");
}
signatureBuilder.append(hex);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return signatureBuilder.toString();
}
private String getTimestamp() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
return sdf.format(new Date());
}
}
public static void main(String[] args) {
RealmAPI realmAPI = new RealmAPI(1004, "23DF3C7E9BD14D84BF892AD206B6755C")
.buildSession();
System.out.println(realmAPI.getCurrentSession());
}
}- Requests - Http Client
import requests
from hashlib import md5 as GetMD5Hash
from sys import version_info as pythonVersion
from datetime import datetime
class RealmAPI:
DEFAULT_HEADERS = { "user-agent": "RealmRoyaleAPIWrapper [Python/{0.major}.{0.minor}]".format (pythonVersion) }
BASE_ENDPOINT = "http://api.realmroyale.com/realmapi.svc"
def __init__ (self, devId: int, authKey: str):
self.devId = devId;
self.authKey = authKey;
def __encode__ (self, _input, encodeType: str = "utf-8"):
return str (_input).encode (encodeType)
def __httpRequest__ (self, url):
r = requests.get (url = url, headers = self.DEFAULT_HEADERS)
if r.status_code == 200:
return r.json ()
def generateSignature (self, method: str, timestamp = None):
time = timestamp if timestamp else self.getTimeStamp ()
return GetMD5Hash (self.__encode__ (str (self.devId) + str (method).lower () + str (self.authKey) + str (time))).hexdigest ()
def getTimeStamp (self, format = "%Y%m%d%H%M%S"):
return datetime.utcnow ().strftime (format)
def createSession (self):
uri = "{0}/createsessionjson/{1}/{2}/{3}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("createsession"), self.getTimeStamp ())
createSessionJSON = self.__httpRequest__ (uri)
if (createSessionJSON.get ("ret_msg").lower () == "approved"):
self.sessionId = createSessionJSON.get ("session_id")
def ping (self):
uri = "{0}/pingjson".format (self.BASE_ENDPOINT)
pingJSON = self.__httpRequest__ (uri)
return pingJSON
def testSession (self, sessionId = None):
session = sessionId if sessionId else self.sessionId
uri = "{0}/testsessionjson/{1}/{2}/{3}/{4}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("testsession"), session, self.getTimeStamp ())
testSessionJSON = self.__httpRequest__ (uri)
return testSessionJSON
def getDataUsed (self):
uri = "{0}/getdatausedjson/{1}/{2}/{3}/{4}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getdataused"), self.sessionId, self.getTimeStamp ())
getDataUsedJSON = self.__httpRequest__ (uri)
return getDataUsedJSON
def getHiRezServerStatus (self):
uri = "{0}/gethirezserverstatusjson/{1}/{2}/{3}/{4}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("gethirezserverstatus"), self.sessionId, self.getTimeStamp ())
getHiRezServerStatusJSON = self.__httpRequest__ (uri)
return getHiRezServerStatusJSON
def getPatchInfo (self):
uri = "{0}/getpatchinfojson/{1}/{2}/{3}/{4}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getpatchinfo"), self.sessionId, self.getTimeStamp ())
getPatchInfoJSON = self.__httpRequest__ (uri)
return getPatchInfoJSON
def getLeaderboard (self, queue, criteria):
uri = "{0}/getleaderboardjson/{1}/{2}/{3}/{4}/{5}/{6}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getleaderboard"), self.sessionId, self.getTimeStamp (), queue, criteria)
getPlayerJSON = self.__httpRequest__ (uri)
return getPlayerJSON
def getMatchDetails (self, matchID):
uri = "{0}/getmatchdetailsjson/{1}/{2}/{3}/{4}/{5}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getmatchdetails"), self.sessionId, self.getTimeStamp (), matchID)
getMatchDetailsJSON = self.__httpRequest__ (uri)
return getMatchDetailsJSON
def getPlayer (self, player, platform: str = "hirez"):
uri = "{0}/getPlayerjson/{1}/{2}/{3}/{4}/{5}/{6}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getplayer"), self.sessionId, self.getTimeStamp (), player, platform)
getPlayerJSON = self.__httpRequest__ (uri)
return getPlayerJSON
def getPlayerMatchHistory (self, player):
uri = "{0}/getplayermatchhistoryjson/{1}/{2}/{3}/{4}/{5}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getplayermatchhistory"), self.sessionId, self.getTimeStamp (), player)
getPlayerMatchHistoryJSON = self.__httpRequest__ (uri)
return getPlayerMatchHistoryJSON
def getPlayerStats (self, player):
uri = "{0}/getplayerstatsjson/{1}/{2}/{3}/{4}/{5}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getplayerstats"), self.sessionId, self.getTimeStamp (), player)
getPlayerStatsJSON = self.__httpRequest__ (uri)
return getPlayerStatsJSON
def getPlayerStatus (self, player):
uri = "{0}/getplayerstatusjson/{1}/{2}/{3}/{4}/{5}".format (self.BASE_ENDPOINT, self.devId, self.generateSignature ("getplayerstatus"), self.sessionId, self.getTimeStamp (), player)
getPlayerStatusJSON = self.__httpRequest__ (uri)
return getPlayerStatusJSON
realmAPI = RealmAPI (devId=1004, authKey="23DF3C7E9BD14D84BF892AD206B6755C")
realmAPI.createSession ()
print (realmAPI.getDataUsed ())
print (realmAPI.getHiRezServerStatus ())
print (realmAPI.getPatchInfo ())
print (realmAPI.ping ())
print (realmAPI.testSession ())
print (realmAPI.getMatchDetails ("1196651"))
print (realmAPI.getPlayer ("RealmHero"))
print (realmAPI.getPlayerMatchHistory (123))
print (realmAPI.getPlayerStats (123))
print (realmAPI.getPlayerStatus ("RealmHero"))