Skip to content
Damian Staszewski edited this page Aug 14, 2018 · 16 revisions

CSharp

Requeriments:

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);
		}
	}
}

Java

Requeriments:

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());
	}
}

Python

Requeriments:

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"))