fix(route)(twitter): quote ignored in web API (#10361)

* fix(route)(twitter): quote ignored in web API

* refactor: migrate to v2

Signed-off-by: Rongrong <i@rong.moe>
This commit is contained in:
Rongrong
2022-08-01 20:25:32 +08:00
committed by GitHub
parent e2ca9b81f6
commit df5d3fc918
23 changed files with 108 additions and 127 deletions
-56
View File
@@ -49,62 +49,6 @@
{ title: '关注的新作品', docs: 'https://docs.rsshub.app/social-media.html#pixiv', source: '/bookmark_new_illust.php', target: '/pixiv/user/illustfollows' },
],
},
'twitter.com': {
_name: 'Twitter',
'.': [
{
title: '用户时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (!['home', 'explore', 'notifications', 'messages', 'explore', 'search'].includes(params.id)) {
return '/twitter/user/:id';
}
},
},
{
title: '用户媒体时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id/media',
target: (params) => {
if (!['home', 'explore', 'notifications', 'messages', 'explore', 'search'].includes(params.id)) {
return '/twitter/media/:id';
}
},
},
{
title: '用户关注时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (!['home', 'explore', 'notifications', 'messages', 'explore', 'search'].includes(params.id)) {
return '/twitter/followings/:id';
}
},
},
{
title: '用户喜欢列表',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (!['home', 'explore', 'notifications', 'messages', 'explore', 'search'].includes(params.id)) {
return '/twitter/likes/:id';
}
},
},
{
title: '列表时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id/lists/:name',
target: (params) => {
if (!['home', 'explore', 'notifications', 'messages', 'explore', 'search'].includes(params.id)) {
return '/twitter/list/:id/:name';
}
},
},
{ title: '关键词', docs: 'https://docs.rsshub.app/social-media.html#twitter', source: '/search', target: (params, url) => `/twitter/keyword/${new URL(url).searchParams.get('q')}` },
],
},
'github.com': {
_name: 'GitHub',
'.': [
+2 -2
View File
@@ -744,11 +744,11 @@ Instagram Stories 没有可靠的 guid,你的 RSS 阅读器可能将同一条
### 关键词
<Route author="DIYgod yindaheng98 Rongronggg9" example="/twitter/keyword/RSSHub" path="/twitter/keyword/:keyword/:routeParams?/limit?" :paramsDesc="['关键词', '额外参数;请参阅上面的说明和表格', '查询前多少条']" radar="1" rssbud="1"/>
<Route author="DIYgod yindaheng98 Rongronggg9" example="/twitter/keyword/RSSHub" path="/twitter/keyword/:keyword/:routeParams?" :paramsDesc="['关键词', '额外参数;请参阅上面的说明和表格']" radar="1" rssbud="1"/>
### Trends
<Route author="sakamossan" example="/twitter/trends/23424856" path="/twitter/trends/:woeid?" :paramsDesc="['Where On Earth ID. 默认 woeid=1 (World Wide)']" radar="1" rssbud="1"/>
<Route author="sakamossan" example="/twitter/trends/23424856" path="/twitter/trends/:woeid?" :paramsDesc="['Where On Earth ID. 默认 `1` (World Wide)']" radar="1" rssbud="1"/>
## Vimeo
-51
View File
@@ -80,57 +80,6 @@ module.exports = {
},
],
},
'twitter.com': {
_name: 'Twitter',
'.': [
{
title: '用户时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/user/:id';
}
},
},
{
title: '用户关注时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/followings/:id';
}
},
},
{
title: '用户喜欢列表',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/likes/:id';
}
},
},
{
title: '列表时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id/lists/:name',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/list/:id/:name';
}
},
},
{
title: '关键词',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/search',
target: (params, url) => `/twitter/keyword/${new URL(url).searchParams.get('q')}`,
},
],
},
'smzdm.com': {
_name: '什么值得买',
www: [
+7 -7
View File
@@ -152,13 +152,13 @@ router.get('/jinritoutiao/keyword/:keyword', lazyloadRouteHandler('./routes/jinr
router.get('/disqus/posts/:forum', lazyloadRouteHandler('./routes/disqus/posts'));
// Twitter
router.get('/twitter/user/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/user'));
router.get('/twitter/list/:id/:name/:routeParams?', lazyloadRouteHandler('./routes/twitter/list'));
router.get('/twitter/likes/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/likes'));
router.get('/twitter/followings/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/followings'));
router.get('/twitter/keyword/:keyword/:routeParams?/:limit?', lazyloadRouteHandler('./routes/twitter/keyword'));
router.get('/twitter/trends/:woeid?', lazyloadRouteHandler('./routes/twitter/trends'));
router.get('/twitter/media/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/media'));
// router.get('/twitter/user/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/user'));
// router.get('/twitter/list/:id/:name/:routeParams?', lazyloadRouteHandler('./routes/twitter/list'));
// router.get('/twitter/likes/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/likes'));
// router.get('/twitter/followings/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/followings'));
// router.get('/twitter/keyword/:keyword/:routeParams?/:limit?', lazyloadRouteHandler('./routes/twitter/keyword'));
// router.get('/twitter/trends/:woeid?', lazyloadRouteHandler('./routes/twitter/trends'));
// router.get('/twitter/media/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/media'));
// YouTube migrated to v2
// router.get('/youtube/user/:username/:embed?', lazyloadRouteHandler('./routes/youtube/user'));
@@ -1,6 +1,6 @@
const config = require('@/config').value;
const logger = require('@/utils/logger');
const utils = require('@/routes/twitter/utils');
const utils = require('./utils');
module.exports = async (ctx, devApiImpl, webApiImpl) => {
const { force_web_api } = utils.parseRouteParams(ctx.params.routeParams);
@@ -2,7 +2,7 @@ const utils = require('../utils');
module.exports = async (ctx) => {
const keyword = ctx.params.keyword;
const limit = ctx.params.limit ?? 50;
const limit = ctx.query.limit ?? 50;
const client = await utils.getAppClient();
const data = await client.v1.get('search/tweets.json', {
q: keyword,
+9
View File
@@ -0,0 +1,9 @@
module.exports = {
'/followings/:id/:routeParams?': ['DIYgod'],
'/keyword/:keyword/:routeParams?/:limit?': ['DIYgod', 'yindaheng98', 'Rongronggg9'],
'/likes/:id/:routeParams?': ['xyqfer'],
'/list/:id/:name/:routeParams?': ['xyqfer'],
'/media/:id/:routeParams?': ['yindaheng98', 'Rongronggg9'],
'/trends/:woeid?': ['sakamossan'],
'/user/:id/:routeParams?': ['DIYgod', 'yindaheng98', 'Rongronggg9'],
};
+63
View File
@@ -0,0 +1,63 @@
module.exports = {
'twitter.com': {
_name: 'Twitter',
'.': [
{
title: '用户时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/user/:id';
}
},
},
{
title: '用户媒体时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id/media',
target: (params) => {
if (!['home', 'explore', 'notifications', 'messages', 'explore', 'search'].includes(params.id)) {
return '/twitter/media/:id';
}
},
},
{
title: '用户关注时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/followings/:id';
}
},
},
{
title: '用户喜欢列表',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/likes/:id';
}
},
},
{
title: '列表时间线',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/:id/lists/:name',
target: (params) => {
if (params.id !== 'home' && params.id !== 'explore' && params.id !== 'notifications' && params.id !== 'messages' && params.id !== 'explore' && params.id !== 'search') {
return '/twitter/list/:id/:name';
}
},
},
{
title: '关键词',
docs: 'https://docs.rsshub.app/social-media.html#twitter',
source: '/search',
target: (params, url) => `/twitter/keyword/${new URL(url).searchParams.get('q')}`,
},
],
},
};
+9
View File
@@ -0,0 +1,9 @@
module.exports = (router) => {
router.get('/followings/:id/:routeParams?', require('./followings'));
router.get('/keyword/:keyword/:routeParams?/:limit?', require('./keyword'));
router.get('/likes/:id/:routeParams?', require('./likes'));
router.get('/list/:id/:name/:routeParams?', require('./list'));
router.get('/media/:id/:routeParams?', require('./media'));
router.get('/trends/:woeid?', require('./trends'));
router.get('/user/:id/:routeParams?', require('./user'));
};
@@ -111,18 +111,25 @@ const timelineKeywords = (keywords, params = {}) =>
});
function gatherLegacyFromData(entries, filter = 'tweet-') {
const tweets_dict = {};
const tweets = [];
entries.forEach((entry) => {
tweets_dict[entry.sortIndex] = entry;
});
entries.forEach((entry) => {
if (entry.entryId && entry.entryId.includes(filter)) {
const legacy = entry.content.itemContent.tweet_results.result.legacy;
legacy.user = entry.content.itemContent.tweet_results.result.core.user_results.result.legacy;
if (legacy.retweeted_status_result && legacy.retweeted_status_result.result) {
legacy.retweeted_status = legacy.retweeted_status_result.result.legacy;
legacy.retweeted_status.user = legacy.retweeted_status_result.result.core.user_results.result.legacy;
const tweet = entry.content.itemContent.tweet_results.result;
const retweet = tweet.legacy.retweeted_status_result?.result;
for (const t of [tweet, retweet]) {
if (!t?.legacy) {
continue;
}
t.legacy.user = t.core.user_results.result.legacy;
const quote = t.quoted_status_result?.result;
if (quote) {
t.legacy.quoted_status = quote.legacy;
t.legacy.quoted_status.user = quote.core.user_results.result.legacy;
}
}
const legacy = tweet.legacy;
if (retweet) {
legacy.retweeted_status = retweet.legacy;
}
tweets.push(legacy);
}