SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend FrameworkでGoogleアプリケーションを使い倒す

PHPアプリでGoogle Spreadsheetをデータベースとして利用しよう

Zend FrameworkでGoogleアプリケーションを使い倒す(5)


  • X ポスト
  • このエントリーをはてなブックマークに追加

ワークシートのID取得

 スプレッドシートのキーを取得したら、今度はスプレッドシート内のワークシートのキーを取得します。

 これも汎用的な処理ですので自作関数を用意しました。引数には対象のスプレッドシートのキーとワークシート名を与えます。

[リスト7]index.php(抜粋)
// 関数:ワークシートのキー検索
function getWorksheetKey($service, $spreadsheetKey, $worksheetname){
    // クエリの作成
    $query = new Zend_Gdata_Spreadsheets_DocumentQuery();①
    $query->setSpreadsheetKey($spreadsheetKey);

    // ワークシートフィードの取得
    $feed = $service->getWorksheetFeed($query);②

    // ワークシートの検索
    $i = 0;
    foreach($feed->entries as $entry) {③
        $worksheetId = split('/', $feed->entries[$i]->id->text);④
        if(strcmp($entry->title->text, $worksheetname)==0){⑤
            $returnKey = $worksheetId[8];
        }
        $i++;
    }
    return $returnKey;
}

1. Zend_Gdata_Spreadsheets_DocumentQueryの生成

 ワークシートを取得するためには、Zend_Gdata_Spreadsheets_DocumentQueryというクエリオブジェクトに対象のスプレッドシートのキーを与える必要があります。

[リスト8]index.php(抜粋)
$query->setSpreadsheetKey($dbKey);

2. フィードの取得

 先ほどのクエリオブジェクトを引数としてgetWorksheetFeedメソッドで、対象のスプレッドシートのワークシート一覧のフィードを取得します。

3. エントリーの取得

 スプレッドシートのフィード取得時同様、エントリーを取得します。このエントリー1つがワークシートを表します。

4. ワークシートのキー取得

 スプレッドシートのエントリー取得時同様の処理方法で、ワークシートのキーを取得します。「$feed->entries[$i]->id->text」は以下の文字列を表しています。

[リスト9]index.php(抜粋)
http://spreadsheets.google.com/feeds/worksheets/【各スプレッドシート固有のキー】/private/full/【ワークシートを表すキー】

5. 対象のワークシートを取得

 引数で与えられた$worksheetnameと一致するものワークシートのエントリを検索します。今回利用するワークシートは「制御データ」と「注文一覧」、「明細」という名前が付けられています。「$entry->title->text」はワークシートの名前を表すので、それと一致するもののワークシートのキーを取得します。

注文データ数の確認

 今回のデータベース用のスプレッドシートの内容は次のようになっています。

図4:注文一覧(注文データベース)
図4:注文一覧(注文データベース)
図5:制御データ(注文データベース)
図5:制御データ(注文データベース)

 制御データの「注文数」の数字は、注文一覧の注文番号を確定させるために、注文一覧のA列の最大値を表しています。実際の数式としては「=MAX(注文一覧!A:A)」となっています。

 この数値をPHPアプリケーションで取得するためのコードが以下になります。

[リスト10]index.php(抜粋)
// 注文データ数の確認
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($dbKey);
$query->setWorksheetId($controlSheetId);①
$listFeed = $serviceSpread->getListFeed($query);
$entry = $listFeed->entries[0]->getCustomByName('注文数');③
$orderNum = $entry->getText();

1. クエリオブジェクトのパラメータ設定

 先ほどワークシートを取得する際にも使用しましたが、さらにワークシートを表すキーを引数として与えて、リストフィードを取得します。このリストフィードは対象ワークシート内の行を表します。

2. 対象データの取得

 リストフィードのエントリー一つは行一つを表します。今回は制御データシートにおけるデータ行が一行しかないことがわかっているのでentries[0]からデータを取得します。

 また、今回はカラム、つまり列が1つしかない例なのですが、どの列の情報を取得するかは以下関数を使用して指定します。

[リスト11]getCustomByNameメソッド
getCustomByName(カラム名)

注文データの登録

 データの登録を行います。今回の例ではフォームから注文データが入力されます。

[リスト12]index.php(抜粋)
// 入力データ①
$inputData = array(
    "注文番号" => $orderNum+1,
    "注文者" => $_POST['name'],
    "スペシャル" => $_POST['special'],
    "ロイヤル" => $_POST['royal'],
    "オリジナル" => $_POST['original'],
);

// データを登録する②
$serviceSpread->insertRow($inputData, $dbKey, $orderSheetId);

1. 入力データ

 入力するデータは配列として定義します。また、注意が必要なのが、配列の要素の名前としてカラム名を与える必要があることです。これが一致していないとエラーとなります。

2. データを登録する

 下記関数を用いてデータの登録をします。

[リスト13]insertRowメソッド
$serviceSpread->insertRow(入力データ, スプレッドシートのキー, ワークシートのキー);

次のページ
明細書データの登録

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend FrameworkでGoogleアプリケーションを使い倒す連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 森山 絵美 (モリヤマ エミ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4189 2009/08/31 14:27

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング