7

Google Calendar APIにアクセスして、Pythonで項目を挿入したいと考えています。 サービスアカウントをGoogle APIコンソールに作成し、秘密鍵を追加してダウンロードしました。GoogleカレンダーAPI - サービスアカウントで自分のカレンダーにアクセスする

しかし、自分のカレンダーを変更しようとすると、同じアカウントにありますが、次のエラーメッセージが表示されます。読むことができます。

コードは

import httplib2 

from oauth2client.client import SignedJwtAssertionCredentials 
from apiclient.discovery import build 

event = { 
     'summary' : 'Appointment', 
     'location' : 'Somewhere', 
     'start' : { 
        'dateTime' : '2012-09-03T10:00:00.000-07:00' 
        }, 
     'end' : { 
       'dateTime' : '2012-09-03T10:25:00.000-07:00' 
        } 
} 


f = file("key.p12", "rb") 
key = f.read() 
f.close() 

credentials = SignedJwtAssertionCredentials(
               service_account_name='[email protected]', 
               private_key=key, 

               scope='https://www.googleapis.com/auth/calendar'            
              ) 

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

service = build('calendar', 'v3', http=http) 
request = service.events().insert(calendarId='[email protected]', body=event) 

response = request.execute() 

print(response) 

エラーメッセージです:

apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?alt=json returned "Forbidden"> 

私は、このサービスのアカウントで自分のデータにアクセスできることを考えているだろうが、ではないように思われます。

Googleはサービスアカウントが作成された

した後、あなたはまた、秘密鍵に関連付けられたクライアントIDへのアクセス を持っているだろうと主張しています。アプリケーションをコーディングする場合は、両方とも が必要です。 - https://developers.google.com/accounts/docs/OAuth2?hl=de#scenarios

私は約2時間をグーグルが、非常に悪い文書化しているようです。ユーザーインタラクション(別名3足のOAuth)なしでGoogleカレンダーAPI経由で新しいイベントを挿入する方法はありますか、それを修正する方法はありますか?

廃止されたClientLogingが見つかりました。なぜGoogleはそれを難し​​くしていますか?

種類は、私は1つは、JSONに結果の資格情報をダンプし、あなたがそれらを必要とするたびにそれらを読み込む場合は3段のOAuthが動作することを実現

答えて

1

について。

だから、フローは次のとおりです。 このスクリプトと同じフォルダにGoogle APIに述べたように、あなたのたclient_secrets.jsonを追加します。プロンプトで指定されたURLからキーを取得します。プロンプトの要求に応じて入力してください。パーティー!11。私はこれらの信用証明書が永遠に続くことを望む。

from oauth2client.client import flow_from_clientsecrets 

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', 'wr') as f: 
    f.write(credentials.to_json()) 

さて、アプリケーション自体に:

def __create_service(): 
    with open('credentials', 'rw') as f: 
     credentials = Credentials.new_from_json(f.read()) 

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

    return build('calendar', 'v3', http=http) 

サービスオブジェクトを取得するには、一つは今

service = __create_service() 

を呼び出すことができ、その上にAPIを使用しています。

+0

私はurソリューションに従っており、私の資格情報はファイルにはありません。そのファイルからそれらのファイルを読み込み、 'credentials.authorize()'を使う方法を教えてください。 – user26

+0

私は古い例を書いています。https://github.com/Rentier/ReindeerIkengaで見つけることができます – reindeer

関連する問題