#はじめに
短縮URLサービスは、一般的に1つのURLの短縮を想定されていることが多い。
(例)https://bitly.com
今回、パラメータが異なる複数のURLを短縮したいと思ったが、そういうサービスはぱっと探した感じなかったので、FirebaseとPostmanを使って実現した。
#動機
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を使った短縮URL発行 (REST API経由)
Dynamic Linksでリンクを発行する方法は4つある。
- Firebase コンソールを使用
- iOS と Android で Dynamic Link Builder API を使用
- REST API を使用
- 手動
引用:https://firebase.google.com/docs/dynamic-links/create-links?hl=ja
1のFirebase コンソールにはそのような機能はなく、2だと別途アプリ開発環境が必要なので、今回は3.REST API
でリンクを発行する。
REST APIで短縮URLを発行する方法は、すでにGoogleがまとめているので下記記事を参照。
上記記事に沿って、始める前にの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"
}
}
}
これを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
で実行。
#Postmanの実行結果「Responses」をファイルで取得
複数の短縮URLは生成されたが、Postman上ではプロパティから値を確認できるだけ。一個一個確認するのは手間なので、実行結果を一気にファイル出力したいと思う。
調べたらファイル書き出し用のコードが用意されていたので、下記手順で実行することでファイルが書き出された。
Write Responses To File
(Github)ResponseToFile-Postman
日本語の説明が見当たらなかったので、念のため記載。
- Postmanのネイティブアプリを立ち上げておく
- Write Responses To Fileにアクセス
-
► Run In Postman
をクリック。アプリが立ち上がるので、collectionをインポート。 -
ResponseToFile-Postmanを自機にクローン。あるいはコマンドでクローン。
git clone https://github.com/sivcan/ResponseToFile-Postman
- クローンしたディレクトリを開いてインストール。コマンドは
npm i
- ローカルサーバを起動。コマンドは
node script.js
- これで実行結果は、新しく生成されるResponsesディレクトリに格納される。
保存されるファイルの拡張子や保存場所を変更したい場合、↑の3でインポートしたcollection「Write Responses To File」を、Edit Collectionで編集。
取得例↓
ファイル名:「test_post_1.csv」
{"shortLink": "{Firebaseで生成された短縮URL}}
ファイルは実行回数分生成される。
#おわりに
あとは生成されたファイルをcatでマージし、まとめられたファイルからshortLink
の行を抽出、valueのみ切り出せば、全ての短縮URLが得られる。
対象URLのQRコードもほしかったので、GoogleSpreadSheetで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 個」らしいので、用途に応じて選ぶと良いかも。