fix: 修复36氪快讯, b站UP主动态, segmentfault频道, 界面新闻 (#4480)

This commit is contained in:
maijver
2020-04-19 19:01:33 +08:00
committed by GitHub
parent 68b4e172f5
commit f536851d57
4 changed files with 31 additions and 59 deletions
+10 -14
View File
@@ -3,24 +3,20 @@ const got = require('@/utils/got');
module.exports = async (ctx) => {
const response = await got({
method: 'get',
url: `https://36kr.com/api/newsflash?per_page=30`,
url: `https://36kr.com/newsflashes`,
headers: {
'Content-Type': 'application/json; charset=utf-8',
Host: '36kr.com',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',
},
});
const regexp = /<script>window\.initialState=(.*?)<\/script>/;
const newsflashes = JSON.parse(response.data.match(regexp)[1]);
const newsflashes = response.data.data.items;
let newsflashesList = [];
for (let i = 0; i < newsflashes.length; i++) {
newsflashesList = newsflashesList.concat(newsflashes[i]);
}
const out = newsflashesList.map((item) => {
const date = item.published_at;
const link = item.news_url;
const title = item.title;
const description = item.description;
const out = newsflashes.newsflashList.flow.itemList.map((item) => {
const link = item.templateMaterial.sourceUrlRoute ? new URL(`http://www.example.com/${item.templateMaterial.sourceUrlRoute}`).searchParams.get('url') : `https://36kr.com/newsflashes/${item.itemId}`;
const date = item.templateMaterial.publishTime;
const title = item.templateMaterial.widgetTitle;
const description = item.templateMaterial.widgetContent;
const single = {
title,
+9 -3
View File
@@ -45,12 +45,18 @@ module.exports = async (ctx) => {
}
const getDes = (data) => data.desc || data.description || data.content || data.summary || (data.vest && data.vest.content) + (data.sketch && data.sketch.title) || data.intro;
const getOriginDes = (data) =>
(data && data.author && data.author.name && `转发自: @${data.author.name}: `) + (data && data.title) + (data && data.image_urls && data.image_urls.length > 0 && `<br><img src="${data.image_urls[0]}">`) ||
(data && data.apiSeasonInfo && data.apiSeasonInfo.title && `转发自: ${data.apiSeasonInfo.title}`) + (data && data.cover && `<br><img src="${data.cover}">`) ||
'';
return {
title: data.title || data.description || data.content || (data.vest && data.vest.content),
description: `${getDes(data)}${origin ? `<br><br>转发自: @${(origin.user && origin.user.uname) || (origin.owner && origin.owner.name)}: ${getDes(origin.item || origin)}` : ''}${
!disableEmbed && data.aid ? `<br><br>${utils.iframe(data.aid)}<br>` : ''
}<br>${imgHTML} `,
description: `${getDes(data)}${
origin && (origin.user || origin.owner)
? `<br><br>转发自: @${(origin.user && (origin.user.uname || origin.user.name)) || (origin.owner && origin.owner.name)}: ${getDes(origin.item || origin)}`
: `${getOriginDes(origin)}`
}${!disableEmbed && data.aid ? `<br><br>${utils.iframe(data.aid)}<br>` : ''}<br>${imgHTML} `,
pubDate: new Date(item.desc.timestamp * 1000).toUTCString(),
link: link,
};
+11 -41
View File
@@ -3,56 +3,23 @@ const got = require('@/utils/got');
const util = require('./utils');
module.exports = async (ctx) => {
const url = `https://www.jiemian.com/lists/${ctx.params.cid}.html`;
const url = `https://a.jiemian.com/index.php?m=lists&a=ajaxNews&cid=${ctx.params.cid}&page=1`;
const res = await got.get(url);
const $ = cheerio.load(res.data);
let type, list;
let html = res.data.substring(1);
html = html.substring(0, html.length - 1);
const className = $('#load-list')[0].attribs.class;
if (className) {
switch (className) {
case 'list-view':
type = 'list';
list = $('.item-news').slice(0, 10).get();
break;
case 'list-view card':
type = 'card';
list = $('.news-view').slice(0, 10).get();
break;
default:
break;
}
}
const parsed = JSON.parse(html).rst;
const doc = cheerio.load(parsed);
const list = doc('.item-news').slice(0, 10).get();
const proList = [];
let out = await Promise.all(
list.map(async (item) => {
const $ = cheerio.load(item);
let title, itemUrl;
switch (type) {
case 'list':
title = $('.item-main a').text();
itemUrl = $('.item-main a').attr('href');
break;
case 'card':
title = $('.news-img a').attr('title');
if (!title) {
title = $('a').text();
}
itemUrl = $('.news-img a').attr('href');
break;
default:
break;
}
const title = $('.item-main a').text();
const itemUrl = $('.item-main a').attr('href');
const cache = await ctx.cache.get(itemUrl);
if (cache) {
return Promise.resolve(JSON.parse(cache));
@@ -70,6 +37,9 @@ module.exports = async (ctx) => {
out = util.ProcessFeed(out, responses);
const res2 = await got.get(`https://www.jiemian.com/lists/${ctx.params.cid}.html`);
const $ = cheerio.load(res2.data);
ctx.state.data = {
title: $('title').text(),
link: url,
+1 -1
View File
@@ -62,7 +62,7 @@ module.exports = async (ctx) => {
date_value = date_v.substring(0, date_v.length - 3);
} else {
// 文章
description = $('div.article.fmt.article__content')
description = $('article.article.fmt.article-content')
.html()
.replace(/data-src="/g, 'src="https://segmentfault.com')
.trim();