diff --git a/docs/en/social-media.md b/docs/en/social-media.md
index 793f062458..20d3692cc9 100644
--- a/docs/en/social-media.md
+++ b/docs/en/social-media.md
@@ -148,6 +148,10 @@ This route requires Twitter token's corresponding id, therefore it's only availb
+### Trends
+
+
+
## Youtube
::: tip Tiny Tiny RSS users please notice
diff --git a/lib/router.js b/lib/router.js
index 374cf47f0d..91b4f79435 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -205,6 +205,7 @@ router.get('/twitter/list/:id/:name', require('./routes/twitter/list'));
router.get('/twitter/likes/:id', require('./routes/twitter/likes'));
router.get('/twitter/followings/:id', require('./routes/twitter/followings'));
router.get('/twitter/keyword/:keyword', require('./routes/twitter/keyword'));
+router.get('/twitter/trends/:woeid?', require('./routes/twitter/trends'));
// Instagram
router.get('/instagram/user/:id', require('./routes/instagram/user'));
diff --git a/lib/routes/twitter/trends.js b/lib/routes/twitter/trends.js
new file mode 100644
index 0000000000..b839a16848
--- /dev/null
+++ b/lib/routes/twitter/trends.js
@@ -0,0 +1,23 @@
+const utils = require('./utils');
+const config = require('@/config').value;
+
+module.exports = async (ctx) => {
+ if (!config.twitter || !config.twitter.consumer_key || !config.twitter.consumer_secret) {
+ throw 'Twitter RSS is disabled due to the lack of relevant config';
+ }
+ const woeid = ctx.params.woeid || 1; // Global information is available by using 1 as the WOEID
+ const result = await utils.getTwit().get('trends/place', { id: woeid });
+ const [{ trends }] = result.data;
+
+ ctx.state.data = {
+ title: `Twitter Trends on ${woeid}(Yahoo! Where On Earth ID)`,
+ link: `https://twitter.com/i/trends`,
+ item: trends
+ .filter((t) => !t.promoted_content)
+ .map((t) => ({
+ title: t.name,
+ link: t.url,
+ description: t.name + (t.tweet_volume ? ` (${t.tweet_volume})` : ''),
+ })),
+ };
+};