Python函数类

2024-09-30 18:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

相关:Facebook Python " ValueError: too many values to unpack"

很困惑,很想了解这个。。。在

我知道这个API URL将返回我想要的Json数据:“https://graph.facebook.com/search?q=moving&type=post&limit=10000&access_token=XXXXXX|XXXXXXX

样本数据:

{"data":[{"id":"100003992227166_343136419162763",
          "from":{"name":"Taiwo Babalola Oladele","id":"100003992227166"},
          "story":"Taiwo Babalola Oladele shared Gloria Copeland's status update.",
          "story_tags":{"0":[{"id":"100003992227166",
                              "name":"Taiwo Babalola Oladele",
                              "offset":0, "length":22, "type":"user"},],
                       "30":[{"id":"109580399076690",
                              "name":"Gloria Copeland",
                              "offset":30,"length":15,"type":"page"},

因此,我尝试将上面的API URL添加到下面的代码中,以构建一个.csv:

^{pr2}$

我查到了:

Traceback (most recent call last):
  File "./facebook_washer_dryer1.sh", line 43, in <module>
    main()
  File "./facebook_washer_dryer1.sh", line 34, in main
    js = json.loads(data)
  File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
[ec2-user@ip-172-31-46-164 ~]$

我明白相关链接上的人在说什么,但我想我有点不明白

当我定义我的搜索类时,我不确定我做错了。在


Tags: nameinidjsonfacebookusrtypeline
1条回答
网友
1楼 · 发布于 2024-09-30 18:32:21

您甚至没有编写任何代码来构建URL,更不用说在该URL下载文档了。在

作为补充说明,您在这里发布的代码(以及在您最初的问题中)有一些SyntaxError使其无法使用。另外,您使用的是python2.6,但是定义的类没有基类,这意味着您将得到您不想要的经典类。我会边走边修。在


首先,在__init__方法中,您创建了两个局部变量query和{},然后对它们不做任何操作。这对你没什么好处。如果要创建其他方法可以使用的变量,则必须创建对象的属性,而不是局部变量。像这样:

class FacebookSearch(object):
    def __init__(self):
        self.url_format = 'https://graph.facebook.com/search.{mode}?{query}&{access_token}'
        self.access_token = 'XXXXXX|XXXXX'

现在,您可以使用这些变量。但你必须实际使用它们。要将变量粘贴到格式字符串中,必须对该格式字符串调用.format方法。像这样:

^{pr2}$

所以,现在我们有了一个完整的URL,比如https://graph.facebook.com/search?q=moving&type=post&limit=10000&access_token=XXXXXX|XXXXXXX。到目前为止,还不错。但那仍然只是一个URL,一个字符串。您希望在URL的获取文档。为此,您需要调用一些函数来下载URL。像^{}

    def search(self, q, mode='json', **queryargs):
        url = self.make_search_url(q, mode, **queryargs)
        page = urllib2.urlopen(url)
        return page.read()

现在我们有一个方法,您可以调用该方法从您的查询中构建一个URL,在该URL处查找资源,并从该资源返回数据。所以现在我们接近了。你可以这样称呼它:

data = ts.search('appliance', type='post')

然而,仍然有一个问题。那type='post'什么也做不了。您将其传递给search。然后search将其传递给make_search_url。它将它传递给format。然后,由于格式字符串中没有名为type的占位符,它什么也不做。在

我不知道你想用这个来做什么。如果你想让它对请求使用POST而不是GET…那么首先不应该在URL中放入查询字符串。如果你想让它做一些不同的事情,我猜不出会是什么。在

这里最简单的解决方法是,如果你不知道为什么要这么做,那就不要这样做:

data = ts.search('appliance')

现在这将返回404,因为在末尾粘贴XXXXXX|XXXXX显然行不通。它必须是access_token=XXXXXXXX的形式,而{}必须是从OAuth身份验证中获得的令牌,这在任何地方都没有做过。在

相关问题 更多 >