From c5e874348d875882a2f15060cb614845c88db4f7 Mon Sep 17 00:00:00 2001 From: SSARCandy Date: Sun, 26 Jun 2016 21:06:13 +0800 Subject: [PATCH] de_de --- README.md | 3 ++- i18n/de_de.js | 39 +++++++++++++++++++++++++++++++++++++++ i18n/index.js | 3 ++- index.js | 2 ++ test/i18n.js | 11 +++++++++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 i18n/de_de.js diff --git a/README.md b/README.md index c62b939..d5b3ecd 100644 --- a/README.md +++ b/README.md @@ -39,12 +39,13 @@ The response data format as follow: } ``` -## Support language: +## Supported language: - `en_us`: English(default) - `zh_tw`: Traditional Chinese - `cs_cz`: Czech - `fr_fr`: French - `ar_sa`: Arabic + - `de_de`: German 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/de_de.js b/i18n/de_de.js new file mode 100644 index 0000000..ddeacf7 --- /dev/null +++ b/i18n/de_de.js @@ -0,0 +1,39 @@ +'use strict'; + +const LANG = 'de_de'; +const BASE_URL = 'http://www.starobserver.org'; + +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 craw(baseData, callback) { + let date = baseData.date.replace(/-/g, '').slice(2); + request({ + url: `${BASE_URL}/ap${date}.html`, + 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 = $('body > center > h3').text().trim(); + let explanation = $('body > center > p:nth-child(6)').text().trim(); + + 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 85b71b7..9182753 100644 --- a/i18n/index.js +++ b/i18n/index.js @@ -5,5 +5,6 @@ module.exports = { en_us: require('./en_us'), cs_cz: require('./cs_cz'), fr_fr: require('./fr_fr'), - ar_sa: require('./ar_sa') + ar_sa: require('./ar_sa'), + de_de: require('./de_de') }; diff --git a/index.js b/index.js index d838300..9539eb0 100644 --- a/index.js +++ b/index.js @@ -30,7 +30,9 @@ APOD.prototype.get = function(options, callback) { json: true }; + console.time('i'); request(opt, function(error, response, body) { + console.timeEnd('i'); if (handleError(error, response, body)) { return callback(handleError(error, response, body)); } diff --git a/test/i18n.js b/test/i18n.js index 0c1100d..903839a 100644 --- a/test/i18n.js +++ b/test/i18n.js @@ -75,4 +75,15 @@ describe('i18n', function () { }); }); + it.only('should success with de_de', function (done) { + apod.get({ + DATE: '2016-05-11', + LANG: 'de_de' + }, function (err, data) { + expect(err).to.be.null; + validateData(data); + done(); + }); + }); + });