0

ここで説明するコードがあります。カレンダーにたくさんのイベントを作成する必要があります。

私はそれを機能させる方法を見つけることができません。2本足の使用は非推奨のようです

import sys
import httplib2
from  rfc3339 import rfc3339
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run
import pytz
import datetime
import time
start_zone = pytz.timezone('Europe/London')
end_zone = pytz.timezone('Europe/Oslo')

start_time = datetime.datetime(2013,8,13,15,0, tzinfo=start_zone)
end_time = datetime.datetime(2013,8,16,19,0, tzinfo=end_zone)


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

storage = Storage('credentials.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
  credentials = run(flow, storage)

http = httplib2.Http()
http = credentials.authorize(http)
service = build('calendar', 'v3', http=http)

try:

  event = {
    'start': {
      'dateTime': start_time
      },
    'end': {
      'dateTime': end_time
      },
    "summary": "New event",
    "location": "Paris, FRANCE"
  }
  service.events().insert(calendarId='primary', body=event).execute()
  print "END"
except AccessTokenRefreshError:
  print ('Credentials have been revoked')

この方法でコードを更新しました(リダイレクトがないため)

#!/usr/bin/python
import sys
import httplib2
from  rfc3339 import rfc3339
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run
import pytz
import datetime
import time
start_zone = pytz.timezone('Europe/London')
end_zone = pytz.timezone('Europe/Oslo')

start_time = datetime.datetime(2013,8,13,15,0, tzinfo=start_zone)
end_time = datetime.datetime(2013,8,16,19,0, tzinfo=end_zone)

flow = flow_from_clientsecrets('client_secrets.json',
    scope='https://www.googleapis.com/auth/calendar',
    redirect_uri='urn:ietf:wg:oauth:2.0:oob')

auth_uri = flow.step1_get_authorize_url()
print('Visit this site!')
print(auth_uri)
code = raw_input('Insert the given code!')
credentials = flow.step2_exchange(code)
print(credentials)

with open('credentials.dat', 'wr') as f:
  f.write(credentials.to_json())

storage = Storage('credentials.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
  credentials = run(flow, storage)

http = httplib2.Http()
http = credentials.authorize(http)
service = build('calendar', 'v3', http=http)

try:
  event = {
    'start': {
      'dateTime': start_time
      },
    'end': {
      'dateTime': end_time
      },
    "summary": "New event",
    "location": "Paris, FRANCE"
  }
  service.events().insert(calendarId='primary', body=event).execute()
  print "END"
except AccessTokenRefreshError:
  print ('Credentials have been revoked')

そのため、スクリプトを実行すると、ログインを求めるウィンドウ広告が開きます。そのため、Gmailのユーザー名/パスワードを入力すると、その後次のエラーが発生します。

Error: redirect_uri_mismatch
The redirect URI in the request: urn:ietf:wg:oauth:2.0:oob did not match a registered redirect URI 
4

1 に答える 1

1

エラー メッセージは、使用した client_secrets.json がインストール済みのアプリケーション用ではないことを示しています。API コンソールでクライアント ID を再作成し、それがインストール済みのアプリケーションであることを確認してください。

于 2013-08-07T18:21:01.037 に答える