Google Data API - Попытка обменять authsub_token на session_token с помощью updatetosessiontoken приводит к «NonAuthSubToken» - PullRequest
2 голосов
/ 04 июля 2011

Я использую именно код в примерах отсюда: http://code.google.com/apis/picasaweb/docs/1.0/developers_guide_python.html#Auth

Все еще без кубиков.

Вот точный код, который я получил (это все работает навеб-сервер):

#!/usr/bin/python

import gdata.photos.service
import gdata.media
import gdata.geo

print "content-type:text/html\n"

def GetAuthSubUrl():
  next = 'http://my_domain.com/foo/connect_picasa.cgi'
  scope = 'http://picasaweb.google.com/data/'
  secure = False
  session = True
  gd_client = gdata.photos.service.PhotosService()
  return gd_client.GenerateAuthSubURL(next, scope, secure, session);

authSubUrl = GetAuthSubUrl();
print '<a href="%s">Login to your Google account</a>' % authSubUrl

А затем на my_domain/foo/connect_picasa.cgi у меня есть:

#!/usr/bin/python

import gdata.photos.service
import gdata.media
import gdata.geo
import cgi

parameters = cgi.FieldStorage()
authsub_token = parameters['token']

print "content-type:text/html\n"

#debugging
print authsub_token

gd_client = gdata.photos.service.PhotosService()
gd_client.auth_token = authsub_token
gd_client.UpgradeToSessionToken()

#more debugging
print "BLINKENLICHTEN"

Он выручает на gd_client.UpgradeToSessionToken() с: raise NonAuthSubToken

Может быть, я упускаю что-то очевидное здесь?Выполнение parameters['token'] и parameters['token'].value [что кажется мне более очевидным] приводит к одному и тому же.Установка для authsub_token значения "tacos" также приводит к той же ошибке, из-за чего я полагаю, что мой authsub_token просто недействителен.

1 Ответ

5 голосов
/ 04 июля 2011

Я отвечаю на свой вопрос, чтобы другие могли извлечь из него пользу:

Документация Google устарела. Нашел ответ здесь: http://www.mail-archive.com/google-calendar-help-dataapi@googlegroups.com/msg09180.html

Вот как должен выглядеть код:

Для требуется фактическое значение. Так что либо передайте ему значение .value, либо используйте параметры.getvalue ("токен")

authsub_token = parameters['token'].value
print "content-type:text/html\n"

gd_client = gdata.photos.service.PhotosService()

Это важная часть. Используйте gd_client.SetAUthSubToken, а не gd_client.authsubtoken =

gd_client.SetAuthSubToken(authsub_token) 
gd_client.UpgradeToSessionToken()

Надеюсь, это поможет кому-нибудь еще. Это был настоящий хедбэнгер.

...