昔、気になっていたnode.jsでマッシュアップサイトってやつを作ったんですが、色々あって放置してた。
最近PHPに書き直そうと思ってるんだけど、しゃくだから、当時のコード内容を晒そうと思う。
構成として
node.js + mongodb + express
という感じ
正直、保守性は意識した書き方がわからなくて、書き方戸惑った。
今回の対象としているapiは以下です。
http://webservice.rakuten.co.jp/ 楽天WEBサービス
http://developer.yahoo.co.jp/ yahoo デベロッパーネットワーク
まず、楽天関係の通信モジュールは以下のように作りました。
common.js
var https = require('https');
var querystring = require('querystring');
function common(path){
this.host = 'app.rakuten.co.jp';
this.path = path;
// 共通リクエスト(登録IDとか)
this.options = function(){
return {applicationId: 'アプリケーションID'
,affiliateId:'アフィリエイトID'
,format: 'json'};
};
}
common.prototype = {
generateURL: function (addOptions) {
var options = this.options();
for(var key in addOptions){
options[key] = addOptions[key];
}
var url = 'https://' +this.host + this.path + '?' +
require('querystring').stringify(options);
console.log(url);
return url;
},
get: function (options, callback) {
var req = https.get(this.generateURL(options), function(res){
res.setEncoding('utf8');
var data = '';
res.on('data', function(str) {data += str;});
res.on('end',function(){
callback(JSON.parse(data));
});
});
}
};
module.exports = common;
・・・的な
これを親にして、各用途のAPIを拡張していきやした。
例:商品検索
ichibaitemsearch.js
var rakuten = require('./common.js');
function api () {
// ここのパスをAPIごとに変える
rakuten.apply(this, ['/services/api/IchibaItem/Search/20130424']);
}
api.prototype = Object.create(rakuten.prototype);
api.prototype.constructor = api;
api.prototype.execute = function(obj, callback){
this.get(obj, callback);
}
module.exports = api;
それで下記のように検索条件を渡して使う
var api = require('./lichibaitemsearch');
new api().execute({category: '0'},function(res){console.log('%j',res;});
長らく放置してたこのサイトをやり直そうと思った記事がこれ
http://www.find-job.net/startup/api-2013
いい時代になりましたね。余裕みて、色々作って行きたいっす。