From b63d2d96b98c288872d51e217eb7a30ba35f0cae Mon Sep 17 00:00:00 2001 From: TirtaWR Date: Thu, 17 Sep 2015 23:13:22 +0700 Subject: [PATCH 1/3] initial commit --- index.js | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 14 +++++ 2 files changed, 176 insertions(+) create mode 100644 index.js create mode 100644 package.json diff --git a/index.js b/index.js new file mode 100644 index 0000000..1f16283 --- /dev/null +++ b/index.js @@ -0,0 +1,162 @@ +var express = require('express'); +var App = express(); +var HTTPS = require('https'); +var Cheerio = require("cheerio"); + + +//Handler functions +var apiHandler = function (req, res) { + getKelasListPage(req, res, getDpkPage) +}; + +//Helper functions +var sendJsonResponse = function(req, res, dpk_page_body, cb) { + var html = dpk_page_body; + var $ = Cheerio.load(html); + var dpkString = $('pre').html(); + + var re_infos = /\s*([^\n\r]*)\nProgram Studi\s*: \s*([^\n\r]*)\nSemester\s*:\s*([0-9])\/([^\n\r]{2})\n*Kode\/Mata Kuliah\s*:\s*([^\n\r]{6}) \/ \s*([^\n\r]*),\s*([0-9])\s*\S*\nNo\. Kelas\/Dosen\s*:\s*([^\n\r]{2})\s\/\s([^\n\r]*)[\s\S\n]*Total Peserta = ([0-9]{2})/; + var re_pesertas = /([0-9]{3})\s*([0-9]{8})\s*([^\n\r]*)/g; + + var infos = re_infos.exec(dpkString); + if(!infos){ + res.status(404).json({"error": "Kelas tidak ditemukan"}); + return; + } + + var peserta = re_pesertas.exec(dpkString); + var arrPeserta = []; + while (peserta != null) { + // console.log(peserta[1]); + arrPeserta.push({ + "nim": peserta[2], + "nama": peserta[3].trim() + }); + peserta = re_pesertas.exec(dpkString); + } + + var jsonObj = { + Content: { + "fakultas": infos[1], + "prodi": infos[2], + "semester":infos[3], + "tahun": '20'+infos[4], + "kode": infos[5], + "mata_kuliah": infos[6], + "sks": infos[7], + "kelas": infos[8], + "dosen": infos[9], + "jumlah_peserta": infos[10], + "peserta": arrPeserta + } + }; + + res.json(jsonObj); +} + +var getDpkPage = function(req, res, kelas_list_page_body, cb) { + var kode; + if(req.query.kode){ + kode = req.query.kode; + }else{ + + return; + // kode = 'IF2110'; + } + + var html = kelas_list_page_body; + var $ = Cheerio.load(html); + var liMatkul = $('li:contains("'+kode+'")'); + + var kelas; + if(req.query.kelas){ + kelas = req.query.kelas; + }else{ + res.status(400).json({"error": "Request tidak sesuai format"}); + return; + // kelas = '01' + } + + var liKelas = liMatkul.find('li:contains("'+kelas+'")'); + + var dpkPath = liKelas.find('a').attr('href'); + + var reqUrl = 'https://six.akademik.itb.ac.id/publik/'+dpkPath; + HTTPS.get(reqUrl, function(httpRes) { + console.log("Got response: " + httpRes.statusCode); + + var httpResBody = ''; + httpRes.on('data', function(chunk) { + httpResBody += chunk; + }); + httpRes.on('end', function() { + cb(req, res, httpResBody) + }); + }).on('error', function(e) { + res.status(500).json({"error": "Terjadi kesalahan pada server"}); + }); + + // res.send(liKelas.html()); +}; + +var getKelasListPage = function(req, res, cb) { + var ps; + if(req.query.ps){ + ps = req.query.ps; + }else{ + res.status(400).json({"error": "Request tidak sesuai format"}); + return; + // ps = '135'; + } + + var reqUrl = "https://six.akademik.itb.ac.id/publik/daftarkelas.php?ps="+ps+"&semester=1&tahun=2015&th_kur=2013"; + HTTPS.get(reqUrl, function(httpRes) { + console.log("Got response: " + httpRes.statusCode); + + var httpResBody = ''; + httpRes.on('data', function(chunk) { + httpResBody += chunk; + }); + httpRes.on('end', function() { + cb(req, res, httpResBody, sendJsonResponse) + // res.send(httpResBody); + }); + + }).on('error', function(e) { + res.status(500).json({"error": "Terjadi kesalahan pada server"}); + }); + +}; + +//Router +App.get('/api', apiHandler); + + + +//Main +var server = App.listen(3000, function () { + var host = server.address().address; + var port = server.address().port; + + var welcomeMessage = "\n"; + welcomeMessage += " '######## '######## '## '## \n"; + welcomeMessage += " ## ## ## ## ## '## \n"; + welcomeMessage += " ## ## ## ## ## '## \n"; + welcomeMessage += " ## ## ######## ##### \n"; + welcomeMessage += " ## ## ## ## ## \n"; + welcomeMessage += " ## ## ## ## ## \n"; + welcomeMessage += " ######## ## ## ## \n"; + welcomeMessage += " \n"; + welcomeMessage += " '######## '#### '## ## '######## '######## '######## \n"; + welcomeMessage += " ## ## ### ## ## ## ## ## ## \n"; + welcomeMessage += " ## ## #### ## ## ## ## ## ## \n"; + welcomeMessage += " ###### ## ## ## ## ## ## ###### ######## \n"; + welcomeMessage += " ## ## ## #### ## ## ## ## ## \n"; + welcomeMessage += " ## ## ## ### ## ## ## ## ## \n"; + welcomeMessage += " ## '#### ## ## ######## ######## ## ## \n"; + + console.log(welcomeMessage); + console.log('By Tirta Wening Rachman - 13512004'); + console.log('listening at port '+ port); +}); + diff --git a/package.json b/package.json new file mode 100644 index 0000000..31038af --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.13.3" + } +} From c498b19f57a2c4ef3d3bd534946acc72e2d28cc1 Mon Sep 17 00:00:00 2001 From: TirtaWR Date: Mon, 21 Sep 2015 12:11:41 +0700 Subject: [PATCH 2/3] modyify package.json and add readme --- package.json | 1 + readme.md | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 readme.md diff --git a/package.json b/package.json index 31038af..bd3b922 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "author": "", "license": "ISC", "dependencies": { + "cheerio": "^0.19.0", "express": "^4.13.3" } } diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..950a45f --- /dev/null +++ b/readme.md @@ -0,0 +1,15 @@ +NIM = 13512004 +Name = Tirta Wening Rachman +GithubID = tirtawr +Requreiments: +1. Must be run on internal ITB network + +How to Deploy + +1. Instal Node.js runtime +2. Install npm +3. Clone repository into local directory +4. run "npm install" + +How to Run +1. run index.js to start server From 2557289b8789b17f5bdfcb8164f8b7152aacd53d Mon Sep 17 00:00:00 2001 From: TirtaWR Date: Mon, 21 Sep 2015 12:17:01 +0700 Subject: [PATCH 3/3] fix readme --- readme.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index 950a45f..df83856 100644 --- a/readme.md +++ b/readme.md @@ -1,15 +1,20 @@ -NIM = 13512004 -Name = Tirta Wening Rachman -GithubID = tirtawr -Requreiments: -1. Must be run on internal ITB network +# README for Service Adapter Assignment on IF4050 2015 + -How to Deploy + * NIM = 13512004 + * Name = Tirta Wening Rachman + * GithubID = tirtawr -1. Instal Node.js runtime -2. Install npm -3. Clone repository into local directory -4. run "npm install" +Requreiments: + * Server must be run on internal ITB network +How to Deploy + 1. Install Node.js + 2. Install npm + 3. Clone repository + 4. run 'npm install' + How to Run -1. run index.js to start server + 1. run index.js to start server + +