2013-08-07 45 views
0

我有這裏描述的代碼。 我需要在日曆中創建大量活動。在Python API中使用2段python

我無法找到使其工作的方法。使用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 
+0

代碼的驗證部分看起來是正確的。你執行什麼錯誤? –

+0

@ jay-lee,你好傑伊,我已經更新了我的問題。希望它是有道理的 – Djanux

回答

1

的錯誤消息表明您使用的client_secrets.json不是安裝的應用程序。嘗試在API控制檯中重新創建客戶端ID,並確保指定它是已安裝的應用程序。

+0

傑伊李,你是絕對正確的!謝謝您的幫助 – Djanux