7

我正在与 Photobucket API 集成,我在他们的api 文档中遇到了这个问题:

“按名称对参数进行排序[原文如此](字节排序,标准排序,不自然或不区分大小写)。如果参数具有相同的名称,则按值排序。”

这意味着什么?如何按字典顺序对某些内容进行排序?字节顺序?

到目前为止,他们的其他文档都还不错,但是(对我来说)这条线似乎需要进一步解释。不幸的是,没有。

无论如何,我正在用Python编写应用程序(它最终将成为 Django 应用程序),以防你想推荐可以为我处理此类排序的特定模块^_^

4

4 回答 4

8

我认为这里的词典是 ascii 排序的“别名”?

词典自然  
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    
于 2009-05-08T16:38:46.213 回答
6

这个词应该是“词典”

http://www.thefreedictionary.com/Lexicographic

字典顺序。使用字符串中出现的字母。

正如他们建议的那样,不要将大写和小写折叠在一起。只需使用 Python 内置的 list.sort() 方法。

于 2009-05-08T16:24:16.170 回答
4

这类似于 Facebook API——查询字符串需要在生成签名哈希之前进行规范化。

您可能有一个参数字典,例如:

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

像这样创建查询字符串:

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

params.items()将字典的键和值作为列表元组返回,sorted()对列表进行排序,并urllib.urlencode()在转义时将它们连接成单个字符串。

于 2009-05-08T16:31:46.917 回答
1

从该部分引用更多内容:

2 生成基本字符串:

规范化参数:

  • 将此请求的 OAuth 特定参数添加到输入参数中,包括:

    oauth_consumer_key = <consumer_key>
    oauth_timestamp = <timestamp>
    oauth_nonce = <nonce>
    oauth_version = <version>
    oauth_signature_method = <signature_method>
    
  • 按名称对参数进行排序 [原文如此](字节排序,标准排序,不自然或不区分大小写)。如果参数名称相同,则按值排序。

  • 按照 RFC3986 第 2 节(即 urlencode)对参数值进行编码。创建参数字符串()。这与 HTTP 'postdata' 或 'querystring' 的格式相同,即每个参数表示为 name=value 并用 & 分隔。例如,a=1&b=2&c=hello%20there&c=something%20else

我认为他们是说参数必须按排序顺序出现 - oauth_consumer_keybefore oauth_noncebefore ...

于 2009-05-08T17:16:22.253 回答