昨日,短縮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」と出ました.