前回は、実際にGoogle Documentsサービスにアクセスして、
GDataEntryDocBase(エントリデータ)オブジェクト
GDataEntryDocBaseは、抽象スーパクラスであり、ドキュメントの種類ごとに、具象クラスが定義されています。
各具象クラスでは、スプレッドシートの特殊な操作以外には、インタフェースの拡張はされていないので、通常は、GDataEntryDocBaseとして使用します。
ドキュメントの種類を判定する方法
ドキュメントの種類を判定したい場合は、各エントリデータオブジェクトのカテゴリ情報を使用します。
ドキュメント種類は、GDataDocConstants.hに定数定義されています。
ドキュメントエントリデータには、それを一意に識別するためのresourceIDが付与されています。ダウンロードは、HTTP GETリクエストにて行われますが、そのときに指定するURLの中に、resourceIDを含めることによって、目的のドキュメントが識別されます。
尚、このURLは、ドキュメントの一覧を取得時に、GDataEntryDocBaseオブジェクトに設定されるため、アプリケーションでは意識する必要はありません。
以下に、同期型の処理で、ドキュメントをダウンロードする例を示します。
詳細は、以下のドキュメントを参照してください。
Developer's Guide: The Protocol - Google Documents List Data API v3.0 - Google Code
ここまで、4回に分けて、Google Documentsサービスからドキュメントデータをダウンロードするプログラムを書くための、基本的な手順を説明してきました。Google Documentsを利用するアプリケーションを作る時にご参考になれば幸いです。
すべてをまとめて読みたい場合は、こちらにアクセスしてください。
- ドキュメントの一覧をGDataFeedDocListオブジェクトとして取得する
- さらに、その中に含まれる個々のドキュメントエントリデータの属性情報(GDataEntryDocBaseオブジェクト)を取り出す
GDataEntryDocBase(エントリデータ)オブジェクト
GDataEntryDocBaseは、抽象スーパクラスであり、ドキュメントの種類ごとに、具象クラスが定義されています。
| ドキュメントの種類 | 具象クラス名 |
|---|---|
| ドキュメント(文書) | GDataEntryStandardDoc |
| スプレッドシート | GDataEntrySpreadsheetDoc |
| プレゼンテーション | GDataEntryPresentationDoc |
| PDF | GDataEntryPDFDoc |
| フォルダ | GDataEntryFolderDoc |
各具象クラスでは、スプレッドシートの特殊な操作以外には、インタフェースの拡張はされていないので、通常は、GDataEntryDocBaseとして使用します。
ドキュメントの種類を判定する方法
ドキュメントの種類を判定したい場合は、各エントリデータオブジェクトのカテゴリ情報を使用します。
ドキュメント種類は、GDataDocConstants.hに定数定義されています。
_EXTERN NSString* const kGDataCategoryFolderDoc _INITIALIZE_AS(@"http://schemas.google.com/docs/2007#folder"); _EXTERN NSString* const kGDataCategoryPDFDoc _INITIALIZE_AS(@"http://schemas.google.com/docs/2007#pdf"); _EXTERN NSString* const kGDataCategoryPresentationDoc _INITIALIZE_AS(@"http://schemas.google.com/docs/2007#presentation"); _EXTERN NSString* const kGDataCategorySpreadsheetDoc _INITIALIZE_AS(@"http://schemas.google.com/docs/2007#spreadsheet"); _EXTERN NSString* const kGDataCategoryStandardDoc _INITIALIZE_AS(@"http://schemas.google.com/docs/2007#document");以下に、判定処理の例を示します。
GDataEntryDocBase *document; // ドキュメントエントリデータ
NSString *docKindTerm = @"unknown";
// カテゴリ情報の配列の先頭に、ドキュメント種類が設定されている。
NSArray *categories = [GDataCategory categoriesWithScheme:kGDataCategoryScheme fromCategories:[document categories]];
if ([categories count] >= 1) {
docKindTerm = [[categories objectAtIndex:0] term];
}
if([kGDataCategoryFolderDoc isEqualToString:docKindTerm]) {
// フォルダに固有な処理
} else if([kGDataCategorySpreadsheetDoc isEqualToString:docKindTerm]) {
// スプレッドシートに固有な処理
} else {
// 上記以外のドキュメントに対する処理
}
ドキュメントデータのダウンロードドキュメントエントリデータには、それを一意に識別するためのresourceIDが付与されています。ダウンロードは、HTTP GETリクエストにて行われますが、そのときに指定するURLの中に、resourceIDを含めることによって、目的のドキュメントが識別されます。
尚、このURLは、ドキュメントの一覧を取得時に、GDataEntryDocBaseオブジェクトに設定されるため、アプリケーションでは意識する必要はありません。
以下に、同期型の処理で、ドキュメントをダウンロードする例を示します。
GDataEntryDocBase *targetDoc = ...; // ドキュメントエントリデータ
// ドキュメントのタイトルを、保存するファイル名として利用
NSString *fileName = [[targetDoc title] stringValue];
NSString *savePath = [NSTemporaryDirectory() stringByAppendingString:fileName];
// ドキュメントデータのURIを取得
NSString *sourceURI = [[targetDoc content] sourceURI];
NSURL *url = [NSURL URLWithString:sourceURI];
if (url) {
// 同期型でダウンロードする場合の例です。
// iPhoneSDK標準のHTTP通信のAPIを使用します。
// サービスオブジェクトから、リクエストを生成する。
GDataServiceGoogle *service = ...];
NSURLRequest *request = [service requestForURL:url
ETag:nil
httpMethod:nil];
NSURLResponse *response = nil;
NSError *error = nil;
// NSURLConnectionの同期通信リクエストを実行する。
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if (error != nil) {
// ダウンロード処理のエラーハンドリング例
NSLog(@"Error retrieving file: %@", error);
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:[error localizedDescription] message:[[error userInfo] description] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alertView show];
[alertView release];
} else {
// ダウンロードしたファイルの保存
BOOL didWrite = [data writeToFile:savePath
options:NSAtomicWrite
error:&error];
if (!didWrite) {
// ファイル保存処理のエラーハンドリング例
NSLog(@"Error saving file: %@", error);
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:[error localizedDescription] message:[[error userInfo] description] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alertView show];
[alertView release];
}
}
}
これで、目的のドキュメントをダウンロードして、ローカルのファイルとして保存することができますが、デフォルトでは、PDF以外のドキュメントは、HTMLでエクスポートされます。そのままでは扱いにくいので、Export for Google Documentsアプリケーションでは、MS Officeのドキュメントフォーマットでエクスポートするオプションを使用しています。そのためには、ドキュメントのURLに、エクスポートするフォーマットを指定するパラメタ(exportFormat)を追加します。詳細は、以下のドキュメントを参照してください。
Developer's Guide: The Protocol - Google Documents List Data API v3.0 - Google Code
ここまで、4回に分けて、Google Documentsサービスからドキュメントデータをダウンロードするプログラムを書くための、基本的な手順を説明してきました。Google Documentsを利用するアプリケーションを作る時にご参考になれば幸いです。
すべてをまとめて読みたい場合は、こちらにアクセスしてください。