Italian XML RPC

MarcoRome

Expert
Licensed User
Longtime User
Buongiorno a tutti.
Ho provato a postare nelle question ma non ho ricevuto alcuna risposta.
Il codice è il seguente:
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim XMLRPC1 As XMLRPC
    Dim XMLRPC2 As XMLRPC
End Sub
Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        XMLRPC1.Initialize("XMLRPC1")
        XMLRPC2.Initialize("XMLRPC2")
    End If
'Preleva Token
XMLRPC1.initXMLRPCClient("http://muovi.roma.it/ws/xml/autenticazione/1")
Dim vedi As String = XMLRPC1.objectCall2("autenticazione.Accedi","QCOT7MBQwaC8dQI3BcVEC58kTCeriOOi","")
Log(vedi)
'Preleva Tempo Bus sulla Palina
XMLRPC2.initXMLRPCClient("http://muovi.roma.it/ws/xml/paline/7")
Dim previsioni As Object  = XMLRPC2.objectCall3("paline.Previsioni",vedi,70101,"")
Log(previsioni)

La prima chiamata XMLRPC1 lavora senza alcun problema e restituisce il token.
La seconda chiamata XMLRPC2 restituisce la seguente stringa:
{id_richiesta=11d4dc1182cc01abde46f3a23c362914, risposta={primi_per_palina=[Ljava.lang.Object;@41b52ac0, arrivi=[Ljava.lang.Object;@41b50fd0, nome=LGT GIANICOLENSE/REGINA COELI, collocazione=LTV GIANICOLENSE, 70 M. PRIMA SBOCCO PONTE MAZZINI}}

Dovrebbe però ricevere ben altro, come qui sotto documentato:

B4X:
paline.Previsioni(string token, int id_palina, string lingua)
Descrizione
Questo metodo restituisce le previsioni di arrivo alla palina id_palina, organizzate come nel sito muovi.roma.it.
Input
string token: identificativo per gli utenti autorizzati
int id_palina: numero della palina richiesta
string lingua: codice della lingua, utilizzato per dare informazioni sulle disabilitazioni se e solo se disponibili nella lingua richiesta
Output
L'output è un dizionario così composto:
string nome: nome della palina richiesta
bool abilitata: palina attualmente abilitata alle previsioni di arrivo
int id_news: se è disponibile una news che spiega perché la palina è disabilitata, l'id di tale news; altrimenti -1
string collocazione: collocazione della palina
list veicoli: previsioni dei veicoli in arrivo, ordinati per tempo di arrivo
list primi_per_palina: informazioni sulle linee che transitano per ciascuna delle paline (in quanto è possibile definire gruppi composti da più paline). Per ogni linea è riportato l'eventuale primo veicolo in arrivo. Ciascun elemento della lista è un dizionario così composto:
string id_palina: id della palina
string nome_palina: nome della palina
list arrivi: lista delle linee e degli eventuali veicoli in arrivo, ordinati per linea
Ogni elemento delle liste arrivi (sia dell'elenco complessivo degli arrivi, sia dei primi arrivi per palina) è un dizionario così composto:
string linea: il codice della linea
string id_palina: id della palina per cui è fornita la previsione (utile per previsioni su gruppi di paline)
string nome_palina: nome della palina per cui è fornita la previsione (utile per previsioni su gruppi di paline)
bool non_monitorata: definito e True sse per la linea non sono disponibili previsioni in tempo reale sugli arrivi. Se vale True, non sono definiti gli elementi che seguono
bool nessun_autobus: definito e True sse nessun autobus è in arrivo per la linea. Se vale True, non sono definiti gli elementi che seguono
bool disabilitata: True sse le previsioni di arrivo sono temporaneamente disabilitate per la linea
int id_news: se le previsioni di arrivo sono disabilitate, id della news sulla disabilitazione (se disponibile), oppure -1
string id_percorso: l'identificatore del percorso (oppure elemento non definito)
string destinazione: nome del capolinea di destinazione del percorso (oppure elemento non definito)
string carteggi: i carteggi del percorso
string carteggi_dec: i carteggi del percorso, decodificati
string capolinea: il capolinea di destinazione del percorso
string partenza: orario di partenza dal capolinea (definito solo per bus a capolinea)
string annuncio: l'annuncio prodotto dal servizio InfoTP, es.: 2 Fermate (2')'
bool meb: presenza della MEB
bool pedana: presenza della pedana disabili
bool moby: presenza di Moby
bool aria: presenza del condizionatore d'aria
bool a_capolinea: true sse l'autobus è a capolinea
bool in_arrivo: true sse l'autobus è in arrivo
int tempo_attesa: tempo di attesa previsto, espresso in secondi (se l'autobus non è a capolinea)
int distanza_fermate: numero di fermate di distanza fra il bus e la fermata richiesta (se l'autobus non è a capolinea)
int id_veicolo: numero identificativo del veicolo

Suggerimenti ???
Grazie a tutti
 

LucaMs

Expert
Licensed User
Longtime User
si, ho fatto confusione, non conosco né il protocollo, né la libreria, né le Paline, benché queste ultime girino spesso vorticosamente, hehehe.

Sto utilizzando l'ottimo Object Browser di Vader per analizzare la libreria. Potresti provare ad utilizzare altri metodi di richiesta:

(dal Browser):

arrayCall3

Tipo
metodo

Descrizione
Convenience method call with three parameters that returns an array.
method: name of method to call
p0: method's parameter
Return type: @return:deserialized method return value


Sintassi
arrayCall3(Method As String, p0 As Object, p1 As Object, p2 As Object) As Object[]

Valore restituito
Object[]
 

MarcoRome

Expert
Licensed User
Longtime User
Si si visto. Sono 3 giorni che ci gioco. :) Tutte li metodi funzionano tranne ArrayCall ...fino al 4.
 

MarcoRome

Expert
Licensed User
Longtime User
infatti cosi ho fatto ( ho scritto a Xtreme ).
Grazie mille della tua disponibilità...sempre gentilissimo
Buona giornata e alla prossima :)
 

MarcoRome

Expert
Licensed User
Longtime User
Qualsiasi collega voglia partecipare è benvenuto ;)
Grazie
 
Last edited:

MarcoRome

Expert
Licensed User
Longtime User
Mi sono sentito anche con Erel. Lui stesso ha detto di non essere molto "ferrato" sul discorso XMLRPC e di risolvere la questione con HttpUtils2.
Ho provato a scrivere un po' di codice del tipo :
B4X:
requestSoapXML1 = "<?xml version='1.0'?>" & _
"<methodCall>" & _
"<methodName>autenticazione.Accedi</methodName>" & _
"<params>" & _
  "<param>" & _
        "<value>QCOT7MBQwaC8dQI3BcVEC58kTCeriOOi</value>" & _
        "<value>''</value>" & _
    "</param>" & _
  "</params>" & _
"</methodCall>" 
 
  job1.Initialize("JOB1", Me)
  job1.PostString ("http://muovi.roma.it/ws/xml/autenticazione/1", requestSoapXML1)
  Log("JobName = " & job1.JobName & ", Success = " & job1.Success)
  Log(job1.GetString)
  Taken = job1.GetString

Lo stesso torna con Success = False
Erel mi ha detto che il codice è sbagliato, di guardare il tutorial di HttpUtils2.
Ma dopo aver visto lo stesso non mi si è accesa nessuna lampadina.
Anche LucaMs bontà sua sta cercando di darmi una mano.
Chi di voi ha già esperienza in tal senso ?
Grazie mille
 
Top