diff --git a/docs/new-media.md b/docs/new-media.md
index d945fa4907..078ba0b2e7 100644
--- a/docs/new-media.md
+++ b/docs/new-media.md
@@ -283,7 +283,11 @@ pageClass: routes
-## 观察者风闻话题
+## 观察者网-中国关怀 全球视野
+
+### 观察者首页
+
+
### 观察者风闻话题
diff --git a/lib/router.js b/lib/router.js
index 21a2576825..1de3b458c4 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -1406,6 +1406,7 @@ router.get('/zfrontier/postlist/:type', require('./routes/zfrontier/postlist'));
// 观察者风闻话题
router.get('/guanchazhe/topic/:id', require('./routes/guanchazhe/topic'));
router.get('/guanchazhe/personalpage/:uid', require('./routes/guanchazhe/personalpage'));
+router.get('/guanchazhe/index/:type', require('./routes/guanchazhe/index'));
// Hpoi 手办维基
router.get('/hpoi/info/:type?', require('./routes/hpoi/info'));
diff --git a/lib/routes/guanchazhe/index.js b/lib/routes/guanchazhe/index.js
new file mode 100644
index 0000000000..ec9be15c3b
--- /dev/null
+++ b/lib/routes/guanchazhe/index.js
@@ -0,0 +1,342 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+module.exports = async (ctx) => {
+ const type = ctx.params.type;
+ const host = 'https://www.guancha.cn';
+ const ptype = {
+ all: { name: '首页Feeds', url: 'https://www.guancha.cn/' },
+ redian: { name: '热点新闻', url: 'https://www.guancha.cn/api/redian.htm' },
+ member: { name: '观察者', url: 'https://www.guancha.cn/api/member.htm' },
+ gundong: { name: '滚动新闻', url: 'https://www.guancha.cn/api/new_gundong.htm' },
+ };
+ // 定义list存放请求数据,htmlarr暂存html数据组,outList存放输出的数据组
+ const list = [],
+ htmlarr = [],
+ temp = [],
+ HomeFeeds = [],
+ RedianFeeds = [],
+ MemberFeeds = [],
+ GundongFeeds = [];
+ let AllFeeds = [];
+ // 获取新闻url过来的时间/ID
+ function getData(jscontent, option) {
+ switch (option) {
+ case 'date': {
+ // eslint-disable-next-line
+ let jsoutput = String(jscontent)
+ .substr(-23, 10)
+ // eslint-disable-next-line
+ .replace(/\_/g, '-');
+ return new Date(jsoutput).toLocaleDateString();
+ }
+ case 'urlid': {
+ const jsoutput = String(jscontent).substr(-12, 6);
+ return jsoutput;
+ }
+ default: {
+ // console.log('default');
+ break;
+ }
+ }
+ }
+ // 循环获取ptype每个请求的数据内容
+ for (const key in ptype) {
+ const link = ptype[key].url;
+ const response = await got({
+ method: 'get',
+ url: link,
+ headers: {
+ Referer: host,
+ },
+ });
+ // 由于数据结构不太一致,将所有的数据内容抽离提取成统一的对象
+ if (key === 'all') {
+ list[0] = response.data;
+ }
+ const $ = cheerio.load(list[0]);
+ switch (key) {
+ case 'all':
+ // 获取头条 + 清理不带有h4标题的li
+ htmlarr[0] = $('.content-headline').first();
+ htmlarr[1] = $('.Review-item li h4').parent();
+ htmlarr[2] = $('.img-List li h4').parent();
+ $('.author-intro img')
+ .parent()
+ .remove();
+ $('.module-img-head img')
+ .parent()
+ .remove();
+ htmlarr[3] = $('[class="module-news gray"] .module-news-main')
+ .first()
+ .children();
+ htmlarr[4] = $('[class="module-news-main mt15"]').children();
+ temp.length = 0;
+ temp.push(
+ htmlarr[0].map((index, item) => {
+ item = $(item);
+ const herfString = item.find('h3>a').attr('href');
+ const feed = {
+ category: ptype[key].name + '头条',
+ id: getData(herfString, 'urlid'),
+ title: item
+ .find('h3')
+ .text()
+ .trim(),
+ pageurl: host + herfString,
+ picurl: item
+ .find('a>img')
+ .first()
+ .attr('src'),
+ description:
+ item
+ .find('h3')
+ .text()
+ .trim() +
+ `
`,
+ date: getData(herfString, 'date'),
+ };
+ return feed;
+ })
+ );
+ temp.push(
+ htmlarr[1].map((index, item) => {
+ item = $(item);
+ const herfString = item.find('h4.module-title>a').attr('href');
+ const feed = {
+ category: ptype[key].name + '左1列',
+ id: getData(herfString, 'urlid'),
+ title: item
+ .find('h4.module-title')
+ .text()
+ .trim(),
+ pageurl: host + herfString,
+ picurl: item.find('a.module-img>img').attr('src'),
+ description:
+ item
+ .find('p.module-artile')
+ .text()
+ .trim() +
+ `
.attr('src') +
+ `)
【全文阅读】`,
+ date: getData(herfString, 'date'),
+ };
+ return feed;
+ })
+ );
+ temp.push(
+ htmlarr[2].map((index, item) => {
+ item = $(item);
+ const herfString = item.find('h4.module-title>a').attr('href');
+ const feed = {
+ category: ptype[key].name + '中间+右边2列',
+ id: getData(herfString, 'urlid'),
+ title: item
+ .find('h4.module-title')
+ .text()
+ .trim(),
+ pageurl: item.find('div.fastRead-img a>img').attr('src'),
+ picurl: item.find('a>img').attr('src'),
+ description:
+ item.find('.resemble-art').html() +
+ `
.attr('src') +
+ `)
【全文阅读】`,
+ date: getData(herfString, 'date'),
+ };
+ return feed;
+ })
+ );
+ temp.push(
+ htmlarr[3].map((index, item) => {
+ item = $(item);
+ const herfString = item
+ .find('a')
+ .first()
+ .attr('href');
+ const feed = {
+ category: ptype[key].name + '左列: 访谈、论坛',
+ id: getData(herfString, 'urlid'),
+ title: item
+ .find('a')
+ .first()
+ .text(),
+ pageurl: host + herfString,
+ picurl: `0`,
+ description:
+ item
+ .find('a')
+ .first()
+ .text() +
+ item
+ .find('p')
+ .first()
+ .text() +
+ `
【全文阅读】`,
+ date: getData(herfString, 'date'),
+ };
+ return feed;
+ })
+ );
+ temp.push(
+ htmlarr[4].map((index, item) => {
+ item = $(item);
+ const herfString = item
+ .find('a')
+ .first()
+ .attr('href');
+ const feed = {
+ category: ptype[key].name + '右列: 历史、深度',
+ id: getData(herfString, 'urlid'),
+ title: item
+ .find('a')
+ .first()
+ .text(),
+ pageurl: host + herfString,
+ picurl: `0`,
+ description:
+ item
+ .find('a')
+ .first()
+ .text() + `
【全文阅读】`,
+ date: getData(herfString, 'date'),
+ };
+ return feed;
+ })
+ );
+ // 集结所有feeds对象给到HomeFeeds;
+ for (let i = 0; i < temp.length; i++) {
+ for (let k = 0; k < temp[i].length; k++) {
+ HomeFeeds.push(temp[i][k]);
+ }
+ }
+ // 检查数据获取条数
+ // console.log(temp[0][3]);
+ console.log('HomeFeeds数组长度:' + HomeFeeds.length, '头条:' + temp[0].length, '左1列:' + temp[1].length, '中右2列:' + temp[2].length, '访谈、论坛' + temp[3].length, '历史、深度' + temp[4].length);
+ break;
+ case 'redian':
+ list[1] = response.data.items;
+ temp.length = 0;
+ temp.push(
+ list[1].map((item) => ({
+ category: ptype[key].name + '_热点',
+ id: '0',
+ title: '[热点]' + item.TITLE,
+ pageurl: host + '/' + item.HTTP_URL,
+ date: getData(item.HTTP_URL, 'date'),
+ picurl: '0',
+ }))
+ );
+ // 集结所有feeds对象给到RedianFeeds;
+ for (let i = 0; i < temp.length; i++) {
+ for (let k = 0; k < temp[i].length; k++) {
+ RedianFeeds.push(temp[i][k]);
+ }
+ }
+ // 检查数据获取条数
+ // console.log(RedianFeeds);
+ console.log('RedianFeeds数组长度:' + RedianFeeds.length, '热点:' + temp[0].length);
+ break;
+ case 'member':
+ list[2] = response.data.items;
+ temp.length = 0;
+ temp.push(
+ list[2].map((item) => ({
+ category: ptype[key].name + '_右列观察员',
+ id: item.id,
+ title: '[付费]' + item.title,
+ pageurl: 'https://member.guancha.cn/post/view?id=' + item.id,
+ picurl: item.h_pic,
+ description: item.title + `
`,
+ date: item.created_at,
+ }))
+ );
+ // 集结所有feeds对象给到MemberFeeds;
+ for (let i = 0; i < temp.length; i++) {
+ for (let k = 0; k < temp[i].length; k++) {
+ MemberFeeds.push(temp[i][k]);
+ }
+ }
+ // 检查数据获取条数
+ // console.log(MemberFeeds);
+ console.log('MemberFeeds数组长度:' + MemberFeeds.length, '观察员:' + temp[0].length);
+ break;
+ case 'gundong':
+ list[3] = response.data.fenghot;
+ list[4] = response.data.member;
+ list[5] = response.data.kuaixun;
+ temp.length = 0;
+ temp.push(
+ list[5].map((item) => ({
+ category: ptype[key].name + '_滚动新闻',
+ id: '0',
+ title: '[滚动新闻]' + item.TITLE,
+ pageurl: host + '/' + item.HTTP_URL,
+ picurl: '0',
+ date: getData(item.HTTP_URL, 'date'),
+ }))
+ );
+ temp.push(
+ list[3].map((item) => ({
+ category: ptype[key].name + '_风闻7天最热',
+ id: item.id,
+ title: '[风闻7天最热]' + item.title,
+ pageurl: 'https://user.guancha.cn/main/content?id=' + item.id,
+ picurl: '0',
+ }))
+ );
+ temp.push(
+ list[4].map((item) => ({
+ category: ptype[key].name + '_观察员',
+ id: item.id,
+ title: '[观察员付费]' + item.title,
+ pageurl: 'https://member.guancha.cn/post/view?id=' + item.id,
+ picurl: '0',
+ }))
+ );
+
+ for (let i = 0; i < temp.length; i++) {
+ for (let k = 0; k < temp[i].length; k++) {
+ GundongFeeds.push(temp[i][k]);
+ }
+ }
+ // 检查数据获取条数
+ // console.log(GundongFeeds);
+ console.log('GundongFeeds数组长度:' + GundongFeeds.length, '滚动新闻:' + temp[0].length, '风闻7天最热:' + temp[1].length, '观察员付费:' + temp[2].length);
+ break;
+ }
+ }
+ // 集合所有数据,控制分类输出
+ switch (type) {
+ case 'all':
+ AllFeeds = HomeFeeds.concat(RedianFeeds, MemberFeeds, GundongFeeds);
+ break;
+ case 'home':
+ AllFeeds = HomeFeeds;
+ break;
+ case 'others':
+ AllFeeds = RedianFeeds.concat(MemberFeeds, GundongFeeds);
+ break;
+ default:
+ AllFeeds = HomeFeeds;
+ break;
+ }
+ ctx.state.data = {
+ title: `观察者-首页新闻`,
+ link: host,
+ description: `观察者网,致力于荟萃中外思想者精华,鼓励青年学人探索,建中西文化交流平台,为崛起中的精英提供决策参考。`,
+ allowEmpty: true,
+ item: AllFeeds.map((item) => ({
+ title: item.title,
+ description: item.description || item.title + `
【全文阅读】`,
+ pubDate: item.date || new Date().toLocaleDateString(),
+ link: item.pageurl,
+ category: item.category,
+ author: item.category,
+ guid: item.id,
+ })),
+ };
+};