Twinpedia » hordes » api_xml

FIXME Les informations de cette page n'ont pas encore été mises à jour pour la version 2 de l'API XML. Cette page est donc en partie obsolète car l'ancienne version 1 n'est plus utilisée.
L'API version 2.x contient plus d'informations que dans la version 1 (nouveaux chantiers, améliorations, contenu des zones du désert) et introduit le concept de clés sécurisées pour les sites externes.
Cette page a été mise à jour jusqu'à la section city, non incluse.

Hordes : L'API XML

L'API XML a été développée par Deepnight sur demande des joueurs de la première version bêta.

Rien n'est encore définitif. Les choses peuvent évoluer, des informations pourront être ajoutées et d'autres pourront disparaître.

L'API XML permet d'avoir un accès en lecture à certaines informations de la ville. Son exploitation peut se faire sur différents supports : Site Web, Applications, DS, iPhone, Mobile, Palm, ….

Vous trouverez l'aide officielle (hordes.fr) de l'API XML là ⇒ .

Pour information, la version actuelle du flux XML est 2.171.

Présentation

Généralités


Le XML v2 a changé sur de nombreux points.
Tout d'abord la structure, voyons un exemple simple de la v2 :

  <hordes>
    <headers link="http://beta.hordes.fr/xml" iconurl="http://data.hordes.fr/gfx/icons/" secure="0"
    author="Motion Twin http://www.motion-twin.fr" language="fr" version="2.10"
    avatarurl="http://imgup.motion-twin.com/" generator="haxe">
    <owner>
      <citizen dead="0" hero="0" name="DarKalimHero" x="9" y="4" id="666" ban="0" job="basic" out="1"
      baseDef="0">
      </citizen>
      <myZone .../>
    </owner>
    <game days="5" quarantine="0" datetime="2009-01-08 21:48:28" id="159269"/>
    </headers>
    <data cache-date="2008-11-03 16:11:19" cache-fast="0">
      <city .../>
      <bank .../>
      <expeditions.../>
      <citizens .../>
      <cadavers .../>
      <map .../>
      <upgrades .../>
    </data>
  </hordes>

Les infos “ban” et “dead” sont passées dans la node <owner/> qui se trouve dans <headers/>.
La node <game/> est déplacée dans <headers/>
Toutes les infos de jeu (banque, carte, citoyens…) sont rangées dans une node <data/>.

La node <city/> s'enrichi d'une nouvelle node <defense/> qui contient le détail complet des défenses de la ville :

  <defense base="5" items="39" citizens="1" upgrades="0" buildings="0" total="84" itemsMul="2"/>

base = défense initiale d'une ville
citizens = défense apportée par les citoyens (maison, travaux et bonus gardiens)
upgrades = défense apportée par les évolutions
buildings = défense apportée par les chantiers
items x itemsMul = défense des objets en banque (nombre x multiplicateur)

La node <data/> dispose de 2 attributs :
- le mode “cache-fast” (0 ou 1), nous y reviendrons,
- la date de dernière actualisation du cache.

La node <upgrades/> contient des nodes <up/> comme par exemple :

  <upgrades total="4">
    <up name="Atelier" level="1"/>
    <up name="Pompe" level="3"/>
    ...
  </upgrades>

L'attribut “total” est simplement le nombre total de niveaux d'évolutions.

Le Système de Cache

Seules les données présentes dans <data/> sont concernées par la mise en cache.
Les données dans <headers/> sont toujours à jour, en temps réel.
Les infos que vous recevez sont mises à jour au maximum toutes les 5 minutes en mode “cache-fast” à 0, et toutes les minutes en mode “cache-fast” à 1.

Vous bénéficiez du mode “cache-fast” si vous en faites la demande.
Une clé unique pour votre site vous est alors attribuée, il suffit dès lors de l'envoyer avec votre requête pour récupérer le XML :

http://www.hordes.fr/xml?k=[api_key];sk=[site_key]

IMPORTANT : vous devez garder cette clé secrète ! Elle pourra être régénérée sur demande.

L'Authentification

Les sites externes disposant d'une clé (voir ci-dessus) peuvent demander à passer en “mode sécurisé”.

Ce mode permet de recevoir une node <owner/> dans <headers/> qui donne le login du joueur, s'il est banni et s'il est mort.
IMPORTANT : les sites sans mode sécurisé n'auront pas ces infos !

