我正在尝试使用Facebook的REST api,并使用urllib.urlencode
编码JSON字符串/字典。然而,我得到的结果与正确的编码结果不同(通过在附件字段http://developers.facebook.com/docs/reference/rest/stream.publish/中粘贴字典来显示)。我想知道是否有人可以提供任何帮助。
感谢。
编辑:
我正在尝试编码以下字典:
{"media": [{"type":"flash", "swfsrc":"http://shopperspoll.webfactional.com/media/flashFile.swf", "height": '100', "width": '100', "expanded_width":"160", "expanded_height":"120", "imgsrc":"http://shopperspoll.webfactional.com/media/laptop1.jpg"}]}
这是使用urllib.urlencode编码的字符串:
"media=%5B%7B%27swfsrc%27%3A+%27http%3A%2F%2Fshopperspoll.webfactional.com%2Fmedia%2FflashFile.swf%27%2C+%27height%27%3A+%27100%27%2C+%27width%27%3A+%27100%27%2C+%27expanded_width%27%3A+%27160%27%2C+%27imgsrc%27%3A+%27http%3A%2F%2Fshopperspoll.webfactional.com%2Fmedia%2Flaptop1.jpg%27%2C+%27expanded_height%27%3A+%27120%27%2C+%27type%27%3A+%27flash%27%7D%5D
“
这不是让我复制从facebook rest文档链接中抛出的结果,但是在附件字段中复制上面的字典时,结果是不同的。
答案 0 :(得分:2)
urllib.encode
不是用于对单个值进行urlencoding(因为同名函数在多种语言中),而是用于编码单独值的dict。例如,如果我有dict {"a": 1, "b": 2}
,它将产生字符串"a=1&b=2"
。
首先,您希望将dict编码为JSON。
data = {"media": [{"type":"flash", "swfsrc":"http://shopperspoll.webfactional.com/media/flashFile.swf", "height": '100', "width": '100', "expanded_width":"160", "expanded_height":"120", "imgsrc":"http://shopperspoll.webfactional.com/media/laptop1.jpg"}]}
import json
json_encoded = json.dumps(data)
然后,您可以使用urllib.encode
创建完整的查询字符串
import urllib
urllib.encode({"access_token": example, "attachment": json_encoded})
# produces a long string in the form "access_token=...&attachment=..."
或使用urllib.quote
对您的附件参数进行编码
urllib.quote(json_encoded)
# produces just the part following "&attachment="