« プロジェクト終了報告:共有 | トップページ | iBook Authorでパノラマ拝見 »

Google APIs

Google APIs

概要

Googleは自社で開発しているAPIを一般公開して、自社のサービス(例えばGoogleCalendar、GoogleDocs等)を利用したアプリケーションを作成できるようにしています。
それら公開されているAPI群についてのTipsをこちらに記載します。

APIはgoogle codeに公開されています。
利用するにはこちらから公開ファイルをダウンロードする必要があります。
もしかしたらMaven2でも対応しているかも知れませんが不明です。

■GoogleCalendarAPI

Google カレンダーの予定、カレンダー、ガジェットを作成、管理します。

http://code.google.com/intl/ja/apis/calendar/

■GoogleDocumentsListAPI

Google ドキュメントのリストをアプリケーションから表示、更新します。

http://code.google.com/intl/ja/apis/documents/

Google Docs から存在するドキュメントの一覧を取得したり、名称を指定してドキュメントのURLを取得するのに利用しました。
こちら以外に行いたいことがある場合は、ドキュメントを参照して下さい。

■共通処理

他のAPIと同様にサービスクラスのインスタンスを生成し、認証情報を設定します。

 // Prepare Spreadsheet Service
 // Serviceを作成する時はアプリケーションIDが必要です。アプリケーションIDは任意の文字列で問題ありません。
 DocsService docsSvc = new DocsService("ApplicationID");
 
 // setUserCredentialsを実行して認証情報をセットします。他のパラメータのものもあるので適宜利用して下さい。
 docsSvc.setUserCredentials("username", "password");
■ドキュメントリストの取得

こちらのAPIでドキュメントと扱われるものは以下の通りです。

  • spreadsheet
  • presentation
  • word processor document
  • PDF
  • arbitrary file
  • folder

 // 非共有ドキュメントの一覧を取得する為のURLです。
 URL feedUri = new URL("https://docs.google.com/feeds/default/private/full/");
 // 以下のserviceは認証設定が行われたDocsServiceになります。
 DocumentListFeed feed = service.getFeed(feedUri, DocumentListFeed.class);
 
 // 取得したドキュメントのリストをループで走査します。
 for (DocumentListEntry entry : feed.getEntries()) {
   
   // ドキュメントの親ディレクトリが存在した場合、
   // ドキュメントがラベル付けされているディレクトリを全て出力します。
   if (!entry.getParentLinks().isEmpty()) {
     System.out.println("  Parent folders: ");
     
     // ドキュメントのディレクトリ階層はラベルによって管理されているので、
     // ひとつのドキュメントに対して複数のラベルを設定することが可能です。
     for (Link link : entry.getParentLinks()) {
       System.out.println("    --" + link.getTitle() + " - " + link.getHref());
     }
   }
 
   // ドキュメントの最新閲覧日を取得して表示します。
   DateTime lastViewed = entry.getLastViewed();
   if (lastViewed != null) {
     System.out.println("  last viewed: " + lastViewed.toUiString());
   }
 
   // ドキュメントの最新更新日を取得して表示します。
   LastModifiedBy lastModifiedBy = entry.getLastModifiedBy();
   if (lastModifiedBy != null) {
     System.out.println("  updated by: " +
         lastModifiedBy.getName() + " - " + lastModifiedBy.getEmail());
   }
 }
■条件を指定してドキュメントの一覧を取得する場合
 // 非共有のドキュメントの一覧を取得するURLです。
 URL feedUri = new URL("https://docs.google.com/feeds/default/private/full/");
 
 // ドキュメントの条件を指定するクエリです。
 DocumentQuery query = new DocumentQuery(feedUri);
 
 // ドキュメントのタイトルに"Test"が含まれていることを指定する場合に追加します。
 query.setTitleQuery("Test");
 // タイトル名が"Test"と完全一致することを指定します。
 // setTitleExact(false)の場合は、LIKE検索となります。
 query.setTitleExact(true);
 // ドキュメントの内容に"Something to search for"が含まれていることを指定する場合に追加します。
 query.setFullTextQuery("Something to search for");
 // 取得結果は10件までとします。
 query.setMaxResults(10);
 
 // 認証設定がされているDocsServiceに実行します。
 DocumentListFeed feed = client.getFeed(query, DocumentListFeed.class);

