Help us understand the problem. What is going on with this article?

GoogleAppsScriptで短縮URLを作る

More than 1 year has passed since last update.

こんにちは。

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自体も実行時間に制限があるので、大量に発行する場合は別途対策が必要そうです。

それでは!

loco-partners-inc
宿泊予約サービス「Relux」(https://rlx.jp)を運営する企業です。
http://loco-partners.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした