CodeZine(コードジン)

特集ページ一覧

Google Apps ScriptでスプレッドシートからGoogleドキュメント以外のサービスにアクセスする

Google Apps ScriptによるGoogleドキュメントの操作(2)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/04/26 14:00

目次

Webページのフェッチ

 メールの送信は、スプレッドシートの内容を外部へ送信するのに役立ちますが、反対に「外部のデータをスプレッドシートに取り込む」ということはできないのでしょうか。

 もし、取得したいデータがWeb上に公開されているのであれば、そのアドレスからデータを取得し、処理することが可能です。「UrlFetchApp」というオブジェクトを利用することで、特定のURLからデータを取得することができるのです。通常、JavaScriptでは、スクリプトが設置されたサイト外へのアクセスは制限されていますが、Google Apps Scriptではこの部分をサーバー側で処理することで、サイト外のデータを得ることができます。これは次のように行います。

UrlFetchApp.fetch( アドレス )

 UrlFetchAppに用意されている「fetch」メソッドで、引数にアクセス先のアドレスを指定して呼び出すことで、そのサイトからのデータを取得できます。では簡単な利用例として、WebのURLを入力すると、そのページにアクセスし、ソースコードに含まれているURL(HTTP/HTTPSのみ)をシートにすべて書き出す、というスクリプトを考えてみましょう。

function getUrlData(){
  var input = Browser.inputBox("URLを入力:");
  if (input != "" & input != "cancel"){
    var data = UrlFetchApp.fetch(input);
    var content= data.getContentText();
    var arr = content.match(/(http|https):\/\/[\w.\/-?=&]+/g);
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var range = sheet.getRange(1,1,arr.length,1);
    for(var i = 0;i < arr.length;i++)
      range.getCell(i + 1, 1).setValue(arr[i]);
    Browser.msgBox("URLを出力しました。");
  }
}
図11 URLを入力すると、そのWebページにアクセスし、HTTP/HTTPSで始まるアドレスをすべて抜き出してシートに書き出す。
図11 URLを入力すると、そのWebページにアクセスし、HTTP/HTTPSで始まるアドレスをすべて抜き出してシートに書き出す。

 Browser.inputBoxでURLを入力してもらい、それを引数に指定してUrlFetchApp.fetchを呼び出しています。このfetchで取得されるのは、「HTTPResponse」というオブジェクトです。これはアクセスして得られるHTTPレスポンスを管理するオブジェクトです。得られたHTTPResponseからデータを取得するには、以下の2つのメソッドが用意されています。

《HTTPResponse》.getContent()
《HTTPResponse》.getContentText()

 getContentは、バイナリデータを各バイトごとに配列にまとめたものが返されます。getContentTextは、テキストとして値を返します。ここではgetContentTextでテキストとして取得し、それを正規表現でURLのテキスト部分だけを取り出しています。後は、SheetのgetRangeで必要な数だけセルを取得し、パターンマッチしたテキストを順に書き出すだけです。

 このように、UrlFetchApp.fetchとシートの操作を組み合わせることで、外部のWebサイトから情報を収集しシートに整理するようなスクリプトが作成可能になります。スプレッドシートを、単に「ユーザーが自分でデータを書いて計算するもの」だけでなく、さまざまなデータを収集し整理するためのツールとして活用できるようになります。

Googleコンタクトの利用

 GoogleのGmailなどでは、よく利用するメールアドレスなどの情報を「連絡先」として管理しています。これは「Googleコンタクト」というGoogleのサービスを利用しています。Googleコンタクトは、単にメールアドレスだけでなく、利用者の名前や住所、電話番号、誕生日などさまざまな個人情報を管理することができます。

 このGoogleコンタクトの情報もGoogle Apps Scriptから利用することができます。ログインしているユーザーのGoogleコンタクトにアクセスするための「ContactsApp」というオブジェクトが用意されており、そこから必要な情報を取り出していきます。例えば、Googleコンタクトに保管されているグループやユーザーの情報を取得する場合、次のようなメソッドを利用します。

グループの取得
ContactsApp.getContactGroups()

 全グループを配列として取得します。各グループの情報は、「ContactGroup」というオブジェクトとしてまとめられています。ここから、グループ名や、グループに保管されているユーザー情報などを得られます。

ユーザーの取得
ContactsApp.getAllContacts()
《ContactGroup》.getContacts()

 全ユーザーの情報を取得するには、ContactsAppの「getAllContacts」を使います。またグループに含まれているユーザーは、ContactGroupの「getContacts」を使います。いずれも、ユーザー情報を管理する「Contact」オブジェクトの配列が返されます。

 これらのメソッドにより、ログインユーザーのGoogleコンタクトの情報を自由に取得できます。

 では実際に簡単な例をあげましょう。Googleコンタクトからグループとそれに含まれるユーザーの情報を取得し、シートに書きだします。初めてアクセスする際、Googleコンタクトへのアクセスを許可するための認証画面がスクリプトエディタに表示されますので、ここでアクセスを許可してください。これを拒否するとデータの取得は行えません。

function getContactsData(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var groups = ContactsApp.getContactGroups();
  for(var i = 0;i < groups.length;i++){
    var group = groups[i];
    var contacts = group.getContacts();
    var range = sheet.getRange(1,i + 1,contacts.length + 1,1);
    range.getCell(1,1).setValue(group.getGroupName());
    for(var j = 0;j < contacts.length;j++){
      var contact = contacts[j];
      range.getCell(j + 2,1).setValue(contact.getFullName() + "\n" + contact.getPrimaryEmail());
    }
  }
}
図12 Gmailの連絡先にアクセスし、グループごとに登録されている全ユーザー名とメールアドレスを書き出す。
図12 Gmailの連絡先にアクセスし、グループごとに登録されている全ユーザー名とメールアドレスを書き出す。

 ここでは、各ユーザーの名前(フルネーム)とメインのメールアドレスだけを取得し表示してますが、それ以外の情報も同様に取り出すことは可能です。ContactsApp.getContactGroupsでContactGroupの配列を取得し、繰り返しを使ってその各グループからgetContactsでContact配列を取得します。ここでは、「getFullName」「getPrimaryEmail」というメソッドで、各Contactのフルネームとデフォルトメールアドレスを取り出してセルに書き出しています。Contactに用意されている、各種の情報を取得するためのメソッドは次のようなものがあります。

Contactのメソッド
メソッド名 概要
getFullName 名前(フルネーム)を返します。
getPrimaryEmail デフォルトのメールアドレスを返します。
getEmailAddresses 登録されているすべてのメールアドレスを配列で返します。
getHomeAddress 自宅用メールアドレスを返します。
getWorkAddress 仕事用メールアドレスを返します。
getPager ページャー(ポケベル)番号を返します。
getHomeFax 自宅用FAX番号を返します。
getWorkFax 仕事用FAX番号を返します。
getHomePhone 自宅用電話番号を返します。
getWorkPhone 仕事用電話番号を返します。
getMobilePhone 携帯電話番号を返します。
getNotes ノート(メモ)を返します。

 これらは、すべての項目に必ずしも値が用意されているわけではないので注意が必要です。実際に、それぞれのGmailで連絡先に登録されているデータを確認してみると分かることですが、大抵は名前とメールアドレス程度しかデータは記録されていないでしょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:速習Google Apps Script

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5