2

カレンダーから Python プログラムにイベントのリストを取得したいのですが、Google に与えられた oauth の大量のドキュメントを理解できません。

これは私が試しているコードです。その半分のビットとピース。誰でもこれを修正するのを手伝ってもらえますか

import gflags
import httplib2

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
from oauth2client.client import flow_from_clientsecrets


flow = flow_from_clientsecrets('client_secrets.json',
                               scope='https://www.googleapis.com/auth/calendar',
                               redirect_uri='http://example.com/auth_return')

http = httplib2.Http()
http = credentials.authorize(http)

service = build(serviceName='calendar', version='v3', http=http,
       developerKey='AI6456456456456456456456456456yKhI')

events = service.events().list(calendarId='645645654646a2cb4fl164564564@group.calendar.google.com').execute()
print events

問題は、フロー オブジェクトから資格情報を取得する方法です。

API コンソールでプロジェクトを作成し、カレンダー API を追加しました。それらをclients.jsonに入れます。

ブラウザのリダイレクトと、アクセスしたいカレンダーは必要ありません。ユーザーが自分のカレンダーにアクセスするのではなく、自分のカレンダーにアクセスして、自分のイベントをウェブサイトに投稿できるようにしたい.

カレンダーにアクセスするために Oauth を使用する必要がある理由がわかりません

4

1 に答える 1

2

私が間違っていなければ、oAuth なしでログインできる v2 API (非推奨) を使用できます。v3の場合、これは私が認証フローのために持っているものであり、機能します(注、私は使用しませんflow_from_clientsecrets):

import gflags
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow

flags = gflags.FLAGS
flow = OAuth2WebServerFlow(
      client_id = 'some_id.apps.googleusercontent.com',
      client_secret = 'some_secret-32ijfsnfkj2jf',
      scope='https://www.googleapis.com/auth/calendar',
      user_agent='Python/2.7')

# to get a link for authentication in a terminal,
# which needs to be opened in a browser anyway
flags.auth_local_webserver = False

# store auth token in a file 'calendar.dat' if it doesn't exist,
# otherwise just use it for authentication
base = os.path.dirname(__file__)
storage = Storage(os.path.join(base, 'calendar.dat'))
credentials = storage.get()
if credentials is None or credentials.invalid == True:
    credentials = run(FLOW, storage)

http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='calendar', version='v3', http=http,
   developerKey='AI6456456456456456456456456456yKhI')

そして、service通信に使用します。このコードには一部のインポートが含まれていない可能性があることに注意してください。私の記憶が正しければ、プライマリ カレンダーにアクセスしている場合は、カレンダー ID を提供する必要はありません。

役に立てば幸いです。

于 2013-08-19T07:32:21.117 に答える