图片属性格式使用run with friends fb应用程序

2024-06-10 18:42:57 发布

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

我正在编辑Runwithfriends FB示例应用程序来构建我自己的一个。它运行得很好,我在这里和那里做了一些改变。我休息了大约两个星期,但是现在当我试图访问这个应用程序时,我得到了一个奇怪的python错误:

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\app\主.py在init_facebook中(self=<;main.RecentRunHandler对象>;) 316用户编号=facebook.user_id,friends=朋友, 317访问令牌=facebook.access_令牌,name=me[u'name'], =>;318电子邮件=我。快(u'email'),picture=我[u'picture']) 319用户.put() 320键错误除外,例如:

<;。剪下部分。>

类'谷歌.appengine.api.数据存储_错误.BadValueError“>;:属性图片必须是str或unicode实例,而不是dict args=('属性图片必须是str或unicode实例,而不是dict',) message='属性图片必须是str或unicode实例,而不是dict'”

我知道这是一个非常普遍的错误,但它指向以下代码。这个代码一直在那里,我从来没有碰过它。我现在真的不知道还能去哪儿找——我已经搜遍了,但找不到任何线索。抱歉,如果这仍然是太宽泛,但如果你能告诉我,我可以提供什么其他信息来调试这个:-(

def init_facebook(self):
    """Sets up the request specific Facebook and User instance"""
    facebook = Facebook()
    user = None

    # initial facebook request comes in as a POST with a signed_request
    if u'signed_request' in self.request.POST:
        facebook.load_signed_request(self.request.get('signed_request'))
        # we reset the method to GET because a request from facebook with a
        # signed_request uses POST for security reasons, despite it
        # actually being a GET. in webapp causes loss of request.POST data.
        self.request.method = u'GET'
        self.set_cookie(
            'u', facebook.user_cookie, datetime.timedelta(minutes=1440))
    elif 'u' in self.request.cookies:
        facebook.load_signed_request(self.request.cookies.get('u'))

    # try to load or create a user object
    if facebook.user_id:
        user = User.get_by_key_name(facebook.user_id)
        if user:
            # update stored access_token
            if facebook.access_token and \
                    facebook.access_token != user.access_token:
                user.access_token = facebook.access_token
                user.put()
            # refresh data if we failed in doing so after a realtime ping
            if user.dirty:
                user.refresh_data()
            # restore stored access_token if necessary
            if not facebook.access_token:
                facebook.access_token = user.access_token

        if not user and facebook.access_token:
            me = facebook.api(u'/me', {u'fields': _USER_FIELDS})
            try:
                friends = [user[u'id'] for user in me[u'friends'][u'data']]
                user = User(key_name=facebook.user_id,
                    user_id=facebook.user_id, friends=friends,
                    access_token=facebook.access_token, name=me[u'name'],
                    email=me.get(u'email'), picture=me[u'picture'])
                user.put()
            except KeyError, ex:
                pass # ignore if can't get the minimum fields

    self.facebook = facebook
    self.user = user

Tags: nameinselftokenidgetfacebookif
2条回答

这是获取图片的方法:

picture=me[u'picture'][u'data'][u'url']

可能与October 2012 Breaking Changes有关,引用:

/picture connection will return a dictionary when a callback is specified

We will start returning a dictionary containing the fields url, height, width, and is_silhouette when accessing the /picture connection for an object and specifying a callback property. Currently we just return the picture URL as a string.

因此,在当前使用picture=me[u'picture']的代码中,请尝试访问picture字典的url属性。(如果它有一个;我不能确定这是否适用,因为我不知道您的代码是否会被视为指定了回调属性)

如果我的假设是正确的,那么您也可以按照路线图中的描述启用迁移;但这只会使您的应用程序在10月3日之前以旧方式工作,所以最好立即尝试修复它。在

相关问题 更多 >