From a8b85ca3bae1ecfd96b75eb5e2c8907edd341cae Mon Sep 17 00:00:00 2001
From: nicolaszf <43488135+nicolaszf@users.noreply.github.com>
Date: Sun, 14 Jul 2019 22:46:22 -0500
Subject: [PATCH] =?UTF-8?q?feat:=20add=20=E5=A4=96=E4=BA=A4=E9=83=A8?=
=?UTF-8?q?=E5=8F=91=E8=A8=80=E4=BA=BA=E8=A1=A8=E6=80=81=20(#2616)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* add fmprc
* change back config.js
---
docs/government.md | 6 ++++
lib/router.js | 3 ++
lib/routes/gov/fmprc/fyrbt.js | 24 ++++++++++++++++
lib/routes/gov/fmprc/utils.js | 54 +++++++++++++++++++++++++++++++++++
4 files changed, 87 insertions(+)
create mode 100644 lib/routes/gov/fmprc/fyrbt.js
create mode 100644 lib/routes/gov/fmprc/utils.js
diff --git a/docs/government.md b/docs/government.md
index 8c47a43ca..984537e52 100644
--- a/docs/government.md
+++ b/docs/government.md
@@ -197,3 +197,9 @@ pageClass: routes
### 首页信息
+
+## 中华人民共和国外交部
+
+### 发言人表态
+
+
diff --git a/lib/router.js b/lib/router.js
index 5d1fd9ff1..af7ea5fc1 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -1023,6 +1023,9 @@ router.get('/gov/statecouncil/news', require('./routes/gov/statecouncil/news'));
// 中华人民共和国生态环境部
router.get('/gov/mee/gs', require('./routes/gov/mee/gs'));
+// 中华人民共和国外交部
+router.get('/gov/fmprc/fyrbt', require('./routes/gov/fmprc/fyrbt'));
+
// 小黑盒
router.get('/xiaoheihe/user/:id', require('./routes/xiaoheihe/user'));
router.get('/xiaoheihe/news', require('./routes/xiaoheihe/news'));
diff --git a/lib/routes/gov/fmprc/fyrbt.js b/lib/routes/gov/fmprc/fyrbt.js
new file mode 100644
index 000000000..62de0944a
--- /dev/null
+++ b/lib/routes/gov/fmprc/fyrbt.js
@@ -0,0 +1,24 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const util = require('./utils');
+
+const host = 'https://www.fmprc.gov.cn/web/wjdt_674879/fyrbt_674889/';
+
+module.exports = async (ctx) => {
+ const response = await got.get(host, {
+ responseType: 'buffer',
+ });
+
+ const $ = cheerio.load(response.data);
+
+ const list = $('.rebox_news ul li').get();
+
+ const result = await util.ProcessFeed(list, ctx.cache);
+
+ ctx.state.data = {
+ title: '中华人民共和国外交部-发言人表态',
+ link: host,
+ description: '中华人民共和国外交部-发言人表态',
+ item: result,
+ };
+};
diff --git a/lib/routes/gov/fmprc/utils.js b/lib/routes/gov/fmprc/utils.js
new file mode 100644
index 000000000..30bea691c
--- /dev/null
+++ b/lib/routes/gov/fmprc/utils.js
@@ -0,0 +1,54 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const url = require('url');
+
+// 加载文章页
+async function load(link) {
+ const response = await got.get(link);
+ const $ = cheerio.load(response.data);
+
+ const date = new Date(
+ $('#News_Body_Time')
+ .text()
+ .match(/\d{4}-\d{2}-\d{2}/)
+ );
+
+ const pubDate = new Date(date.getTime()).toUTCString();
+
+ // 提取内容
+ const description = $('#News_Body_Txt_A').html();
+
+ return { description, pubDate };
+}
+
+const ProcessFeed = async (list, caches) => {
+ const host = 'https://www.fmprc.gov.cn/web/wjdt_674879/fyrbt_674889/';
+
+ return await Promise.all(
+ list.map(async (item) => {
+ const $ = cheerio.load(item);
+
+ const $title = $('a');
+ // 还原相对链接为绝对链接
+ const itemUrl = url.resolve(host, $title.attr('href'));
+
+ // 列表上提取到的信息
+ const single = {
+ title: $.text(),
+ link: itemUrl,
+ guid: itemUrl,
+ };
+
+ // 使用tryGet方法从缓存获取内容。
+ // 当缓存中无法获取到链接内容的时候,则使用load方法加载文章内容。
+ const other = await caches.tryGet(itemUrl, async () => await load(itemUrl));
+
+ // 合并解析后的结果集作为该篇文章最终的输出结果
+ return Promise.resolve(Object.assign({}, single, other));
+ })
+ );
+};
+
+module.exports = {
+ ProcessFeed,
+};