Un site utilisant le mode sécurisé doit obligatoirement être accédé via l'annuaire de Hordes.fr ().
Une clé unique vous est alors envoyée en POST lors de l'appel de votre site. Il vous suffit d'effectuer les requètes, accompagnées de votre clé de site.
Les clés sécurisées seront reconnues et vous recevrez un XML avec la node <owner/> en cadeau.

Cela implique que vous ne pourrez plus avoir de formulaire de connexion du type ”Entrez votre clé API + login”.
Seul le site Hordes.fr pourra vous fournir une clé, via l'annuaire.

La clé en question est issue d'une combinaison entre votre clé site + la clé utilisateur. Cela signifie qu'une clé de “deepnight” sur HordesM@P ne sera pas la même qu'une clé de “deepnight” sur Poste de Contrôle.

Le XML Commenté

Vous pouvez dorénavant appeler une URL de demande de XML en ajoutant le paramètre “comment=1” à l'URL.
Vous recevrez en réponse un XML dont les valeurs ne seront pas exploitables, mais qui sera commenté.

http://www.hordes.fr/xml?k=[api_key];comment=1
ou
http://www.hordes.fr/xml?k=[api_key];sk=[site_key];comment=1

Exemple de node commentée :

  <building
    name="String"
    temporary="1/0 (vaut 1 si le chantier doit être détruit lors de la prochaine attaque)"
    id="Int"
    img="String">
    .....CDATA.....
  </building>

Vous pouvez ainsi connaître le type de chaque attribut (entier, flottant, chaîne de caractères, date…) et éventuellement un commentaire pour les cas qui nécessitent une explication.

Certaines nodes peuvent ne pas apparaître selon le flux XML.
Par exemple, s'il n'y aucune évolution de réalisée dans la ville concernée, la node <evolutions/> sera vide et par conséquent non-commentée.

ATTENTION : cet appel passe outre le cache et ne doit pas être utilisé massivement (auquel cas la MT serait obligée de le désactiver). Il a pour seul but de permettre d'obtenir une ébauche de documentation automatique de n'importe quel XML.

L'URL de Redirection - Liens entre sites externes

Cette option n'est plus possible.

Chaque paire utilisateur + site disposant d'une clé unique, il vous est impossible de rediriger un visiteur authentifié sur votre site vers un autre site externe (vous ne connaissez pas la clé correspondante).

Vous pouvez néanmoins le faire en utilisant l'URL de “bounce” proposée par Hordes.
Cette URL ne peut être appelée que par un site externe disposant d'une clé API utilisateur “authentifiée” :

http://beta.hordes.fr/bounce?k=[api_key];to=[destination_id]

[api_key] : clé authentifiée de l'utilisateur.
[destination_id] : id du site vers lequel vous souhaitez être redirigé(e).
Optionnel : ajoutez l'attribut “redir=1” si vous souhaitez être redirigé(e) automatiquement sans passer par la page “disclaimer”.

Vous trouverez sur cette même page toute la documentation nécessaire pour comprendre et utiliser le bounce.


Ceci était un communiqué de notre cher Administrateur Deepnight.

Support

Support
Mailing-List l'inscription se fait simplement en envoyant un e-mail avec le sujet “subscribe” et sans rien d'autre dans le corps du mail :
hordes-dev-request@hordes.fr

Ensuite, envoyez vos messages directement :
hordes-dev@hordes.fr

Les archives sont disponibles en ligne ici :
Archives Hordes-dev

Requêtes Http

Concernant l'API, l'accès se fera sur l'adresse :

www.hordes.fr/xml?k=[api_key]

Le champ [api_key] est généré depuis la page Réglages dans Mon âme : un identifiant unique anonyme pour chaque utilisateur.

L'appel à cette adresse renverra directement un flux XML complet de toutes les informations de la ville, des joueurs et de l'outre-monde.

Structure du xml

Headers

Exemple

  <headers link="http://www.hordes.fr" iconurl="http://data.hordes.fr/gfx/icons/" secure="0"
    author="Motion Twin http://www.motion-twin.fr/" language="fr" version="2.10"
    avatarurl="http://imgup.motion-twin.com/" generator="haxe">
    <!-- Optionnel : node 'owner' en mode XML sécurisé -->
    <game days="1" quarantine="0" datetime="2008-12-24 23:59:59" id="666"/>
    <owner>
      <citizen dead="0" hero="0" name="DarKalimHero" x="9" y="4" id="666" ban="0" job="basic" out="1"
      baseDef="0">
      </citizen>
      <myZone .../>
    </owner>
  </headers>

Attributs

