Google App ScriptsでWebAPIを使ってデータを取得してみた

f:id:tech-leverages:20181107173243j:plain

はじめに

こんにちは! 新卒1年目エンジニアのKMです。
大学では、企業や地方自治体と連携して、アプリを企画・開発していました。
今は、キャリアチケットという新卒向け就職支援の新規サービスを開発しています。
新卒1年目が新規サービスを開発する上で学んだことを紹介できればと思います。

背景

レバレジーズといえば、オールインハウスです!
弊社は、エンジニア・デザイナー・マーケーターが密に連携してサービスを作り上げるのが特徴です。 何かデザインで困ったことがあれば、すぐ近くにいるデザイナーさんと話し合いながら業務を進めています。

弊社だと職種に関係なく、共同で作業を進めるためにGoogleスプレッドシートを使用することが多くあります。 例えば、エンジニアではなくてもプログラムを書いて、外部からデータを取得してスプレッドシート上に記録したい場合が多々あります。
ですが、職種によってはWindowsを利用している社員もいるため、Pythonなどの環境構築をするのは何かと手間になります。

簡単なプログラミングをやってみる

そこで、エンジニアではない人向けにGASで簡単なプログラミングをやってみました!

GASとは

GAS(Google App Scripts)とは、GmailGoogleスプレッドシートなどのGoogleのサービスをスクリプトで操作することができるプラットフォームです。
ちなみにGASは、JavaScriptがベースになっています。
クラウド上で動作するので、環境構築が不要ですし、簡単に共有することができます!

住所から緯度経度を取得

今回は、Geocoding APIを使って住所から緯度経度を取得してみたいと思います。
例えば、以下のようなデータがあるとして、取得してきた緯度経度を入力したいと思います。

f:id:k-miyai-lvgs:20180720184422p:plain

1. スクリプトの作成

ツールバーツールを押し、スクリプトエディタを押します。 これで、作成は完了です!

2. コーディング

function index()
{
  // 緯度経度情報があれば、シートに書き込む
  var sheet = SpreadsheetApp.getActiveSheet(),
      values = sheet.getDataRange().getValues();
 
  for (var i = 1; i < values.length; i++) { 
    var address = values[i][1],
        location = getLatLng(address);

    // 緯度経度情報があれば、シートに書き込む
    if (location) {
      sheet.getRange(i+1, 3, 1, location.length).setValues([location]);
    }
  }
}

function getLatLng(address)
{
  // Web APIでデータを取得
  var url = 'https://www.geocoding.jp/api/?q=' + encodeURI(address),
      res = UrlFetchApp.fetch(url),
      xml = XmlService.parse(res.getContentText()),
      root = xml.getRootElement(),
      location = root.getChildren('coordinate')[0];
 
  if (typeof location == 'undefined') {
    return false;
  }
  
  return [
    location.getChildText('lat'),
    location.getChildText('lng')
  ];
}

簡単な解説

  • encodeURI()
    • 住所が日本語ですので、住所部分をエンコード(符号化)しています。
  • UrlFetchApp.fetch()
    • HTTP通信を行っています。
  • XmlService.parse()
    • XML形式のレスポンスをパース(構文解析)しています。
  • SpreadsheetApp.getActiveSheet()
    • 今開いているシートを取得しています。
  • sheet.getDataRange().getValues()
    • シートのデータを取得しています。
  • sheet.getRange().setValues()
    • 書き込みたいセルの範囲を取得して、データを書き込んでいます。

3. スクリプトの実行

スクリプトエディタで実行することも可能なのですが、今回はボタンを作成して、ボタンを押すとスクリプトが実行するようにしたいと思います。
手順としては、以下のとおりです。

  1. ツールバー挿入を押し、図形描画...を押します。
  2. 図形を押して、図形やテキストを作成します。
  3. 作成した図形の右上の記号を押して、スクリプトを割り当て...を押します。
  4. 割り当てるスクリプトとしてindexを入力します。

動作確認

ボタンを押すと、緯度経度が入力されているのが確認できます! f:id:k-miyai-lvgs:20180720184330p:plain

まとめ

今回作成したスクリプトは、実際の業務でも活用されており、業務の効率化を図ることができました。 新卒1年目が提案した案が採用されて、業務で活用されているのも弊社の特徴かと思います。

また、今回はGASでGoogleスプレッドシートを操作する方法を紹介しましたが、Google DriveGmailを操作したり、他のサービスと連携することができます。 GASは非常に手軽で便利なので、ぜひエンジニアではない人のプログラミングのきっかけになれればと思います。