diff --git a/README.md b/README.md index bdf8140..c7a01f0 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ The response data format as follow: - `ar_sa`: Arabic - `de_de`: German - `ja_jp`: Japanese + - `gl_es`: Galician If `LANG` is specified(and is valid), response data will get specified LANG's `title` and `explanation`. For example, set `LANG` as `Traditional Chinese`: diff --git a/i18n/gl_es.js b/i18n/gl_es.js new file mode 100644 index 0000000..9b60cd2 --- /dev/null +++ b/i18n/gl_es.js @@ -0,0 +1,47 @@ +'use strict'; + +const LANG = 'gl_es'; +const BASE_URL = 'http://astrogalicia.org/apod'; + +const handleError = require('../utils/handleError').common; +const notFoundError = require('../utils/handleError').notFound; +const request = require('request'); +const cheerio = require('cheerio'); +const decoder = require('../utils/utils').decoder; + +function buildUrl(date) { + let dateArray = date.split('-'); + return `${BASE_URL}/${dateArray[0]}/${dateArray[1]}/${dateArray[2]}`; +} + +function craw(baseData, callback) { + let url = buildUrl(baseData.date); + + request({ + url: url, + encoding: null + }, function(error, response, buf) { + if (handleError(error, response)) { + return callback(handleError(error, response)); + } + + let decoded = decoder(buf); + + let $ = cheerio.load(decoded); + let title = $('article > header > h1 > a').text().trim(); + let explanation = $('article > div').text(); + let expIdx = explanation.indexOf('Explicaci'); + explanation = explanation.slice(expIdx); + + if (!title || !explanation) { + return callback(notFoundError(baseData.date, LANG)); + } + + baseData.title = title; + baseData.explanation = explanation; + baseData.lang = LANG; + return callback(null, baseData); + }); +} + +module.exports = craw; diff --git a/i18n/index.js b/i18n/index.js index c61ddd5..fcfaf6f 100644 --- a/i18n/index.js +++ b/i18n/index.js @@ -7,5 +7,6 @@ module.exports = { fr_fr: require('./fr_fr'), ar_sa: require('./ar_sa'), de_de: require('./de_de'), - ja_jp: require('./ja_jp') + ja_jp: require('./ja_jp'), + gl_es: require('./gl_es') }; diff --git a/test/i18n.js b/test/i18n.js index e5f09de..1e531ca 100644 --- a/test/i18n.js +++ b/test/i18n.js @@ -97,4 +97,15 @@ describe('i18n', function () { }); }); + it('should success with gl_es', function (done) { + apod.get({ + DATE: '2016-05-11', + LANG: 'gl_es' + }, function (err, data) { + expect(err).to.be.null; + validateData(data); + done(); + }); + }); + });