non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

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

関連記事

 

2年前の記事