GASから短縮URL付きで自動ツイートする


はじめに

個人アプリで、新着記事があったらpushを送る、という機能を実装したのですが、これをtwitterでも自動ツイートできると、アプリの拡散・宣伝にも繋がるかもしれないな、と思い立ち、やってみることにしました。

ツイート処理

こちらの記事が丁寧でわかりやすかったです。
Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる

こちらを参考に、PUSHのタイミングでツイートもしてあげるとよいかと思います。
また、アプリの宣伝のためには、マーケットのURLもツイートに含めてあげる必要がありますが、URLが長すぎるといろいろ不都合が多いので、短縮URLを使ってあげます。

URLの短縮

利用するサービスはこちら。
Google URL Shortener

GASから利用するには、スクリプトのメニュー「リソース」>「Googleの拡張サービス」から、「URL Shortener API」をON(有効)にします。

次に、下記URLからコンソール上でもURL Shortener APIを有効にします。
https://console.cloud.google.com/apis/library/urlshortener.googleapis.com/?q=url

実際のコードはこちらの記事を参考にさせていただきました。
[GAS]SpreadSheetで短縮URLを出力する関数(goo.gl編)

API_KEY = 'xxxxxxxxxxxx';
function urlShortener(url) {
  var apiUrl  = 'https://www.googleapis.com/urlshortener/v1/url?key='+API_KEY;
  var payload = { longUrl: url };
  var options = {
        method: 'POST',
        contentType: 'application/json',
        payload: JSON.stringify(payload),
        muteHttpExceptions: true
      }
  var response = UrlFetchApp.fetch(apiUrl, options);
  if (response.getResponseCode() !== 200) {
    throw new Error('cannot shorten url.');
  } else {
    return JSON.parse(response).id;
  }
}

API_KEYは以下の手順で作成できます。
https://console.cloud.google.com/apis/credentials
「認証情報」タブ>「認証情報を作成」ボタン>「APIキー」から作成
作成済みの場合は認証情報タブにAPIキーとして記載されていると思います。

解析

Googleの短縮URLではクリック数などのも計測可能です。
https://developers.google.com/url-shortener/v1/getting_started

function shortUrlClickCount(shortUrl) {
  try {    
    // projection=FULL にするともっと細かい情報も取得可能です。
    var apiUrl = 'https://www.googleapis.com/urlshortener/v1/url?shortUrl=' + shortUrl + '&projection=ANALYTICS_CLICKS&key=' + API_KEY
    var response = UrlFetchApp.fetch(apiUrl);
    if (response.getResponseCode() !== 200) {
      throw new Error('cannot analyze shorten url.');
    } else {
      return JSON.parse(response).analytics['allTime']['shortUrlClicks'].toString();
    }
  } catch(e) {
    return e.toString();
  }
}

解析結果は下記のような配列で返却されます。

({allTime:{shortUrlClicks:"1", longUrlClicks:"1"}, 
  month:{shortUrlClicks:"1", longUrlClicks:"1"}, 
  week:{shortUrlClicks:"1", longUrlClicks:"1"}, 
  day:{shortUrlClicks:"1", longUrlClicks:"1"}, 
  twoHours:{shortUrlClicks:"1", longUrlClicks:"1"}) 

期間がallTime/month/week/day/twoHours が用意されており、それぞれshortUrlClicksとlongUrlClicksが取得できるようですが、サンプルでは全期間の短縮URLクリック数のみ出力しています。