Headers Type Informations diverses et générales
link string Lien vers le site internet
iconurl string URL de base des images (items, buildings…), penser à ajouter le '.gif' à la fin.
secure 1/0 Vaut 1 s'il s'agit d'un XML sécurisé
author string Auteur du flux XML
language string Langue utilisée pour les descriptifs
version float Version actuelle de l'API
avatarurl string URL de base des avatars utilisateurs
generator string Langage de programmation utilisé pour générer le XML

Error

Le nœud error apparaît quand il y a une erreur ou une cause qui fait que les informations ne seront pas délivrées.

Exemples

  <error code="user_not_found"/>

En mode sécurisé, on peut obtenir le nom de l'utilisateur dans certaines erreurs :

  <error code="not_in_game" name="Le Corbeau" id="2" hero="1"/>

Attributs

Error Type Message d'erreur
code string mot clé d'erreur :
missing_key : la clé doit être fournie
user_not_found : la clé n'est pas valide
not_in_game : le citoyen n'est pas dans une ville (mort)
horde_attacking : la horde est en train d'attaquer
invalid_keys : la paire key/skey est invalide
site_key_required_for_secure_key : utilisation d'une clé sécurisé sans skey
maintain : site hordes.fr en maintenance

Owner

Le nœud owner apparaît lorsque le XML est un XML sécurisé (attribut secure=1 dans la node headers).

Exemple

  <owner>
    <citizen dead="0" hero="0" name="DarKalimHero" x="9" y="4" id="666" ban="0" job="basic" out="1" baseDef="0">
    </citizen>
    <myZone dried="0" z="3" h="2">
      <item name="Ouvre-boîte" count="1" id="23" img="can_opener" broken="1"/>
    </myZone>
  </owner>

Attributs

Citizen Type Informations sur le joueur
dead 1/0 Vaut 1 si le joueur est mort
hero 1/0 Vaut 1 si le joueur est un héros
name string Nom du citoyen
x / y int Position du joueur sur la carte
id int Identifiant du joueur
ban 1/0 Vaut 1 si le joueur est banni de la communauté
job string Métier du citoyen
”“ : Pas encore choisi
“basic” : Simple habitant
“collec” : Fouineur
“guardian” : Gardien
“eclair” : Éclaireur
out 1/0 Vaut 1 si le joueur est dehors
baseDef int Défense de la maison qui compte dans la défense totale de la ville
MyZone Type Informations sur la zone du joueur
dried 1/0 Vaut 1 si la zone est épuisée
z int Nombre de zombies tel qu'il est vu par le joueur
h int Nombre de points de contrôle des humains de cette zone
Item Type Informations sur les objets au sol
name string Nom de l'objet
count int Quantité de cet objet
id int Identifiant de l'objet
img string Image de l'objet, ajouter '.gif' et l'attribut iconurl de la node 'headers'
broken 1/0 Vaut 1 si l'objet est cassé

Game

Exemple

  <game days="1" quarantine="0" datetime="2008-12-24 23:59:59" id="666"/>

Attributs

game Type Informations relatives à la partie
days int Nombre de jour de survie
quarantine 1/0 Vaut 1 si la partie a été mise en quarantaine suite à un bug
datetime date Date à laquelle se rapporte l'ensemble des informations
id int Identifiant de la ville

Data

Exemple

  <data cache-date="2008-11-24 21:41:48" cache-fast="0">
    <city city="Vallée ravagée" door="1" hard="0" water="34" chaos="1" devast="1" x="19" y="10">
      <defense base="5" items="0" citizen_guardians="1" citizen_homes="0" upgrades="0" buildings="0"
      total="6" itemsMul="2"/>
    </city>
    <bank>
      <item name="Poignée de vis et écrous" count="1" id="41" cat="Rsc" img="meca_parts" broken="0"/>
    </bank>
    <expeditions/>
    <citizens>
      <citizen dead="0" hero="0" name="Test" avatar="hordes/e/e/6a66a66a_66.jpg" x="9" y="4" id="666" ban="0"
      job="basic" out="1" baseDef="0"></citizen>
    </citizens>
    <cadavers/>
    <map hei="14" wid="14">
      <zone x="9" y="4" nvt="0" tag="6" danger="2"/>
      <zone x="7" y="2" nvt="0" tag="1" danger="3">
        <building name="Bâtiment non-deterré" type="-1" dig="19"/>
      </zone>
    </map>
    <upgrades total="0"/>
    <estimations/>
  </data>

Attributs

