1

Runwithfriends FBサンプルアプリを編集して、独自のアプリを作成しています。それはうまく機能していて、私はあちこちでいくつかの変更を加えていました。約2週間休憩しましたが、アプリにアクセスしようとすると、奇妙なPythonエラーが発生します。

C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ webapps \ ROOT \ app \ main.py in init_facebook(self = < main .RecentRunsHandler object>)316 user_id = facebook.user_id、friends = friends、317 access_token=facebook。 access_token、name = me [u'name']、=> 318 email = me.get(u'email')、picture = me [u'picture'])319 user.put()320(KeyErrorを除く)、例:

<..一部がクリップされました..>

class'google.appengine.api.datastore_errors.BadValueError'>:プロパティ画像はdict argsではなくstrまたはunicodeインスタンスである必要があります=('プロパティ画像はdictではなくstrまたはunicodeインスタンスである必要があります'、)message = 'プロパティ画像は、dictではなくstrまたはunicodeインスタンスである必要があります'"

これは非常に一般的なエラーですが、次のコードを指しています。このコードは常に存在し、私はそれに触れたことがありません。私は今、他にどこを見るべきか本当にわかりません-私は徹底的に検索しましたが、手がかりを見つけることができませんでした。申し訳ありませんが、これがまだ広すぎる場合は、これをデバッグするために他にどのような情報を提供できるか教えていただければ幸いです:-(

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
4

2 に答える 2

1

2012年10月の重大な変更と関係があるかもしれません、引用:

/ picture connectionは、コールバックが指定されたときに辞書を返します

オブジェクトの/picture接続にアクセスし、コールバックプロパティを指定すると、フィールドurl、height、width、およびis_silhouetteを含むディクショナリが返され始めます。現在、画像のURLを文字列として返すだけです。

したがって、現在使用しているコードのこの時点で、代わりにディクショナリのプロパティにpicture=me[u'picture']アクセスしてみてください。(ある場合。コードがコールバックプロパティを指定したと見なされるかどうかわからないため、これが適用可能かどうかはわかりません。)urlpicture

私の仮定が正しければ、ロードマップで説明されているように移行を有効にすることもできます。ただし、それでは10月3日まではアプリが古い方法でしか機能しないため、すぐに修正してみることをお勧めします。

于 2012-08-04T17:15:53.330 に答える
0

これは、画像を取得する方法です。

picture=me[u'picture'][u'data'][u'url']
于 2013-04-05T14:19:18.260 に答える