ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Aug 04

[node.js][express]RESTful API part2

by zuqqhi2 at 2013年8月4日
Pocket

やりたいこと

mongoDBとつなげてGETパラメタやDBのデータ内容に応じて出力を変える。

ソース

var requestline = require('../libs/requestline');
var mongo = require('../libs/recommend_data');
var EventRelation = mongo.EventRelation;

function sort_items(items){
	var result = new Array();
	// copy
	for (var key in items) {
		var element = {};
		element["event_id"] = key;
		element["genre_id"] = items[key]["genre_id"];
		element["similarity"] = items[key]["similarity"];
		result.push(element);
	}
	// sort
	for (var i = 0; i < items.length-1; i++) {
		for (var j = i+1; j < items.length; j++) {
			if (result[i]["similarity"] < result[j]["similarity"]) {
				var tmp = result[i];
				result[i] = result[j];
				result[j] = tmp;
			}
		}
	}
	return result;
}

exports.index = function(req, res){
	var reqline = new requestline['Requestline'](req.query);
        console.log("Query Parameters");
	console.log(reqline.getParams());

	var items_tmp = {};
	EventRelation.find({timeslot:reqline.getParams()['timeslot']}, function(err, items) {
		for (var i = 0; i < items.length; i++) {
			if (parseInt(items[i]["target_event_id"]) in items_tmp) {
				items_tmp[parseInt(items[i]["target_id"])]["similarity"] += parseFloat(items[i]["distance"]);
			} else {
				items_tmp[parseInt(items[i]["target_id"])] = {};
				items_tmp[parseInt(items[i]["target_id"])]["genre_id"] = parseInt(items[i]["target_genre_id"]);
				items_tmp[parseInt(items[i]["target_id"])]["similarity"] = parseFloat(items[i]["distance"]);
			}
		}
	
		var result = sort_items(items_tmp);  

		if (reqline.validate()) {
			res.json(result);
		} else {
			res.json({ error : { type : "Qeury Syntax Error", message : "Query Syntax Error"}});
		}
	});
};

これでリクエストラインとかDB内のデータによって出力を変えることが出来た。
次はアイテムベースの協調フィルタリング用のAPIに改修を試みる。

Related Posts

  • 2013年7月28日 [node.js][express][coffeescript] RESTful API part1 やりたいこと node.jsとexpressとcoffeescriptでRESTfulなAPIを作りたい。 環境準備 Coffee Scriptでモデルを書く リクエストラインをValidateするモデルを作ってみる。 […]
  • <!--:ja-->[node.js][express]CPUとヒープのスナップショットを撮る<!--:--><!--:en-->[node.js][exprees]How to take snapshot of CPU and Heap<!--:-->2014年8月31日 [node.js][express]CPUとヒープのスナップショットを撮る 概要 node.jsでアプリを作成しているとメモリリーク(やCPUの負荷)に悩まされることが多い。 多くはスナップショットを撮ってボトルネックを見つけて改善することできたから、 ここではその方法を載せる。 スナップショットの結果はライブラリの関係上Chromeブラウザの […]
  • 2013年6月27日 [Javascript][Node.js][express]mongodbと連携させてみる mongodbを使って値の保存、読み出しを使ったプログラムを作成してみる。 まずは expressを使用してひな形を作成する。 次にmongodbとの接続に使用するモデルを作成する。 […]
  • 2013年8月14日 [express][socket.io]チャットデモのコードを見てみる 参考記事 ※この記事は、ただの上記のリンク先の記事を読んだメモです。 1.レシーバーの記述 サーバに対してlistenするから、app.jsの末尾のあたりに以下のように記述すれば良いみたい。 […]
  • <!--:ja-->[node.js]食べログAPI から得られたレストラン情報をmongoDBに入れる<!--:--><!--:en-->[node.js]Insert restaurant information from TabelogAPI to mongoDB<!--:-->2013年8月25日 [node.js]食べログAPI から得られたレストラン情報をmongoDBに入れる やりたいこと タイトルのそのまま。 コンフィグファイル(yaml)使ったりログも書いたりしているから忘れないようにメモ。 ソースコード 使ったライブラリはこんな感じ。 cheerio : 食べログAPI […]
  • 2013年8月18日 [node.js]webサイトのクローリング用ライブラリ cheerio 以下のライブラリを利用する。 requestは対象URLからのデータ取得に用いて、 cheerioはその取得したデータをDOM解析するために使用する。 例えばこんな感じで使用出来る。 I'll use libraries which are […]
Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.