Tech Tips

  1. プログラミング
  2. 259 view

[node.js][express]RESTful API part2

やりたいこと

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に改修を試みる。

プログラミングの最近記事

  1. PlatformIO IDE for VSCode を使用して VSCode で Ardu…

  2. ROS Docker イメージで発生した GPG error の解消方法

  3. Streamlit で訪れた国を色づけした世界地図を作成できるアプリケーションを作成してみ…

  4. M5Stack Core2 for AWS – ESP32 IoT開発キットで…

  5. D3.js v7 で点・線・テキスト・ツールチップ・ズームを設定する方法

関連記事

PAGE TOP