timeeditapi
Advanced tools
Comparing version 3.0.1 to 4.0.0
140
api.js
@@ -6,29 +6,29 @@ 'use strict'; | ||
const _search = html => { | ||
if(!dataParser.isValidSearch(html)){ | ||
throw 'unvalid search'; | ||
} | ||
return dataParser.getSearchData(html); | ||
if(!dataParser.isValidSearch(html)){ | ||
throw 'Invalid search'; | ||
} | ||
return dataParser.getSearchData(html); | ||
}; | ||
const getScheduleByScheduleUrl = url => { | ||
const s = scrape(url); | ||
return new Promise((resolve, reject) => { | ||
if(s.isUrlTypeHtml()){ | ||
s.getHtml(url) | ||
.then(html => dataParser.getSearchId(html)) | ||
.then(id => { | ||
const jsonUrl = s.replaceHtmlUrlWithJson(); | ||
s.getHtml(jsonUrl) | ||
.then(jsonString => JSON.parse(jsonString)) | ||
.then(parsedJson => resolve(dataParser.buildSchedule(parsedJson, id))) | ||
.catch(e => reject(e)); | ||
}) | ||
.catch(e => reject(e)); | ||
}else{ | ||
s.getHtml(url) | ||
.then(jsonString => JSON.parse(jsonString)) | ||
.then(parsedJson => resolve(dataParser.buildSchedule(parsedJson))) | ||
.catch(e => reject(e)); | ||
} | ||
}); | ||
const s = scrape(url); | ||
return new Promise((resolve, reject) => { | ||
if(s.isUrlTypeHtml()){ | ||
s.getHtml(url) | ||
.then(html => dataParser.getSearchId(html)) | ||
.then(id => { | ||
const jsonUrl = s.replaceHtmlUrlWithJson(); | ||
s.getHtml(jsonUrl) | ||
.then(jsonString => JSON.parse(jsonString)) | ||
.then(parsedJson => resolve(dataParser.buildSchedule(parsedJson, id))) | ||
.catch(reject); | ||
}) | ||
.catch(reject); | ||
}else{ | ||
s.getHtml(url) | ||
.then(jsonString => JSON.parse(jsonString)) | ||
.then(parsedJson => resolve(dataParser.buildSchedule(parsedJson))) | ||
.catch(reject); | ||
} | ||
}); | ||
}; | ||
@@ -42,8 +42,8 @@ | ||
const getAllTypes = url => { | ||
const s = scrape(url); | ||
return new Promise((resolve, reject) => { | ||
s.getHtml(s.getTypeURL()) | ||
.then(html => resolve(dataParser.getTypes(html))) | ||
.catch(e => reject(e)); | ||
}); | ||
const s = scrape(url); | ||
return new Promise((resolve, reject) => { | ||
s.getHtml(s.getTypeURL()) | ||
.then(html => resolve(dataParser.getTypes(html))) | ||
.catch(reject); | ||
}); | ||
}; | ||
@@ -58,8 +58,8 @@ | ||
const search = scraper => id => | ||
new Promise((resolve, reject) => { | ||
scraper.getHtml(scraper.getSearchURL(id)) | ||
.then(html => _search(html)) | ||
.then(searchData => resolve(searchData)) | ||
.catch(e => reject(e)); | ||
}); | ||
new Promise((resolve, reject) => { | ||
scraper.getHtml(scraper.getSearchURL(id)) | ||
.then(html => _search(html)) | ||
.then(searchData => resolve(searchData)) | ||
.catch(reject); | ||
}); | ||
@@ -73,8 +73,8 @@ /** | ||
const getSchedule = _getSchedule => id => | ||
new Promise((resolve, reject) => { | ||
_getSchedule(id) | ||
.then(data => JSON.parse(data)) | ||
.then(parsedData => resolve(dataParser.buildSchedule(parsedData, id))) | ||
.catch(e => reject(e)); | ||
}); | ||
new Promise((resolve, reject) => { | ||
_getSchedule(id) | ||
.then(data => JSON.parse(data)) | ||
.then(parsedData => resolve(dataParser.buildSchedule(parsedData, id))) | ||
.catch(reject); | ||
}); | ||
@@ -88,8 +88,8 @@ /** | ||
const getTodaysSchedule = _getSchedule => id => | ||
new Promise((resolve, reject) => { | ||
_getSchedule(id) | ||
.then(data => JSON.parse(data)) | ||
.then(parsedData => resolve(dataParser.buildTodaysSchedule(parsedData, id))) | ||
.catch(e => reject(e)); | ||
}); | ||
new Promise((resolve, reject) => { | ||
_getSchedule(id) | ||
.then(data => JSON.parse(data)) | ||
.then(parsedData => resolve(dataParser.buildTodaysSchedule(parsedData, id))) | ||
.catch(reject); | ||
}); | ||
@@ -103,32 +103,32 @@ /** | ||
const _getSchedule = scraper => id => | ||
new Promise((resolve, reject) => { | ||
scraper.getHtml(scraper.getSearchURL(id)) | ||
.then(html => _search(html)) | ||
.then(searchData => searchData.map(a => a.id)) | ||
.then(dataIds => scraper.getHtml(scraper.getScheduleURL(dataIds))) | ||
.then(jsonString => resolve(jsonString)) | ||
.catch(e => reject(e)); | ||
}); | ||
new Promise((resolve, reject) => { | ||
scraper.getHtml(scraper.getSearchURL(id)) | ||
.then(html => _search(html)) | ||
.then(searchData => searchData.map(a => a.id)) | ||
.then(dataIds => scraper.getHtml(scraper.getScheduleURL(dataIds))) | ||
.then(jsonString => resolve(jsonString)) | ||
.catch(reject); | ||
}); | ||
const getScheduleByItemId = scraper => itemId => | ||
new Promise((resolve, reject) => { | ||
scraper.getHtml(scraper.getScheduleURL(itemId)) | ||
.then(jsonString => resolve(jsonString)) | ||
.catch(er => reject(er)); | ||
}); | ||
new Promise((resolve, reject) => { | ||
scraper.getHtml(scraper.getScheduleURL(itemId)) | ||
.then(jsonString => resolve(jsonString)) | ||
.catch(reject); | ||
}); | ||
const api = (url, types) => { | ||
const scraper = scrape(url, types); | ||
const scraper = scrape(url, types); | ||
return { | ||
getSchedule: getSchedule(_getSchedule(scraper)), | ||
getTodaysSchedule: getTodaysSchedule(_getSchedule(scraper)), | ||
search: search(scraper), | ||
getScheduleByItemId: getScheduleByItemId(scraper), | ||
return { | ||
getSchedule: getSchedule(_getSchedule(scraper)), | ||
getTodaysSchedule: getTodaysSchedule(_getSchedule(scraper)), | ||
search: search(scraper), | ||
getScheduleByItemId: getScheduleByItemId(scraper), | ||
getAllTypes, | ||
getScheduleByScheduleUrl | ||
}; | ||
getAllTypes, | ||
getScheduleByScheduleUrl | ||
}; | ||
}; | ||
module.exports = api; |
@@ -6,26 +6,26 @@ 'use strict'; | ||
const _getTodaysDate = () => new Date(); | ||
const _parseDate = dateString => new Date(dateString); | ||
const getSearchData = html => { | ||
let $ = _loadHtml(html); | ||
let dataIds = $('.searchObject').map((i, elem) => { | ||
return { | ||
id: $(elem).data('id'), | ||
name: $(elem).data('name') | ||
}; | ||
}).get(); | ||
return dataIds.length > 0 ? dataIds : dataIds[0]; | ||
const $ = _loadHtml(html); | ||
const dataIds = $('.searchObject') | ||
.map((i, elem) => { | ||
return { | ||
id: $(elem).data('id'), | ||
name: $(elem).data('name') | ||
}; | ||
}).get(); | ||
return dataIds.length > 0 ? dataIds : dataIds[0]; | ||
}; | ||
const getTypes = html => { | ||
let $ = _loadHtml(html); | ||
let types = $('#fancytypeselector option').map((i, elem) => { | ||
return { | ||
name: $(elem).text(), | ||
value: $(elem).val() | ||
}; | ||
}).get(); | ||
return types; | ||
const $ = _loadHtml(html); | ||
const types = $('#fancytypeselector option') | ||
.map((i, elem) => { | ||
return { | ||
name: $(elem).text(), | ||
value: $(elem).val() | ||
}; | ||
}).get(); | ||
return types; | ||
}; | ||
@@ -39,4 +39,4 @@ | ||
const getSearchId = html => { | ||
let $ = _loadHtml(html); | ||
return $('#searchTextWide').text().trim(); | ||
const $ = _loadHtml(html); | ||
return $('#searchTextWide').text().trim(); | ||
}; | ||
@@ -51,20 +51,18 @@ | ||
const buildSchedule = (object, id) => { | ||
id = id || null; | ||
if(!object.hasOwnProperty('reservations')){ throw 'Invalid search result'; } | ||
return object.reservations | ||
.map((reservation) => { | ||
return { | ||
booking: { | ||
time:{ | ||
startDate: reservation.startdate, | ||
startTime: reservation.starttime, | ||
endDate: reservation.enddate, | ||
endTime: reservation.endtime | ||
}, | ||
id, | ||
bookingId: reservation.id, | ||
columns: reservation.columns | ||
} | ||
}; | ||
}); | ||
id = id || null; | ||
if(!object.hasOwnProperty('reservations')){ throw 'Invalid search result'; } | ||
return object.reservations | ||
.map(reservation => { | ||
return { | ||
time:{ | ||
startDate: reservation.startdate, | ||
startTime: reservation.starttime, | ||
endDate: reservation.enddate, | ||
endTime: reservation.endtime | ||
}, | ||
searchId: id, | ||
bookingId: reservation.id, | ||
columns: reservation.columns | ||
}; | ||
}); | ||
}; | ||
@@ -78,26 +76,25 @@ | ||
const buildTodaysSchedule = (object, id) => { | ||
let todaysSchedule = buildSchedule(object, id) | ||
.filter((reservation) => { | ||
let reservationDate = _parseDate(reservation.booking.time.startDate); | ||
let todaysDate = _getTodaysDate(); | ||
return reservationDate.getFullYear() === todaysDate.getFullYear() && | ||
reservationDate.getMonth() === todaysDate.getMonth() && | ||
reservationDate.getDate() === todaysDate.getDate(); | ||
}); | ||
return todaysSchedule.length > 0 ? todaysSchedule : [{ id }] ; | ||
const todaysSchedule = buildSchedule(object, id) | ||
.filter((reservation) => { | ||
const reservationDate = _parseDate(reservation.time.startDate); | ||
const todaysDate = new Date(); | ||
return reservationDate.getFullYear() === todaysDate.getFullYear() && | ||
reservationDate.getMonth() === todaysDate.getMonth() && | ||
reservationDate.getDate() === todaysDate.getDate(); | ||
}); | ||
return todaysSchedule.length > 0 ? todaysSchedule : null; | ||
}; | ||
const isValidSearch = html => { | ||
let $ = _loadHtml(html); | ||
return $('.searchObject').hasOwnProperty('0'); | ||
const $ = _loadHtml(html); | ||
return $('.searchObject').hasOwnProperty('0'); | ||
}; | ||
module.exports = { | ||
isValidSearch, | ||
buildTodaysSchedule, | ||
buildSchedule, | ||
getSearchId, | ||
getTypes, | ||
getSearchData | ||
isValidSearch, | ||
buildTodaysSchedule, | ||
buildSchedule, | ||
getSearchId, | ||
getTypes, | ||
getSearchData | ||
}; |
{ | ||
"name": "timeeditapi", | ||
"version": "3.0.1", | ||
"version": "4.0.0", | ||
"description": "web scraper api to easy get schedule information from timeedit", | ||
@@ -5,0 +5,0 @@ "main": "api.js", |
@@ -8,17 +8,17 @@ 'use strict'; | ||
const app = (url, types) => { | ||
if(!urlValidation.isValidUrl(url)){ | ||
throw 'Invalid url'; | ||
} | ||
if(!urlValidation.isValidUrl(url)){ | ||
throw 'Invalid url'; | ||
} | ||
return { | ||
getHtml: scrape.getHtml, | ||
isUrlTypeHtml: urlValidation.isUrlTypeHtml.bind(null, url), | ||
return { | ||
getHtml: scrape.getHtml, | ||
isUrlTypeHtml: urlValidation.isUrlTypeHtml.bind(null, url), | ||
replaceHtmlUrlWithJson: urlBuilder.replaceHtmlUrlWithJson.bind(null, url), | ||
getTypeURL: urlBuilder.getTypeURL.bind(null, url), | ||
getSearchURL: urlBuilder.getSearchURL.bind(null, url, types), | ||
getScheduleURL: urlBuilder.getScheduleURL.bind(null, url), | ||
}; | ||
replaceHtmlUrlWithJson: urlBuilder.replaceHtmlUrlWithJson.bind(null, url), | ||
getTypeURL: urlBuilder.getTypeURL.bind(null, url), | ||
getSearchURL: urlBuilder.getSearchURL.bind(null, url, types), | ||
getScheduleURL: urlBuilder.getScheduleURL.bind(null, url), | ||
}; | ||
}; | ||
module.exports = app; |
@@ -11,10 +11,10 @@ 'use strict'; | ||
const getHtml = url => | ||
new Promise((resolve, reject) => { | ||
request(url, (error, response, body) => { | ||
if (!error && response.statusCode === 200) { | ||
return resolve(body); | ||
} | ||
return reject(error); | ||
}); | ||
new Promise((resolve, reject) => { | ||
request(url, (error, response, body) => { | ||
if (!error && response.statusCode === 200) { | ||
return resolve(body); | ||
} | ||
return reject(error); | ||
}); | ||
}); | ||
@@ -21,0 +21,0 @@ |
'use strict'; | ||
const scheduleUrl = 'ri.json?h=f&sid=3&p=0.m%2C12.n&objects=&ox=0&types=0&fe=0&h2=f'; | ||
const scheduleUrl = 'ri.json?h=f&sid=3&objects=&ox=0&types=0&fe=0&h2=f'; | ||
const searchUrlExtension = 'objects.html?max=15&fr=t&partajax=t&im=f&sid=3&l=sv_SE&search_text=&types='; | ||
@@ -20,4 +20,4 @@ const typeUrlExtension = 'ri1Q7.html'; | ||
const replaceHtmlUrlWithJson = url => { | ||
let reg = new RegExp('html'); | ||
return url.replace(reg, 'json'); | ||
const reg = new RegExp('html'); | ||
return url.replace(reg, 'json'); | ||
}; | ||
@@ -36,8 +36,8 @@ | ||
const makeSearchURL = (a, b, c) => { | ||
const d = a(b); | ||
const d = a(b); | ||
return (url, types, id) => { | ||
let urlArray = c(types).split(b); | ||
return a(url)(urlArray.join(d(id))); | ||
}; | ||
return (url, types, id) => { | ||
const urlArray = c(types).split(b); | ||
return a(url)(urlArray.join(d(id))); | ||
}; | ||
}; | ||
@@ -64,8 +64,8 @@ | ||
const makeScheduleURL = (a, b, c) => { | ||
const d = a(c); | ||
const d = a(c); | ||
return (url, dataIds) => { | ||
let urlArray = b.split(c); | ||
return a(url)(urlArray.join(d(dataIds))); | ||
}; | ||
return (url, dataIds) => { | ||
const urlArray = b.split(c); | ||
return a(url)(urlArray.join(d(dataIds))); | ||
}; | ||
}; | ||
@@ -88,8 +88,8 @@ | ||
const joinAllArgumentsIfArray = fn => (...args) => | ||
fn(...args.map(a => { | ||
if(Array.isArray(a)){ | ||
return a.join(); | ||
} | ||
return a; | ||
})); | ||
fn(...args.map(a => { | ||
if(Array.isArray(a)){ | ||
return a.join(); | ||
} | ||
return a; | ||
})); | ||
@@ -113,5 +113,5 @@ /** | ||
const doIfArrayOrNot = (a, b) => (url, dataIds) => | ||
Array.isArray(dataIds) ? | ||
a(url, dataIds): | ||
b(url, dataIds); | ||
Array.isArray(dataIds) ? | ||
a(url, dataIds): | ||
b(url, dataIds); | ||
@@ -128,6 +128,6 @@ /** | ||
module.exports = { | ||
replaceHtmlUrlWithJson, | ||
getTypeURL, | ||
getSearchURL, | ||
getScheduleURL | ||
replaceHtmlUrlWithJson, | ||
getTypeURL, | ||
getSearchURL, | ||
getScheduleURL | ||
}; |
@@ -9,16 +9,16 @@ 'use strict'; | ||
const isValidUrl = url => { | ||
let timeeditReg = new RegExp('timeedit'); | ||
let urlReg = new RegExp('^(https?:\\/\\/)?'+ | ||
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|'+ | ||
'((\\d{1,3}\\.){3}\\d{1,3}))'+ | ||
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ | ||
'(\\?[;&a-z\\d%_.~+=-]*)?'+ | ||
'(\\#[-a-z\\d_]*)?$','i'); | ||
if(!urlReg.test(url)){ | ||
return false; | ||
} | ||
if(!url.match(timeeditReg)){ | ||
return false; | ||
} | ||
return true; | ||
const timeeditReg = new RegExp('timeedit'); | ||
const urlReg = new RegExp('^(https?:\\/\\/)?'+ | ||
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|'+ | ||
'((\\d{1,3}\\.){3}\\d{1,3}))'+ | ||
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ | ||
'(\\?[;&a-z\\d%_.~+=-]*)?'+ | ||
'(\\#[-a-z\\d_]*)?$','i'); | ||
if(!urlReg.test(url)){ | ||
return false; | ||
} | ||
if(!url.match(timeeditReg)){ | ||
return false; | ||
} | ||
return true; | ||
}; | ||
@@ -31,9 +31,9 @@ | ||
const isUrlTypeHtml = url => { | ||
let reg = new RegExp('html'); | ||
return url.match(reg); | ||
const reg = new RegExp('html'); | ||
return url.match(reg); | ||
}; | ||
module.exports = { | ||
isValidUrl, | ||
isUrlTypeHtml | ||
isValidUrl, | ||
isUrlTypeHtml | ||
}; |
14052
383