node.jsでプロキシ環境下でもGoogle URL Shortenerを簡単に利用できた
おはようございます。最近、また暑くなって、寝室で、廊下側に寝ているせいもあり、明け方、息子達にベッドを占領されて起きる日々が続いている@kjunichiです。
背景
startコマンドに長いURLを渡したら、URLが途中で切れてしまった。
URLを短縮サービスで短くすればいい
真っ先に思いつくのが、bit.lyだが、bit.lyはハッシュがあまり長いと相手にしてくれない。GoogleのやっているGoogle URL Shortenerを使うと、長いハッシュも安心。ツイッターでは8k程度まで行けるとの事でした。
コード
node.js標準のAPIだと
node.js標準のAPIでも可能です。しかし、プロキシを通してアクセスいている環境だと、それに対応するコードの追加が必要になります。そこで、requestモジュールを使うと、このモジュールがHTTPプロキシの環境変数を参照して対応してくれるのですごく楽でした。
var request = require('request'); var url = "http://phi-jp.github.io/runstant/release/alpha/#UEsDBAoAAAAAAAh3/0QFmPrFFgMAABYDAAAEAAAAZGF0YXsidmVyc2lvbiI6IjAuMC4xIiwiY3VycmVudCI6Imh0bWwiLCJzZXR0aW5nIjp7InRpdGxlIjoiQm9va21hcmtsZXQiLCJkZXRhaWwiOiLjg5bjg4Pjgq/jg57jg7zjgq/jg6zjg4Pjg4jjgoJSdW5zdGFudOOBquOCieewoeWNmOOBq++8gSJ9LCJjb2RlIjp7Imh0bWwiOnsidHlwZSI6Imh0bWwiLCJ2YWx1ZSI6IjwhRE9DVFlQRSBodG1sPlxuIFxuPGh0bWw+XG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiIC8+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm9cIiAvPlxuICAgICAgICA8bWV0YSBuYW1lPVwiYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZVwiIGNvbnRlbnQ9XCJ5ZXNcIiAvPlxuICAgICAgICA8dGl0bGU+JHt0aXRsZX08L3RpdGxlPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZGVzY3JpcHRpb25cIiBjb250ZW50PVwiJHtkZXNjcmlwdGlvbn1cIiAvPlxuICAgIDwvaGVhZD5cbiAgICA8Ym9keT5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6d2luZG93LnByb21wdCgnJywnLSBbJytkb2N1bWVudC50aXRsZSsnXScgKycoJysgbG9jYXRpb24uaHJlZisnKScpO3ZvaWQoMCk7XCI+R2V0TWQ8L2E+XG4gICAgPC9ib2R5PlxuPC9odG1sPiJ9LCJzdHlsZSI6eyJ0eXBlIjoiY3NzIiwidmFsdWUiOiJib2R5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyO1xufSJ9LCJzY3JpcHQiOnsidHlwZSI6ImphdmFzY3JpcHQiLCJ2YWx1ZSI6IiJ9fX1QSwECFAAKAAAAAAAIdv9EBZj6xRYDAAAWAwAABAAAAAAAAAAAAAAAAAAAAAAAZGF0YVBLBQYAAAAAAQABADIAAAA4AwAAAAA="; var options = { url: "https://www.googleapis.com/urlshortener/v1/url", headers: { 'Content-Type': 'application/json' }, json: true, body: JSON.stringify({ longUrl: url }) }; request.post(options, function(error, response, body) { if (!error && response.statusCode == 200) { spawn("cmd", ["/C", "start " + body.id]); } else { console.log('error: ' + response.statusCode); } });
Link
関連記事