2009-05-08 9 views
7

Je travaille sur l'intégration avec l'API Photobucket et je suis tombé sur ce point dans leur api docs:Sort lexicographiquement?

« Trier les paramètres par nom lexographically [sic] (de l'ordre des octets, le tri norme , pas naturel ou cas insensible) Si les paramètres ont le même nom, puis trier par la valeur. "

Qu'est-ce que cela signifie? Comment trier quelque chose lexicographiquement? commande d'octets?

Le reste de leurs docs a été correct jusqu'à présent, mais (pour moi) il semble que cette ligne apporte des explications supplémentaires. Malheureusement, il n'y en avait pas.

Quoi qu'il en soit, j'écris l'application dans Python (il finira par devenir une application Django) dans le cas où vous voulez recommander des modules spécifiques qui manipuleront comme le tri pour moi^_^

Répondre

6

Le mot devrait être "lexicographique"

http://www.thefreedictionary.com/Lexicographic

pour le dictionnaire. En utilisant les lettres telles qu'elles apparaissent dans les chaînes. Comme ils le suggèrent, ne pas plier ensemble les majuscules et les minuscules. Utilisez simplement la méthode intégrée list.sort() de Python.

+0

Je pense que je hérité d'une faute d'orthographe de la version très ancienne de la spécification OAuth 1.0. – Justin

4

Ceci est similaire à l'API Facebook - la chaîne de requête doit être normalisée avant de générer le hachage de signature.

Vous avez probablement un dictionnaire de paramètres tels que:

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

Créer la chaîne de requête comme ceci:

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

params.items() renvoie les clés et les valeurs du dictionnaire comme une tuples liste, sorted() sortes la liste, et urllib.urlencode() les concatène en une seule chaîne en s'échappant.

8

Je pense qu'ici lexicographique est un "alias" pour ascii sorte?

 
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

Citation un peu plus de la section:

2 Générer la chaîne de base:

Normaliser les paramètres:

  • Ajoutez les paramètres spécifiques OAuth pour cette demande aux paramètres d'entrée, y compris:

    oauth_consumer_key = <consumer_key> 
    oauth_timestamp = <timestamp> 
    oauth_nonce = <nonce> 
    oauth_version = <version> 
    oauth_signature_method = <signature_method> 
    
  • Trier les paramètres par leur nom lexographiquement [sic] (ordre des octets, le tri standard, non naturel ou insensible à la casse).Si les paramètres ont le même nom, trier par la valeur.

  • Coder les valeurs de paramètre comme dans RFC3986 Section 2 (c'est-à-dire, urlencode). Créer une chaîne de paramètres(). Il s'agit du même format que HTTP 'postdata' ou 'querystring', c'est-à-dire que chaque paramètre représenté par name = valeur est séparé par &. Par exemple, a=1&b=2&c=hello%20there&c=something%20else

Je pense qu'ils disent que les paramètres doivent apparaître dans l'ordre de tri - oauth_consumer_key avant oauth_nonce avant ...

Questions connexes