■GoogleSpreadsheetsDataAPI

Google スプレッドシートのコンテンツをアプリケーションから表示、更新できます。

http://code.google.com/intl/ja/apis/spreadsheets/

■Google スプレッドシートについて

スプレッドシートはAtomFeedを利用しており、スプレッドシートのファイル、シート、行、セル、全てAtomFeedを利用してデータを操作します。

  • 極端な話ですがセルのA1を操作するにはA1のAtomFeedのURLがわかっていれば操作できます。
  • 実際には、ドキュメントのリストからスプレッドシートのURLを取得し、そのスプレッドシートにぶら下がっているシートのUrlを取得し、さらにシートにぶら下がっている行のUrlを取得し、タグ(見出し行で1行目の値)を指定してセルの値を取得する、といったように指定したいセルの位置までもぐっていくようなつくりをすることになります。

ドキュメントが存在するのでこちらを参照しつつ実装していくことになるかと思います。

■共通処理

他のAPIと同様にサービスクラスのインスタンスを生成し、認証情報を設定する必要があります。

// Prepare Spreadsheet Service
 // Serviceを作成する時はアプリケーションIDが必要です。アプリケーションIDは任意の文字列で問題ありません。
 SpreadsheetService ssSvc = new SpreadsheetService("ApplicationID");
 
 // setUserCredentialsを実行して認証情報をセットします。他のパラメータのものもあるので適宜利用して下さい。
 ssSvc.setUserCredentials("username", "password");
■参照
  • URLを指定してスプレッドシートにアクセスすることになります。
  • GoogleのDocsには公開レベルが存在するので、共有ファイルと非共有ファイルでURLのパターンが異なりますので注意して下さい。

以下はユーザーが持つ全ての非共有のスプレッドシートを取得する方法になります。

 URL metafeedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
 
 // 以下のserviceは SpreadsheetService です。
 SpreadsheetFeed feed = service.getFeed(metafeedUrl, SpreadsheetFeed.class);
 
 // 全てのスプレッドシートのエントリを取得します。
 List spreadsheets = feed.getEntries();
 for (int i = 0; i < spreadsheets.size(); i++) {
   SpreadsheetEntry entry = spreadsheets.get(i);
   // スプレッドシートのタイトルを出力します。
   System.out.println("\t" + entry.getTitle().getPlainText());
 }

シートを取得するには以下のように、スプレッドシートのエントリから取得します。

 List worksheets = spreadsheetEntry.getWorksheets();
 for (int i = 0; i < worksheets.size(); i++) {
   WorksheetEntry worksheet = worksheets.get(i);
   // シート名を取得します。
   String title = worksheet.getTitle().getPlainText();
   // シートの行数を取得します。
   int rowCount = worksheet.getRowCount();
   // シートの列数を取得します。
   int colCount = worksheet.getColCount();
   // 取得したシートの情報を出力します。
   System.out.println("\t" + title + "- rows:" + rowCount + " cols: " + colCount);
 }

行を取得するには以下のようにシートからエントリを取得します。

 URL listFeedUrl = worksheetEntry.getListFeedUrl();
 // 以下のservice は SpreadsheetService です。
 ListFeed feed = service.getFeed(listFeedUrl, ListFeed.class);
 for (ListEntry entry : feed.getEntries()) {
   // 列のタイトルを取得し、出力します。
   System.out.println(entry.getTitle().getPlainText());
   // 列が持つ値を走査します。列の値とは、2行目以降のセルに登録されている内容となります。
   for (String tag : entry.getCustomElements().getTags()) {
     // 列が持つ値を出力します。
     System.out.println("  <">

図解すると以下のようなイメージとなります。 ちょっとうろ覚えなので、ListFeed以降の表現に誤りがあるかもしれません。

Google_spreadsheet_image

ご支援、宜しくお願いします!←ポチッ!とブログランキング!

|

« プロジェクト終了報告:共有 | トップページ | iBook Authorでパノラマ拝見 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Google APIs:

« プロジェクト終了報告:共有 | トップページ | iBook Authorでパノラマ拝見 »