goo.gl について
に書いてあるようにこんな感じに使えます。
$ curl https://www.googleapis.com/urlshortener/v1/url \ -H 'Content-Type: application/json' \ -d '{"longUrl": "http://www.google.com/"}' { "kind": "urlshortener#url", "id": "http://goo.gl/fbsS", "longUrl": "http://www.google.com/" }
url の後ろに ?key=[api key] と入力すると API call などのデータがダッシュボードで管理できるようになります。api key は https://code.google.com/apis/console/:Google APIs Console から取得できます。
コード
この取得とパース部分を書くとこんな感じになります。
var https = require('https'); var req = https.request({ host : 'www.googleapis.com', path : '/urlshortener/v1/url', method : 'POST', headers : {'Content-Type': 'application/json'} }, function(res) { var jsonStr = ''; res.on('data', function(chunk) { jsonStr += chunk.toString(); }).on('end', function() { var url = JSON.parse(jsonStr).id; console.log(url); }); }); req.write('{"longUrl" : "http://d.hatena.ne.jp/hecomi/"}\n'); req.end();
API Key の利用も含めて関数化すると以下のようになります。
var https = require('https'); function shortenUrl(param, callback) { if ( typeof(param) == 'string') { param = { url: param }; } var req = https.request({ host : 'www.googleapis.com', path : '/urlshortener/v1/url' + ('apiKey' in param ? '?key=' + param.apiKey : ''), method : 'POST', headers : {'Content-Type': 'application/json'} }, function(res) { var jsonStr = ''; res.on('data', function(chunk) { jsonStr += chunk.toString(); }).on('end', function() { var url = JSON.parse(jsonStr).id; callback(url); }); }); req.write('{"longUrl" : "' + param.url + '"}\n'); req.end(); } shortenUrl('http://d.hatena.ne.jp', function(url) { console.log(url); }); shortenUrl({ url : 'http://d.hatena.ne.jp/', apiKey : 'XXXXXXXXXXXXXXXX', }, function(url) { console.log(url); });
と紹介しましたが、goo.gl という Node モジュールがあるので、これを利用するともっと簡単に出来ます。
$ npm install goo.gl
以下 goo.gl の test のソースコードから抜粋。
var googl = require('../lib/googl.js'), assert = require('assert'); googl.shorten('http://www.google.com/', function (result) { assert.equal(result.id, 'http://goo.gl/fbsS'); }); googl.expand('http://goo.gl/fbsS', function (result) { assert.equal(result.longUrl, 'http://www.google.com/'); }); googl.setKey('ABCDEFGabcdefg01234567'); assert.equal(googl.key, 'ABCDEFGabcdefg01234567');