data Type Informations générales
cache-date date [facultatif] Date et heure de génération de ce XML (Peut ne pas exister si le cache XML est désactivé).
cache-fast 1/0 [facultatif] Vaut 1 si la fréquence d'actualisation du cache est rapide (1 min), 0 si elle est normale (5 min).

City

Exemple

  <city city="Vallée ravagée" door="1" hard="0" water="34" chaos="1" devast="1" x="19" y="10">
    <building name="Tour de guet" temporary="0" id="1050" img="item_tagger">
      Cette tour placée près de l'entrée offre une estimation de l'attaque du soir et permet ainsi aux
      citoyens de mieux s'y préparer. Elle débloque également toutes les constructions liées aux 
      situations d'urgence.
    </building>
    <building name="Portail" temporary="0" id="1062" img="small_door_closed">
      Un bricolage un peu rustique qui permet d'empêcher l'ouverture (rarement désirée) de la porte de 
      23h40 à minuit. La porte doit toutefois toujours être fermée manuellement.
    </building>
    <news z="24">
      <content>
        <p>2 citoyens manquent à l'appel ce matin... Ils sont sortis cette nuit... 
        Mais pas un seul n'est revenu... <strong>Pas UN SEUL</strong>.</p><p>A part 
        ça, nos défenses ont suffi pour résister cette nuit. Je doute que ça soit aussi 
        bien ce soir, les zombies vont vraiment avoir les crocs...</p>
      </content>
    </news>
    <defense base="5" items="1" citizen_guardians="1" citizen_homes="3" upgrades="0" buildings="5"
    total="16" itemsMul="2"/>
  </city>

Attributs

City informations concernant la ville
city nom de la ville
door 0 : porte fermée
1 : porte ouverte
hard 0 : ville normale
1 : pandémonium
water quantité d'eau dans le puits
chaos 1 si en mode chaos, 0 autrement
devast 1 si dévastée, 0 autrement
x / y position de la ville sur la carte
building liste des chantiers contruits
name nom de la construction
temporary 1 : chantier temporaire
0 : chantier permanent
id identifiant de la construction
img nom de l'icône du chantier. Pour l'url complètete, faire iconurl + img + .gif.
contenu description RP du chantier.
news La Gazette.
z nombre de zombie lors de l'attaque de la veille
def La valeur de la défense au moment de l'attaque.
content Le contenu de la Gazette. Contient du html pour la mise en forme.

Bank

Exemple

  <bank>
    <item name="Pile" count="9" id="2" cat="Rsc" img="pile" broken="0"/>
 
    <item name="Boîte de Conserve ouverte" count="7" id="4" cat="Food" img="can_open" broken="0"/>
    <item name="Tournevis" count="2" id="14" cat="Weapon" img="screw" broken="0"/>
    ...
  </bank>

Attributs

bank contenu de la banque
item informations propres à un type d'objet
name nom de l'objet
count quantité
id identifiant de l'objet
cat catégorie de l'objet, utilisée pour le tri de la banque
img image associée à l'objet
[iconurl]item_[img].gif
broken vaut 1 si l'objet est cassé

Expeditions

Exemple

  <expeditions>
    <expedition name="Expédition jour 3 [4PA]" author="Xiiwit" length="4" authorId="17057">
      <point x="6" y="6"/>
      <point x="5" y="6"/>
      <point x="5" y="5"/>
      <point x="6" y="5"/>
    </expedition>
    ...
  </expeditions>

Attributs

expeditions liste des expéditions
expedition chemin d'une expéditions
name nom de l'expédition concaténé avec la distance
author nom du citoyen qui à crée le chemin
length distance de l'expédition
authorId identifiant du citoyen qui à crée le chemin
point étape du expédition
x / y coordonnée

Citizens

Exemple

<citizens>
   <citizen dead="0" hero="1" name="DarKalimHero" avatar="hordes/a/2/49329743_19903.jpg" x="8" y="7" id="19903" ban="0" job="guardian" out="1" baseDef="0"></citizen>
            <citizen dead="0" hero="1" name="darkMK" avatar="hordes/5/5/a6b5ca88_85114.jpg" x="11" y="6" id="85114" ban="0" job="hunter" out="0" baseDef="0"></citizen>
            <citizen dead="0" hero="0" name="Dimedolorole" avatar="hordes/9/d/ca33d9b3_387943.jpg" x="12" y="5" id="387943" ban="0" job="basic" out="1" baseDef="1">Quel style, quel style !</citizen>
            <citizen dead="0" hero="0" name="emua" avatar="hordes/2/c/cdc390a8_339438.jpg" x="11" y="6" id="339438" ban="0" job="basic" out="0" baseDef="0"></citizen>
