2009-05-08 10 views
7

Sto lavorando sull'integrazione con l'API Photobucket e mi sono imbattuto in questo nella loro api docs:Ordina lessicograficamente?

"Ordina parametri per nome lexographically [sic] (ordinamento byte, l' ordinamento standard, non naturali o caso insensibile) Se i parametri hanno lo lo stesso nome, quindi ordinare in base al valore. "

Che cosa significa? Come faccio a ordinare qualcosa lessicograficamente? ordinamento dei byte?

Il resto della loro documentazione stato ok finora, ma (per me) sembra che questa linea di porta ulteriori spiegazioni. Sfortunatamente non ce n'era.

Comunque, sto scrivendo l'applicazione in Python (che sarà alla fine diventano un app Django) nel caso in cui si desidera raccomandare moduli specifici che gestirà tale ordinamento per me^_^

risposta

6

La parola dovrebbe essere "lessicografico"

http://www.thefreedictionary.com/Lexicographic

ordine dizionario. Usando le lettere come appaiono nelle stringhe.

quanto suggeriscono, non piegare maiuscole e minuscole insieme. Basta usare il metodo list.sort() integrato in Python.

+0

Penso che ho ereditato l'errore ortografico da una versione molto vecchia delle specifiche OAuth 1.0. – Justin

4

Questo è simile alle API di Facebook - la stringa di query deve essere normalizzato prima di generare l'hash della firma.

probabilmente avete un dizionario di parametri come:

params = { 
    'consumer_key': "....", 
    'consumer_secret': "....", 
    'timestamp': ..., 
    ... 
} 

Creare la stringa di query in questo modo:

urllib.urlencode(sorted(params.items())) 

params.items() restituisce le chiavi ei valori del dizionario come una lista tuple, sorted() sorts l'elenco e urllib.urlencode() li concatena in una singola stringa durante l'escape.

8

Penso che qui lessicografico sia un "alias" per l'ordinamento ascii?

 
Lexicographic   Natural 
z1.doc     z1.doc  
z10.doc     z2.doc  
z100.doc    z3.doc  
z101.doc    z4.doc  
z102.doc    z5.doc  
z11.doc     z6.doc  
z12.doc     z7.doc  
z13.doc     z8.doc  
z14.doc     z9.doc  
z15.doc    z10.doc  
z16.doc    z11.doc  
z17.doc    z12.doc  
z18.doc    z13.doc  
z19.doc    z14.doc  
z2.doc     z15.doc  
z20.doc    z16.doc  
z3.doc     z17.doc  
z4.doc     z18.doc  
z5.doc     z19.doc  
z6.doc     z20.doc  
z7.doc    z100.doc  
z8.doc    z101.doc  
z9.doc    z102.doc  
1

citare un po 'di più dalla sezione:

2 Generare la stringa Base:

normalizzare i parametri:

  • Aggiungere i parametri specifici OAuth per questa richiesta ai parametri di input, tra cui:

    oauth_consumer_key = <consumer_key> 
    oauth_timestamp = <timestamp> 
    oauth_nonce = <nonce> 
    oauth_version = <version> 
    oauth_signature_method = <signature_method> 
    
  • Ordinare i parametri in base al nome lessografico [sic] (ordine dei byte, ordinamento standard, non naturale o maiuscole/minuscole).Se i parametri hanno lo stesso nome, quindi ordinare in base al valore.

  • Codificare i valori dei parametri come nella sezione 2 dell'RFC3986 (vale a dire, urlencode). Crea stringa parametro(). Questo è lo stesso formato di HTTP "postdata" o "querystring", ovvero ogni parametro rappresentato come nome = valore separato da &. Ad esempio, a=1&b=2&c=hello%20there&c=something%20else

penso che stanno dicendo che i parametri devono apparire nel modo ordinato - oauth_consumer_key prima oauth_nonce prima ...