2

Google Calendar API と google-api-ruby-client ライブラリのドキュメントを読んでいますが、それらを理解するのに苦労しています。

ユーザーがイベントと呼ばれるオブジェクトを作成できるようにするフロント エンドを持つ Rails アプリケーションがあり、サーバー上のデータベースにそれらを保存します。私が望むのは、これらのイベントがデータベースに保存された後、Google カレンダー API を呼び出して、Google カレンダーでイベントを作成することです (サーバーが作成し、サーバーのみがそのカレンダーを変更するためのアクセス権を持っています)。

ruby ライブラリを使用して API で認証する方法を理解するのに多くの問題があります。OAuth2 を使用しても意味がありません。ユーザーのデータには興味がないため、ユーザーに対して何も承認する必要がないからです。サービス アカウント (http://code.google.com/p/google-api-ruby-client/wiki/ServiceAccounts) を調べましたが、Google カレンダーはサービス アカウントでサポートされていないようです。

誰にもアイデアはありますか?これは私が実験していたコードです (サービス アカウントを使用):

@client = Google::APIClient.new(:key => 'my_api_key')
path_to_key_file = '/somepath/aaaaaa-privatekey.p12'
passphrase = 'my_pass_phrase'
key = Google::APIClient::PKCS12.load_key(path_to_key_file, passphrase)
asserter = Google::APIClient::JWTAsserter.new(
        'blah_blah@developer.gserviceaccount.com',
        'https://www.googleapis.com/auth/calendar',
        key)
# To request an access token, call authorize:
@client.authorization = asserter.authorize()

calendar = @client.discovered_api('calendar', 'v3')

event = {
  'summary' => 'Appointment',
  'location' => 'Somewhere',
  'start' => {
      'dateTime' => '2012-06-03T10:00:00.000-07:00'
   },
   'end' => {
      'dateTime' => '2012-06-03T10:25:00.000-07:00'
    },
    'attendees' => [
        {
          'email' => 'attendeeEmail'
        },
        #...
      ]
   }

result = @client.execute!(:api_method => calendar.events.insert,
                            :parameters => {'calendarId' => 'primary'},
                            :body => JSON.dump(event),
                            :headers => {'Content-Type' => 'application/json'})

もちろん、次のエラー メッセージが表示されます: Google::APIClient::ClientError (ユーザーは Google カレンダーにサインアップする必要があります。) サービス アカウントが Google カレンダーをサポートしていないためです。

4

3 に答える 3

1

カレンダー インスタンスをホストするには、実際の G​​oogle ユーザーが必要になると思います。ただし、自分の ID でカレンダーを作成したら、それをサービス アカウントと共有できます。カレンダーの共有設定では、サービス アカウントのメール アドレスを使用します (私のサービス アカウントは @developer.gserviceaccount.com で終わります)。適切な共有権限があれば、サービス アカウントはイベント情報を作成/変更でき、特定の ID を台無しにすることはありません。そこから、ミラーリングされたイベントを消費するために、より多くの人 (またはパブリック) とカレンダーを共有できます。

私が遭遇したもう 1 つの問題は、有効期限ごとに 1 回しかサービス アカウントを認証できないように見えることです。取得したトークンを保存して次の 1 時間再利用し、新しいトークンを取得する必要があります。

于 2012-10-24T01:41:43.170 に答える
0

Rubyについては何も知りません。しかし、基礎となる REST クエリを理解すると、問題のデバッグに役立つようです。ここに文書化しました: http://www.tqis.com/eloquency/googlecalendar.htm

于 2013-01-05T21:00:28.170 に答える