[クラウド間連携シリーズ]Google Data APIs ツールキットでForce.comとGoogle Apps連携

By |2月 25, 2010|salesforce, |


名前だけ知っててきちんと調べたことのなかったGoogle Data APIs ツールキットを調査してみました。

Google Data API Toolkit

Force.com側のAPEXコード内で使えるツールキットで、
[Force.com][GoogleApps]
の方向でGoogleAppsのAPIにアクセスしてGoogleApps上の各種データを操作できるクラス群が提供されています。操作できるGoogleAppsの内容は

  • Googleドキュメント
  • Googleスプレッドシート
  • Googleカレンダー
  • Blogger
  • 連絡先

となっています。なんでも操作できるわけではなく、それぞれに制約事項があるようなので見ていってみましょう。

環境準備

Google Data APIs Toolkit Setup
こちらの手順に従って、まずは自分のForce.com組織でGoogle Data APIsツールキットが使える状態にします。

Googleドキュメント連携

Google Documents API
Googleドキュメントはいわゆるワードファイルが作成できるサービスですが、このツールキットを使ってGoogleドキュメント上のワードファイルの内容の作成/編集などはできません。というかGoogle側でそういうAPIが提供されていないようです。このツールキットを使ったGoogleドキュメント連携でできることは、Google Documents List Data API というAPIを使って

  • Googleドキュメントに保存されているファイルリストの取得
  • Gogoleドキュメントへのファイルアップロード
  • 既に保存されているGoogleドキュメント上のファイル検索

ということが可能です。

ファイルリスト取得
サンプルソースを見ればわかりますが操作は非常に単純で

[php]
DocumentService service = new DocumentService();
service.setAuthSubToken(sessionAuthToken);
[/php]

こんな感じでDocsに接続して、

[php]
GoogleData documents = service.getDocuments(); // list all documents
documents.dump();
[/php]

こんな感じで全ファイルリストが取得できます。実に簡単。

ファイルアップロード
ファイルアップロードを行う例としては、APEXコード内でCSVファイルっぽいデータを生成してその内容をCSVファイルとしてDocsの領域に保存したり、Force.com上のドキュメントとか添付ファイルとかをDocs側に退避させたり、などが想定できます。アップロードのサンプルも

[php]
string doctitle = ‘upload sample.csv’;
string csvBody = ‘name,city,state’ + ‘\n’ + ‘bill,new york,new york’;
GoogleData sheet = service.uploadDocument(
csvBody,
doctitle,
‘text/csv’);
sheet.dump();
[/php]

こんな感じで、タイトルとファイル内容を定義するだけでOK。

ファイル検索
Googleドキュメント上のファイルを様々な条件で検索することができます。例えば、

[php]
GoogleData documents = service.getFeed (
DocumentService.feedUrl + ‘-/presentation/starred’ );
documents.dump();
[/php]

こうすることで、☆を付けたドキュメントのファイルリストが取得できますし、

[php]
GoogleData documents = service.getFeed (
DocumentService.feedUrl +
‘-/{http:%2F%2Fschemas.google.com%2Fdocs%2F2007%2Ffolders%2Femail}starred’);
documents.dump();
[/php]

こうすることで特定フォルダ内のファイルリストが取得できますし、

[php]
GoogleData documents = service.getFeed (
DocumentService.feedUrl + ‘?q=example+query’);
documents.dump();
[/php]

こうすることでファイル名をテキスト検索することができます。

注意点
使ってみた感想としては、アップロードする際のファイルサイズやファイルリストを取得する際のタイムアウト時間などはForce.com側のガバナ制限が適用されるのでその点に注意する必要があります。APEXのHTTPリクエストのタイムアウトガバナ制限は1ミリ秒~60秒で設定できてデフォルトは10秒です。ツールキット内のGoogleServiceクラスの128行目に

[php]
req.setTimeout(60000);
[/php]

と追記するとタイムアウト時間が最大値になるのである程度の負荷まで耐えられました。

Googleスプレッドシート連携

Google Spreadsheets API
ドキュメントのAPIとは違い、スプレッドシートのAPIでは実際にスプレッドシートを作成/編集することができます。例えば、Force.com側のレコードやスキーマなどの情報をスプレッドシートにはき出して保存することが可能です。各サンプルコードは省略しますが、

  • Googleスプレッドシートに保存されているファイルリストの取得
  • 既存ブック内のワークシートの追加/編集/削除
  • 既存ワークシート内データのソート、検索、列と列の追加/編集/削除
  • 既存ワークシート内データの個々のセルの検索、編集、一括編集

といったことができますので、ツールキット側から柔軟にスプレッドシートの編集を行うことが可能です。

Googleカレンダー連携

Google Calendar API
こちらもGoogleカレンダーに予定を追加/編集/削除することができますので、Salesforceのカレンダーや各種情報をGoogleカレンダーと同期することが可能です。APEXスケジューラとの合わせ技で自動同期もきっとできるはずです。

  • Googleカレンダーに保存されている全カレンダーリストの取得、自分が所有するカレンダーリストの取得
  • 新規カレンダーの作成、既存カレンダーの編集/削除
  • Googleカレンダーに登録されている予定一覧の取得、色々な条件による予定の検索
  • 予定の新規作成/編集/削除
  • バッチリクエストによるそれぞれの処理の一括処理の実行

といったことが可能で、カレンダー操作に関するほぼ全ての操作が可能となっています。

Google連絡先連携

Contacts API
ContactとはGoogleで管理できる「連絡先」のことです。連絡先にはGmailで送受信したメールアドレスや、Androidを使っている場合はその電話帳が保持されています。この連絡先とSalesforce側の取引先や取引先責任者を同期させたい、なんて場面もあるかもしれません。連絡先連携でできることは、

  • 連絡先の新規作成、編集、削除
  • 連絡先リストの全取得、検索、連絡先のプロフィール画像の取得

となっています。

ブロガー連携

Blogger API
これは省略します。すいません。。

総括

各連携を、APEXスケジューラやトリガと合わせ技で使えば、ある程度までの連携システムはForce.com内で自律的に可動させ続けられるんじゃないかなと。