わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

goo.glの短縮URLを作らせるとDaily Limit for Unauthenticated Use Exceededと出た

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