FirebaseとPostmanを使って短縮URLを複数取得する方法


はじめに

短縮URLサービスは、一般的に1つのURLの短縮を想定されていることが多い。
(例)https://bitly.com

今回、パラメータが異なる複数のURLを短縮したいと思ったが、そういうサービスはぱっと探した感じなかったので、FirebasePostmanを使って実現した。

動機

GoogleFormでアンケートに回答してもらう際、あらかじめ回答を事前に入力できる機能がある。
(例)https://docs.google.com/forms/d/e/1FAIpQLSdVnE7pHvFJ6-9Y5XZDy8Yz6MdBFEkj9QTR_qwNuDnSTNaQXw/viewform?usp=pp_url&entry.1563907928=1
上のURL中、entry.1563907928=1で回答値を設定している。entry.1563907928は設問項目名、1の値を変えることで事前入力値を設定できる。

目的としては、上記機能を使って、異なる事前入力値を持つ複数のURLを発行することだが、だいぶ長いので短縮したいなと思ったのがきっかけ。

Firebaseとは

少し前まで「Google URL Shortener」があったがサービス終了し、今はFirebaseのDynamic Linksで発行できる。
独自ドメインでの発行もできることから、今回はFirebaseを使う。
Firebaseの詳細は別記事を参照。

本記事では短縮URL発行だけが目的なので、プロジェクトだけ作成すればOK。

参考:[Firebase] プロジェクトを新規に作成する

Firebaseを使った短縮URL発行 (REST API経由)

Dynamic Linksでリンクを発行する方法は4つある

  1. Firebase コンソールを使用
  2. iOS と Android で Dynamic Link Builder API を使用
  3. REST API を使用
  4. 手動

引用:https://firebase.google.com/docs/dynamic-links/create-links?hl=ja

1のFirebase コンソールにはそのような機能はなく、2だと別途アプリ開発環境が必要なので、今回は3.REST APIでリンクを発行する。

REST APIで短縮URLを発行する方法は、すでにGoogleがまとめているので下記記事を参照。

(Google)REST API を使用したダイナミック リンクの作成

上記記事に沿って、始める前にの1,2,3を実行。

これでFirebase側の設定は完了。

Postmanのインストール

PostmanはRESTサービスの一つ。自動化しやすいのが特徴とのこと。詳しくはこちら
ネイティブアプリが必要なので下記からインストール。
Postman

Postmanを使って複数の短縮URLを発行

Firebase側のREST APIをたたく。
サンプルコードは↓。

POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=api_key
Content-Type: application/json

{
  "dynamicLinkInfo": {
    "domainUriPrefix": "https://example.page.link",
    "link": "https://www.example.com/",
    "androidInfo": {
      "androidPackageName": "com.example.android"
    },
    "iosInfo": {
      "iosBundleId": "com.example.ios"
    }
  }
}

引用:(Google)パラメータから短いリンクを作成する

これをPostmanでたたく方法は下記の通り。

1. リクエストを作成:New → Request → プロジェクト名を入れてSave.

2. パラメータ(Params)の設定

  • 「POST」に変更
  • key-valueを設定。VALUEにはFirebaseで取得したapi_keyを入力。

3. Bodyの設定

{
    "dynamicLinkInfo": {
        "domainUriPrefix": "https://{yourDomain}", //設定している場合はドメイン名。
        "link": "https://docs.google.com/forms/d/e/1FAIpQLSdVnE7pHvFJ6-9Y5XZDy8Yz6MdBFEkj9QTR_qwNuDnSTNaQXw/viewform?usp=pp_url&entry.1563907928={{num}}" //GoogleFormのURL。`{{num}}`は変数なのでそのまま。
    },
    "suffix": {
        "option": "SHORT" //`SHORT`にすると最低文字数4文字で生成される。
    }
}

4. 環境変数の設定

アンケートフォームの事前入力値を「1,2,3…」とインクリメントさせるため、環境変数とTestsでnumを操作。

右上の歯車マーク → Globals → 変数を追加

VARIABLE INITIAL VALUE CURRENT VALUE
num 1 1

5. Testsの設定

var num = Number(environment.num); //環境変数numの取得
tests["counter:" + num] = true; //結果の取得用。
pm.environment.set("num", ++num); //次の実行のためnumをインクリメント

6. クエリを複数回実行するためのRunnerを設定

Runner機能はこちらを参照。
下記からRunnerを起動。

作成したPOSTを選択し、Save responsesにチェック。
Iterationsは実行回数。
Runで実行。

結果、Response Bodyで短縮URLが得られる。

Postmanの実行結果「Responses」をファイルで取得

複数の短縮URLは生成されたが、Postman上ではプロパティから値を確認できるだけ。一個一個確認するのは手間なので、実行結果を一気にファイル出力したいと思う。

調べたらファイル書き出し用のコードが用意されていたので、下記手順で実行することでファイルが書き出された。
Write Responses To File
(Github)ResponseToFile-Postman

日本語の説明が見当たらなかったので、念のため記載。

  1. Postmanのネイティブアプリを立ち上げておく
  2. Write Responses To Fileにアクセス
  3. ► Run In Postmanをクリック。アプリが立ち上がるので、collectionをインポート。
  4. ResponseToFile-Postmanを自機にクローン。あるいはコマンドでクローン。git clone https://github.com/sivcan/ResponseToFile-Postman
  5. クローンしたディレクトリを開いてインストール。コマンドはnpm i
  6. ローカルサーバを起動。コマンドはnode script.js
  7. これで実行結果は、新しく生成されるResponsesディレクトリに格納される。

保存されるファイルの拡張子や保存場所を変更したい場合、↑の3でインポートしたcollection「Write Responses To File」を、Edit Collectionで編集。

取得例↓
ファイル名:「test_post_1.csv」

{"shortLink": "{Firebaseで生成された短縮URL}}

ファイルは実行回数分生成される。

おわりに

あとは生成されたファイルをcatでマージし、まとめられたファイルからshortLinkの行を抽出、valueのみ切り出せば、全ての短縮URLが得られる。

参考
ファイルを結合するには
[Excel] データを抽出する方法(フィルター機能)

対象URLのQRコードもほしかったので、GoogleSpreadSheetでQRコードを生成した。

GoogleスプレッドシートのIMAGE関数でQRコードを作成する方法


追記

短縮URLを複数取得する方法、他にも全然あった笑
URLShorter(フリーソフト) →bit.ly / j.mp
[非エンジニア向け]短縮URLを一括で大量に作る方法 →bit.ly

まあFirebaseなら、「1 つの IP アドレスで 1 秒あたり 5 回、1 日あたり 200,000 回という制限」、bit.lyは「1 分あたり最大 10,000 個のリンクを短縮する。月次最大数は、1 カ月あたり 10,000 個」らしいので、用途に応じて選ぶと良いかも。