This page is the Ryzom Forge version of api.ryzom.com site
According to Wikipedia, an API or "Application Programming interface" is a computing interface which defines interactions between multiple software intermediaries. It defines the kinds of calls or requests that can be made, how to make them, the data formats that should be used, the conventions to follow, etc. [...]Through information hiding, APIs enable modular programming, which allows users to use the interface independently of the implementation.
In our case: Ryzom API is an URL based system to get some Ryzom in-game information like game time, character, guild profile... API changes log can be found on forum.
All requests are using https://api.ryzom.com
as base url.
PHP API library can be found in the ryzom API client repository.
(PHP) Sheet translations and info about resources can be found in the https://github.com/nimetu/ryzom_extra repository. The json-resources branch has data in JSON format.
To know the time and date in Ryzom.
<base URL>/time.php
raw
: Returns the tick. The server tick is a 32 bit integer that increases by one every 100 milliseconds.txt
: Returns a homine-readable string.xml
: Returns an xml file that contains all shard time information.The data is cached for 1 minute.
<shard_time>
<server_tick>514105152</server_tick>
<jena_year>2576</jena_year>
<day_of_jy>319</day_of_jy>
<month_of_jy>10</month_of_jy>
<cycle>0</cycle>
<day_of_cycle>319</day_of_cycle>
<month_of_cycle>10</month_of_cycle>
<day_of_month>19</day_of_month>
<day_of_week>1</day_of_week>
<season>3</season>
<day_of_season>49</day_of_season>
<time_of_day>13</time_of_day>
<txt_en>13h - Dua, Mystia 20, 1st AC 2576</txt_en>
<txt_fr>13h - Dua, Mystia 20, 1er CA 2576</txt_fr>
<txt_de>13h - Dua, Mystia 20, 1. AZ 2576</txt_de>
<cache created="1387437183" expire="1387437243"/>
</shard_time>
ryzom_time_api()
: Returns SimpleXMLElement or boolean false on failure.<?php
require_once "ryzomapi_lite.php";
$time = ryzom_time_api('xml');
if ($time !== false) {
$txt_en = htmlspecialchars($time->txt_en);
echo "Atys time is {$txt_en}";
} else {
echo "API failure";
}
?>
Access character information.
<base URL>/character.php?apikey=key <base URL>/character.php?apikey[=key1&apikey[]=key2
<character> xml element has attributes *created* and *cached_until* (utc timestamp)
API is able to return information about multiple characters at once and so each <character> element is child of <ryzomapi> root element:
<ryzomapi>
<character apikey="key1" created="1387369332" modules="C01:P01" cached_until="1387369632">
....
</character>
<character apikey="key2" created="1387369332" modules="P01" cached_until="1387369632">
....
</character>
</ryzomapi>
Invalid key error:
<character apikey="key1" created="1387369873">
<error code="404">invalid key</error>
</character>
Possible error codes are listed on API error codes.
ryzom_character_api($apikey)
<?php
require_once "ryzomapi_lite.php";
function info($char) {
if (isset($char->error)) {
$apikey = htmlspecialchars($char['apikey']);
$error = htmlspecialchars($char->error);
$code = (int)$char->error['code'];
echo "Character API key '{$apikey}' failed: {$code}:{$error}";
} else {
$name = htmlspecialchars($char->name);
echo "Character name: {$name}";
}
}
$apikey = 'cABCDEF';
$chars = ryzom_character_api($apikey);
if ($chars !== false) {
info($chars[$apikey]);
} else {
echo "Character API failed";
}
$apikeys = ['cABCDEF', 'c123456'];
$chars = ryzom_character_api($apikeys);
if ($chars !== false) {
foreach($chars as $char) {
info($char);
}
} else {
echo "Character API failed";
}
Displays the list of all guilds.
<base URL>/guilds.php
Returned XML has <cache> element with attributes created and expire (utc timestamp)
<guilds>
<cache created="1387371064" expire="1387374664"/>
<shard>atys</shard>
<guild>
<gid>105906182</gid>
<name>Atrium</name>
<race>Fyros</race>
<icon>575080624687965565</icon>
<creation_date>131736955</creation_date>
<description>Here you are the Keeper, your destiny is to make the rules to be respected</description>
</guild>
<guild>
....
</guild>
</guilds>
ryzom_guildlist_api()
Function returns SimpleXMLElement object on success or boolean false on error.
<?php
require_once "ryzomapi_lite.php";
$guilds = ryzom_guildlist_api();
if ($guilds !== false) {
echo '<pre>';
foreach($guilds->guild as $guild) {
$gid = (int)$guild->gid;
$name = htmlspecialchars($guild->name);
echo "{$gid} {$name}\n";
}
echo '</pre>';
} else {
echo "API failure";
Access to guild information.
<base URL>/guild.php?apikey=key <base URL>/guild.php?apikey[]=key1&apikey[]=key2
Guild xml element has attributes created and cached_until (utc timestamp)
API is able to return information for multiple guilds at once and so each <guild> element is a child of <ryzomapi> root elements
<ryzomapi>
<guild apikey="key1" created"1387369332" modules="G01:G02:G03:G04:P01" cached_until="1387369632">
...
</guild>
<guild apikey="key2" created"1387369332" modules="P01" cached_until="1387369632">
...
</guild>
</ryzomapi>
Invalid key error:
<guild apikey="key1" created="1387369873">
<error code="404">invalid key</error>
</guild>
Possible error codes are listed on API error codes.
ryzom_guild_api($apikey)
$apikey can be either a string or array of strings
Function will return associative array of SimpleXMLElement with $apikey as array index On failure function returns boolean false
<?php
require_once "ryzomapi_lite.php";
function info($guild) {
if (isset($guild->error)) {
$apikey = htmlspecialchars($guild['apikey']);
$error = htmlspecialchars($guild->error);
$code = (int)$guild->error['code'];
echo "Guild API key '{$apikey}' failed: {$code}:{$error}";
} else {
$name = htmlspecialchars($guild->name);
echo "Guild name: {$name}";
}
}
$apikey = 'gABCDEF';
$guilds = ryzom_guild_api($apikey);
if ($guilds !== false) {
info($guilds[$apikey]);
} else {
echo "Guild API failed";
}
$apikeys = ['gABCDEF', 'g123456'];
$guilds = ryzom_guild_api($apikeys);
if ($guilds !== false) {
foreach($guilds as $guild) {
info($guild);
}
} else {
echo "Guild API failed";
}
This is a set of PHP function to render a web page using Ryzom style.
You need to manually include ryzom css file :
<link href="https://api.ryzom.com/data/css/ryzom_ui.css" rel="stylesheet" media="all">
ryzom_render_window($title, $content, array $links)
Returns html markup resembling ingame window style
$title
$content
$links
- (optional) associative array that defines right side buttons on window title bar<?php
require_once "ryzomapi_lite.php";
$links = array(
array('href' => 'http://www.ryzom.com/', 'text' => 'Ryzom website'),
array('href' => 'http://app.ryzom.com/app_ryzomapi/', 'text' => 'RyzomAPI app'),
);
echo ryzom_render_window('Title', 'Hello World!', $links);
Retrieves a guild icon
<base URL>/guild_icon.php?icon=:icon&size=:size
s
(default) Small guild icon (32x32 pixels) b
Big guild icon (64x64 pixels) It's cached for ever. Since the icon is unique and never changes. For a specific icon, it'll always return the same image.
ryzom_guild_icon_url($icon, $size)
Returns a string that contains the url to display a guild icon.
<?php
require_once "ryzomapi_lite.php";
$url = ryzom_guild_icon_url("4505559206514131", 'b');
echo "<img src=\"$url\" alt=\"\">";
Retrieves Item icons (see also: Ryzom API/Item sheetids)
<base URL>/item_icon.php?sheetid=iczahp_3.sitem&c=1&q=0&s=0&sap=-1&destroyed=0&label=1&locked=0
Parameter | Description | Default | Example icon | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
sheetid | It's the id of an item that you can find in the Character xml file. For example, iczahp_3.sitem is a valid sheetid. sheetids can me found in Nimetu's ryzom_extra repository |
| |||||||||||||||||||
c | (optional), default is 1 The color of the item. It's a value between 0 and 7 |
|
| ||||||||||||||||||
q | (optional), default is 0 The quality of the item. |
|
| ||||||||||||||||||
s | (optional), default is 0 The size of the stack. |
|
| ||||||||||||||||||
sap | (optional) number of sap plus 1 of the item. -1 = (default) No sap icon, no number 0 = sap icon, no number |
|
| ||||||||||||||||||
destroyed | (optional) displays the item as if it was destroyed (with a red cross) 0 = (default) |
|
| ||||||||||||||||||
label | (optional), draws icon text if present 1 = (default) |
|
| ||||||||||||||||||
locked | (optional) display the item as if it was locked by the owner 0 = (default) |
|
|
It's cached for ever. Since the icon is unique and never change. For a specific icon, it'll always return the same image.
ryzom_item_icon_url($sheetid, $c=-1, $q=0, $s=0, $sap=-1, $destroyed=false, $label=true, $locked=false)
Returns a string that contains the url to display a item icon.
<?php
require_once "ryzomapi_lite.php";
$url = ryzom_item_icon_url('iczahp_3.sitem', 2);
echo "<img src=\"{$url}\" alt=\"\">";
User authentication for apps registered in AppZone
user
-- base64 encoded php serialized arraychecksum
-- sha1 hash_hmac with app secret key from AppZoneBecause of php serialize, checksum must be validated before user value can be safely used.
A validating checksum will also give a strong guarantee that the user is who he claims to be.
Example how the response is created:
$userArray = [
'timestamp' => "0.9696200 1503915319",
'app_url' => 'http://...',
'id' => "1",
'char_name' => 'player',
'race' => 'tryker',
'cult' => 'neutral',
'civ' => 'neutral',
'organization' => 'marauder',
'guild_id' => '105906000',
'guild_icon' => '17',
'guild_name' => 'guild',
'grade' => 'Leader',
'lang' => 'en'
];
$user = base64_encode(serialize($userArray));
$checksum = hash_hmac('sha1', $user, $appKey);
timestamp
contains microseconds and seconds when the response was created and should be checked to prevent replaying the same response multiple times.
app_url
must be checked to prevent same AppZone response to be used in other apps.
ryzom_app_authenticate(&$user)
This function verifies AppZone user and checksum url parameters. Uses $_GET['user'] and $_GET['checksum'] directly.
Function returns boolean true if successful. $user variable will contain info from AppZone or an error message if there was an error
$_SESSION['app.user']
|
is set for future requests. PHP session is required. |
RYAPI_AUTH_KEY
RYAPI_APP_URL
RYAPI_APP_MAXAGE
<?php
require_once "ryzomapi_lite.php";
define('RYAPI_AUTH_KEY', 'secret-key');
define('RYAPI_APP_URL', 'http://app.url/');
define('RYAPI_APP_MAXAGE', 30);
session_start();
$user = false;
if (ryzom_app_authenticate($user)) {
$charName = htmlspecialchars($user['char_name']);
echo "Hello {$charName}!";
} else {
$error = htmlspecialchars($user);
echo "Authentication failure ({$error}).";
}
Pages in Category : "API templates" :