API Сайтов Google + OAuth2 (в Appengine) - PullRequest
       30

API Сайтов Google + OAuth2 (в Appengine)

3 голосов
/ 09 сентября 2011

Я пытался использовать библиотеку Python для доступа к API сайтов Google.

На первом шаге пользователь должен авторизовать наше приложение, он рекомендует использовать OAuth2 и предоставляет библиотеку, которую можно найти здесь .

В концеВ процессе авторизации вы получите объект OAuth2Credentials.

Проблема в том, что когда я пытаюсь сделать запросы к API Сайтов Google, скажем, я делаю:

import gdata.sites.client
client = gdata.sites.client.SitesClient(site=None, domain='mydomain.com')

Я не знаю, как использовать объект OAuth2Credentials.

Ответы [ 2 ]

10 голосов
/ 27 декабря 2012

Я потратил немало часов, пытаясь сделать именно это, и, наконец, нашел ответ в этом сообщении в блоге:

https://groups.google.com/forum/m/#!msg/google-apps-developer-blog/1pGRCivuSUI/3EAIioKp0-wJ

Вот простой пример использования oauth2client вместе с API gdata для доступа к Сайтам Google, включая «Monkey Patching»:

from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import run
import gdata.sites.client
import gdata.sites.data

SCOPE = 'https://sites.google.com/feeds/'

# client_secrets.json is downloaded from the API console:
# https://code.google.com/apis/console/#project:<PROJECT_ID>:access
# where <PROJECT_ID> is the ID of your project

flow = flow_from_clientsecrets('client_secrets.json',
                               scope=SCOPE,
                               redirect_uri='http://localhost')

storage = Storage('plus.dat')
credentials = storage.get()

if credentials is None or credentials.invalid:
    credentials = run(flow, storage)

# 'Monkey Patch' the data in the credentials into a gdata OAuth2Token
# This is based on information in this blog post:
# https://groups.google.com/forum/m/#!msg/google-apps-developer-blog/1pGRCivuSUI/3EAIioKp0-wJ

auth2token = gdata.gauth.OAuth2Token(client_id=credentials.client_id,
  client_secret=credentials.client_secret,
  scope=SCOPE,
  access_token=credentials.access_token,
  refresh_token=credentials.refresh_token,
  user_agent='sites-test/1.0')

# Create a gdata client

client = gdata.sites.client.SitesClient(source='sites-test',
                                        site='YOUR.SITE',
                                        domain='YOUR.DOMAIN',
                                        auth_token=auth2token)

# Authorize it

auth2token.authorize(client)

# Call an API e.g. to get the site content feed

feed = client.GetContentFeed()

for entry in feed.entry:
    print '%s [%s]' % (entry.title.text, entry.Kind())
2 голосов
/ 28 июня 2014

Мое приложение использует ключ .p12 вместо потока, вот как я заставил его работать после некоторой обработки:

from oauth2client.client import SignedJwtAssertionCredentials
import gdata.sites.client
import gdata.sites.data

scope = 'https://sites.google.com/feeds/'
key_file = 'xxxxxxxxxxxxxxxxxxx.p12'

with open(key_file) as f:
    key = f.read()

credentials = SignedJwtAssertionCredentials(
        'xxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com',
        key,
        sub='aleh@vaolix.com',
        scope=[scope])

auth2token = gdata.gauth.OAuth2TokenFromCredentials(credentials)
client = gdata.sites.client.SitesClient(source='sites-test',
                                        domain='mydomain.com')
auth2token.authorize(client)

feed = client.GetSiteFeed()

for entry in feed.entry:
    print entry.title.text
...