Interface XMLRPC

From Openflyers

Jump to: navigation, search

Openflyers dispose d'une interface XMLRPC pour permettre aux clubs de récupérer certaines informations.

Les fonctions disponibles sont :

  • <string> of12_authenticate(<string> login, <string> password)
 Retourne un sessionId si les login/password correspondent à un utilisateur openflyers ayant le droit "manageClub"
  • <integer array> of12_getAuthenticateIds(<string> sessionId)
 Retourne la liste des Id de la table authentication
  • <struct> of12_getInfos(<string> sessionId, <integer> id)
 Retourne les infos liées à l'utilisateur identifié par id
  • <struct array> of12_getInfos(<string> sessionId, <integer array> ids)
 Retourne les infos liées aux utilisateurs identifiés par les identifiants contenus dans le tableau ids

Un exemple simple de client (écrit en Ruby, preuve que la solution d'accès à nos données ne fonctionne pas qu'avec PHP ;) ):

 
require 'xmlrpc/client'
require 'rubygems' # pour utiliser htmlentities
require 'htmlentities'
 
#
# conf :
#
login = "test"
password = "test"
 
server_uri = "http://demo.openflyers.fr/rpc.php5"
 
# DO NOT EDIT
#8<-------------------------------------------------------------------
begin
        server = XMLRPC::Client.new2(server_uri)
 
#
# Authentication
#
 
        sid = server.call("of12_authenticate", login, password)
        raise "Authentication error" unless sid
        puts "successfully authenticated as " << login
        puts
#
# Get all authentication ids
#
        ids = server.call("of12_getAuthenticateIds", sid)
        raise "Ids should be an array!" unless ids.is_a? Array
        ids.sort
        puts "All available authentication ids retrieved"
        puts
 
#
# 1/ Fetch information user by user
#
        t = Time.now
        ids.each do |id|
                info = server.call("of12_getInfos", sid, id)
                raise "Info should be an Hash!" unless info.is_a? Hash
                puts id.to_s + " " + HTMLEntities.decode_entities(info["first_name"]).capitalize + " " + HTMLEntities.decode_entities(info["last_name"]).upcase
        end
        printf("temps écoulé : %u sec\n", (Time.now - t))
        puts
 
 
#
# 2/ Fetch information for a list of users
#
        t = Time.now
        infos = server.call("of12_getInfos", sid, ids)
        raise "Infos should be an array!" unless ids.is_a? Array
 
        infos.each do |info|
                raise "Info should be an Hash!" unless info.is_a? Hash
                puts info["num"] + " " + HTMLEntities.decode_entities(info["first_name"]).capitalize + " " + HTMLEntities.decode_entities(info["last_name"]).upcase
        end
        printf("temps écoulé : %u sec\n", (Time.now - t))
        puts
 
 
rescue Exception => fault
        puts fault.to_s
        abort
end
 
Personal tools