昨日,短縮URLを生成しようと,以前に作ったzsh用のfunctionをもとに,コマンドを実行したところ,次のとおり,エラーとなりました.
$ googl_url http://d.hatena.ne.jp/takehikom/
curl https://www.googleapis.com/urlshortener/v1/url -H 'Content-Type: application/json' -d '{"longUrl": "http://d.hatena.ne.jp/takehikom/"}'
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}
}googl_urlの定義ほかについて,書いた記事は,goo.glの短縮URLはRubyスクリプトからcurlコマンドへです.ここを起点に,いろいろ調査した結果,「APIキー」を書いておけばよいと分かりました.
APIキーは以前に取得しています.上述のcurlコマンド(googl_urlが出力する)ではhttps://www.googleapis.com/urlshortener/v1/urlとなっているところを,'https://www.googleapis.com/urlshortener/v1/url?key=〈APIキー〉'に置き換えて,実行すると,短縮URLが出力されました.
そこでAPIキーをオプションで受け取れるよう,functionを作り直しました.2013年のコードでは,1つのURLをコマンドライン引数にとってその短縮URLを出力するgoogl_urlと,任意の数のコマンドライン引数をとって順に処理するgglに分けて,定義していましたが,今回,一本化も行いました.
スクリプトはgistに置いておきます.オプション処理のため,getoptsをWebで調べ,取り入れました*1.URLを並べる前に,引数として「-k 〈APIキー〉」「-f 〈APIキーの入ったファイル名〉」「-F」を指定することができます.「-F」は「-f ~/.googleapikey」と等価です.
実行結果は次のとおりです.
$ echo 〈APIキー〉 > ~/.googleapikey
$ ggl -F http://d.hatena.ne.jp/takehikom/ http://d.hatena.ne.jp/takehikom/rss
curl "https://www.googleapis.com/urlshortener/v1/url?key=〈APIキー〉" -H 'Content-Type: application/json' -d '{"longUrl": "http://d.hatena.ne.jp/takehikom/"}'
{
"kind": "urlshortener#url",
"id": "http://goo.gl/t4PJE",
"longUrl": "http://d.hatena.ne.jp/takehikom/"
}
curl "https://www.googleapis.com/urlshortener/v1/url?key=〈APIキー〉" -H 'Content-Type: application/json' -d '{"longUrl": "http://d.hatena.ne.jp/takehikom/rss"}'
{
"kind": "urlshortener#url",
"id": "http://goo.gl/QPIh0H",
"longUrl": "http://d.hatena.ne.jp/takehikom/rss"
}(最終更新:2015-04-22 晩)
*1:http://shellscript.sunone.me/parameter.htmlが勉強になりました.そこではbashを用いていますが,zshでも問題なく使えます.which getoptsを実行すると,「getopts: shell built-in command」と出ました.