...
</citizens>

Attributs

citizens liste des citoyens
citizen informations propres à un citoyen
dead 1 : Le citoyen est mort.
0 : Le citoyen est vivant.
hero 1 : âme de héros.
0 : âme normale.
name nom du citoyen
avatar url de l'avatar du citoyen : avatarurl + avatar.
x / y position du citoyen sur la carte
id identifiant du citoyen
ban 1 : banni.
0 : normal
job métier du citoyen
”“ : pas encore choisi
“basic” : habitant
“collec” : collecteur
“guardian” : gardien
“eclair” : éclaireur
“hunter” : ermite
“tech” : technicien
out 1 : Le citoyen est dans l'outre-monde.
0 : Le citoyen est en ville. (redondant avec la position)
baseDef Défense de la maison comptant pour la défense de la ville.
0 : Lit de camp.
1 : Tente.
3 : Taudis.
4 : Baraque.
6 : Maison.
8 : Maison clôturée.
12 : Abri fortifié.
20 : Bunker.
40 : Château.
contenu Annonce personnelle (celle qui apparaît sur la page citoyens)

Cadavers

Exemple

  <cadavers>
    <cadaver name="Haoshin" dtype="5" id="6144" day="1">
      <msg>
        <![CDATA[Message de mort]]>    
      </msg>
    </cadaver>
    <cadaver name="Thesavantfou" dtype="5" id="36826" day="1">
      <cleanup type="garbage" user="Brounie"/>
      <msg>
        <![CDATA[]]>
      </msg>
    </cadaver>
    ...
  </cadavers>

Attributs

cadavers liste des morts
cadaver informations propres à un mort
name nom du mort
dtype type de la mort
0 : Mort inconnue
1 : Déshydraté
2 : Suicide par pendaison (pour les admins seulement)
3 : Cyanure
4 : Pendu par la communauté
5 : Dévoré dehors
6 : Dévoré chez soi
7 : Manque de drogue
8 : Infection
9 : Fusillé par un admin (modération)
10 : Désintégré définitivement (compte supprimé)
11 : poison
12 : dévoré par une goule
13 : goule tué
id identifiant du mort
day jour de la mort
bug : si dtype = 5, il faut ajouter +1
cleanup Information sur la destruction du corps
type type de destruction
garbage : Sorti
water : Dissous à l'eau
xxx : À completer
user pseudo du joueur ayant détruit le corps
msg dernière parole

Map

Exemple

  <map hei="12" wid="12">
    <zone x="5" y="0" nvt="1"/>
    <zone x="6" y="0" tag="4" danger="3" nvt="0">
      <building name="Abris anti-atomique" type="10" dig="0">
        Le numéro est à moitié effacé, mais il s'agissait vraisemblablement de
        l'<strong>abris 14</strong>. Si on en juge par les corps décrépis à l'intérieur, 
        le système de fermeture du sas <strong>n'a pas dû fonctionner comme prévu</strong>.
        Ca arrive.
      </building>
    </zone>
    <zone x="7" y="0" nvt="1"/>
    <zone x="8" y="0" nvt="1"/>
    <zone x="5" y="1" nvt="1"/>
    <zone x="6" y="1" danger="2"/>
    ...
  </map>

Attributs

map Définition de l'attribut
hei hauteur de la carte
wid largeur de la carte
zone informations propres à une case
x / y position de la case
nvt not visited today.
1 : La zone n'a pas été visitée aujourd'hui.
0 : La zone a été visitée aujourd'hui.
tag identifiant du marqueur
0 : RAS
1 : citoyen bloqué
2 : ressources abandonnées
3 : objet divers
4 : zone épuisée
5 : zone sécurisée
6 : zone à déblayer
7 : entre 5 et 8 zombies
8 : 9 zombies et plus
danger estimation du nombre de zombie
nœud absent : aucun zombie ou zone pas explorée (en fonction du nvt)
1 : zombies isolés (<3)
2 : meute de zombies (<5)
3 : horde de zombies
z nombre de zombie exact (si tour de guet évoluée)
building bâtiment de la case
name nom du bâtiment
type identifiant du bâtiment
dig Nombre de fois à creuser qu'il reste sur le bâtiment.
contenu Description RP du bâtiment.

Attention: les cases jamais explorées n'apparaissent pas dans le flux (pas de noeud <zone x=“X” y=“Y” /> correspondant)

hordes/api_xml.txt · Dernière modification: 21/11/2011 00:00 (modification externe)