読者です 読者をやめる 読者になる 読者になる

技術のメモ帳

気が向いたときに書いてます

[GAS]SpreadSheetで短縮URLを出力する関数(bit.ly編)

Google Apps Script

SpreadSheetで指定したセルの文字列(URL)の、bit.lyのAPIを使って、短縮URLとして出力するGoogle Apps Scriptの関数です。

以前goo.gl版を実装したので、その関数をベースに実装していきます。

SpreadSheetを新規作成し、[ツール]→[スクリプトエディタ]から、エディタを起動します。

エディタ起動後、次の関数を入力し、保存します。

/**
 * Returns a shortened URL of the input.
 *
 * @param {string} longUrl The long URL to shorten.
 * @return The shortened url.
 */
function shortenUrl(longUrl) {
  try {
    var regexp = /^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/;
    if (typeof longUrl != 'string' || !regexp.test(longUrl)) throw new Error('Invalid args');
    var response = BitlyUrlShortenerService(longUrl);
    return response.data.url;
  } catch(e) {
    return e.toString();
  }
}

/**
 * Returns a analytics of the short URL.
 *
 * @param {string} shortUrl
 * @return click count
 */
function analyzeShortUrl(shortUrl) {
  try {
    var regexp = /^https?:\/\/bit.ly\/.+$/;
    if (typeof shortUrl != 'string' || !regexp.test(shortUrl)) throw new Error('Invalid args');
    var response = BitlyUrlAnalyticsService(shortUrl);
    return response.data.link_clicks;
  } catch(e) {
    return e.toString();
  }
}

function BitlyUrlShortenerService(longUrl) {
  var accessToken = PropertiesService.getScriptProperties().getProperty('BITLY_ACCESS_TOKEN'),
      apiUrl      = 'https://api-ssl.bitly.com/v3/shorten?access_token='+accessToken+'&longUrl='+longUrl,
      response    = UrlFetchApp.fetch(apiUrl);
  if (response.getResponseCode() !== 200) {
    throw new Error('Unable to bit.ly API');
  } else {
    return JSON.parse(response);
  }
}

function BitlyUrlAnalyticsService(shortUrl) {
  var accessToken = PropertiesService.getScriptProperties().getProperty('BITLY_ACCESS_TOKEN'),
      apiUrl      = 'https://api-ssl.bitly.com/v3/link/clicks?access_token='+accessToken+'&link='+shortUrl,
      response    = UrlFetchApp.fetch(apiUrl);
  if (response.getResponseCode() !== 200) {
    throw new Error('Unable to bit.ly API');
  } else {
    return JSON.parse(response);
  }
}

BITLY_ACCESS_TOKENは、アカウントを取得した後、Manage Oauth Apps | Bitly. The power of the link.より生成し、スクリプトエディターの[スクリプトのプロパティ]に保存しておきます。

上記関数では、ついでに、クリック回数を取得する関数 analyzeShortUrl も書きました。

動作確認

問題なく動作しました。

こちらもgoo.gl同様、キャンペーン関連やSNSでのPR等で発行したURLの状況を調べるのに便利そうですね。

参考リンク