LoginSignup
11
19

More than 3 years have passed since last update.

GoogleAppsScriptで短縮URLを作る

Last updated at Posted at 2018-12-10

こんにちは。

LocoPartnersでReluxのサーバーサイドを担当している@shintarowです。
この記事は「Relux Advent Calendar 2018」9日目の記事です。

弊社サービスではよくパラメータを付与したURLを短縮URLに変換して、シェアなどを行っています。
2,3個であれば手動で行うのもそれほど苦ではないですが、10,20となってくると単純な作業ではあるのですが、ミスも発生しやすく、何よりかなり面倒です。。。
こういった作業はできれば、自動化するほうが良いので、今回はGoogleAppsScript(以下GAS)を利用して、GoogleSpreadSheet(以下GSS)から短縮URLを生成し元のシートに書き込こもうと思います。

1. bitlyAPIを利用できるようにする。

こちらのDocumentに従い、アクセストークンを取得する。
https://dev.bitly.com/v4_documentation.html

※ 他のAPIでも作れますが、今回はbitlyにしました。

2. GSSに短縮したいURLのリストを作る。

image.png

※ 今回はA列に短縮したいURLを入れて、B列に短縮URLを書き込こむ形で作ります。

3. GASのエディタを開く。

image.png

上部にあるメニューからツールを選択し、スクリプトエディタをクリック。

image.png
↑のような画面が表示される。

4. 短縮URLを生成して、GSS上に書き込む。

スクリプトエディタに以下内容を記述


function wirteShortUrl() {

  //sheet名称から情報取得
  var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
  var value = sheet.getRange('A:A').getValues().filter(String);
  var length = value.length;
  var shortUrls   = [];

  for (var i = 0; i < length; i++ ) {
    shortUrls.push([getShortUrl(value[i][0])]);
  }

  //B列に短縮URLを追加する。
  sheet.getRange('B1:B' + length).setValues(shortUrls);
}

// Bitlyで短縮URLを生成する。
function getShortUrl(longUrl) {

  const ACCESS_TOKEN = '1で取得したアクセストークンを貼り付ける';
  const ACCESS_URL   = 'https://api-ssl.bitly.com/v4/shorten';

  var payload = {
      'long_url': longUrl,
  };

  var headers = {
      'Authorization' : 'Bearer ' + ACCESS_TOKEN,
      'Content-Type': 'application/json',
  }

  var options = {
      "method"      : 'POST',
      'headers'     : headers,
      'payload'     : JSON.stringify(payload),
  }

  var response = UrlFetchApp.fetch(ACCESS_URL, options);
  var content = response.getContentText("UTF-8");

  return JSON.parse(content).link;
}

実行する。

image.png
上部メニューから、 writeShortUrl を選択して、実行ボタン(▶)を押します。
※ この際、シートのアクセスなどを聞かれるかもしれないので、許可する を押す。

image.png
こんな感じに、B列に短縮URLが表示されていれば成功

おわりに

汎用的に使えるものではないですが、無事短縮URLを自動生成することができました。
時間があれば、使えるAPIを増やすなどの機能追加とリファクタリングをして、ライブラリにしていくのもいいかなと思いました。
ただ、深くは言及していないですがAPIによって呼び出せる回数などがきまっていたり、GAS自体も実行時間に制限があるので、大量に発行する場合は別途対策が必要そうです。

それでは!

11
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19