2009-05-08 5 views
7

Ich arbeite mit dem Photobucket API zur Integration und ich auf diese kam in ihrer api docs:Lexikographisch sortieren?

„namentlich die Parameter sortieren lexographically [sic] (Byte-Reihenfolge, die Standardsortierung, nicht natürliche oder case insensitive). Wenn die Parameter den gleichen Namen haben, dann sortieren Sie nach dem Wert. "

Was bedeutet das? Wie sortiere ich lexikografisch? Byte-Bestellung?

Der Rest ihrer Dokumente war soweit in Ordnung, aber (für mich) scheint es, dass diese Zeile eine weitere Erklärung enthält. Leider gab es keine zu haben.

Wie auch immer, ich schreibe die Anwendung in Python im Fall (es wird schließlich eine Django app werden) Sie bestimmte Module empfehlen wollen, die für mich eine solche Sortierung^_^

Antwort

6

Das Wort behandelt sein "lexicographic"

http://www.thefreedictionary.com/Lexicographic

Wörterbuch bestellen sollte. Verwenden Sie die Buchstaben, wie sie in den Strings erscheinen.

Wie sie vorschlagen, falten Sie nicht Groß-und Kleinschreibung zusammen. Verwenden Sie einfach die integrierte list.sort() - Methode von Python.

+0

Ich glaube, ich die falsche Schreibweise von einer sehr alten Version geerbt der Spezifikation OAuth 1.0. – Justin

4

Dies ähnelt der Facebook-API - die Abfragezeichenfolge muss vor dem Generieren des Signatur-Hashs normalisiert werden.

Sie haben wahrscheinlich ein Wörterbuch von Parametern wie:

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

die Abfragezeichenfolge wie so erstellen:

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

params.items() gibt die Schlüssel und Werte des Wörterbuchs als Liste Tupel, sorted() Sorten Die Liste und urllib.urlencode() verkettet sie in einer einzigen Zeichenfolge beim Entkommen.

8

Ich denke, dass lexikographisch hier ein "Alias" für ASCII-Sortierung ist?

 
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

Quote ein bisschen mehr aus dem Bereich:

2 Generieren Sie die String Basis:

die Parameter Normalisieren:

  • die spezifischen Parameter OAuth hinzufügen für diese Anfrage zu den Eingangsparametern einschließlich:

    oauth_consumer_key = <consumer_key> 
    oauth_timestamp = <timestamp> 
    oauth_nonce = <nonce> 
    oauth_version = <version> 
    oauth_signature_method = <signature_method> 
    
  • Die Parameter nach dem Namen lexographisch sortieren (Byte-Reihenfolge, die Standard-Sortierung, nicht natürlich oder Groß-und Kleinschreibung nicht beachten).Wenn die Parameter denselben Namen haben, sortieren Sie nach dem Wert.

  • Codieren Sie die Parameterwerte wie in RFC3986 Abschnitt 2 (d. H. Urlencode). Erstellen Sie den Parameter string(). Dies ist das gleiche Format wie HTTP 'postdata' oder 'querystring', dh jeder Parameter wird als Name = Wert dargestellt, getrennt durch &. Zum Beispiel a=1&b=2&c=hello%20there&c=something%20else

denke ich, dass sie sagen, dass die Parameter in der sortierten Reihenfolge erscheinen müssen - oauth_consumer_key vor oauth_nonce vor ...