2009-05-08 18 views
7

estoy trabajando en la integración con la API de Photobucket y me encontré con esto en su api docs:Sort lexicographically?

"Clasificar los parámetros por nombre lexographically [sic] (orden de bytes, la clasificación estándar, no natural o case insensitive). Si los parámetros tienen del mismo nombre, entonces ordena por el valor. "

¿Qué significa eso? ¿Cómo ordeno algo lexicográficamente? orden de bytes?

El resto de sus documentos han estado bien hasta el momento, pero (para mí) parece que esta línea tiene una explicación más detallada. Desafortunadamente no había ninguno.

De todos modos, estoy escribiendo la aplicación en Python (que finalmente va a convertirse en una aplicación Django) en caso de que quiera recomendar módulos específicos que se encargará de dicha clasificación para mí^_^

Respuesta

6

La palabra debe ser "lexicográfico"

http://www.thefreedictionary.com/Lexicographic

fin diccionario. Usando las letras tal como aparecen en las cuerdas.

Como sugieren, no doble las mayúsculas y minúsculas juntas. Simplemente use el método incorporado de list.sort() de Python.

+0

Creo que heredé la falta de ortografía de una versión muy antigua de la especificación OAuth 1.0. – Justin

4

Esto es similar a la API de Facebook: la cadena de consulta debe normalizarse antes de generar el hash de firma.

es probable que tenga un diccionario de parámetros como:

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

Crear la cadena de consulta de este modo:

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

params.items() devuelve las claves y valores del diccionario como una lista de tuplas, sorted() ordena la lista y urllib.urlencode() los concatena en una sola cadena mientras escapan.

8

Creo que aquí lexicographic es un "alias" para el tipo 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

Cita un poco más de la sección:

2 generar la cadena Base:

normalizar los parámetros:

  • Añadir los parámetros específicos de OAuth para esta solicitud a los parámetros de entrada, incluyendo:

    oauth_consumer_key = <consumer_key> 
    oauth_timestamp = <timestamp> 
    oauth_nonce = <nonce> 
    oauth_version = <version> 
    oauth_signature_method = <signature_method> 
    
  • Ordene los parámetros por nombre lexicográficamente [sic] (orden de bytes, la clasificación estándar, no natural o sin distinción entre mayúsculas y minúsculas).Si los parámetros tienen el mismo nombre, ordena por el valor.

  • Codifique los valores de los parámetros como en RFC3986 Sección 2 (es decir, urlencode). Crear cadena de parámetros(). Este es el mismo formato que HTTP 'postdata' o 'querystring', es decir, cada parámetro representado como nombre = valor separado por &. Por ejemplo, a=1&b=2&c=hello%20there&c=something%20else

creo que ellos están diciendo que los parámetros deben aparecer en el orden de clasificación - oauth_consumer_key antes oauth_nonce antes ...