From a0026488195a6545bc31f8551e63d740b4e56949 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Mon, 10 Jun 2019 19:23:25 +0800 Subject: [PATCH] feat: support multiple twitter key --- app.json | 6 ------ docs/en/install/README.md | 8 ++------ docs/install/README.md | 8 ++------ lib/config.js | 2 -- lib/router.js | 2 +- lib/routes/twitter/likes.js | 6 +----- lib/routes/twitter/list.js | 6 +----- lib/routes/twitter/user.js | 6 +----- lib/routes/twitter/utils.js | 26 ++++++++++++++++++++++++++ 9 files changed, 34 insertions(+), 36 deletions(-) diff --git a/app.json b/app.json index aaa659890b..c64bca8827 100644 --- a/app.json +++ b/app.json @@ -29,12 +29,6 @@ "TWITTER_CONSUMER_SECRET": { "required": false }, - "TWITTER_ACCESS_TOKEN": { - "required": false - }, - "TWITTER_ACCESS_TOKEN_SECRET": { - "required": false - }, "YOUTUBE_KEY": { "required": false } diff --git a/docs/en/install/README.md b/docs/en/install/README.md index efc6eb5b44..8b322eec0e 100644 --- a/docs/en/install/README.md +++ b/docs/en/install/README.md @@ -314,13 +314,9 @@ When adding feeds using RSS readers with HTTP Basic Authentication support, auth - `twitter`: [application creation](https://apps.twitter.com) - - `TWITTER_CONSUMER_KEY`: Twitter Consumer Key + - `TWITTER_CONSUMER_KEY`: Twitter Consumer Key, support multiple keys, split them with `,` - - `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret - - - `TWITTER_ACCESS_TOKEN`: Twitter Access Token - - - `TWITTER_ACCESS_TOKEN_SECRET`: Twitter Access Token Secret + - `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret, support multiple keys, split them with `,` - `youtube`: [API Key application](https://console.developers.google.com/) diff --git a/docs/install/README.md b/docs/install/README.md index c87683c04f..d0751a717f 100644 --- a/docs/install/README.md +++ b/docs/install/README.md @@ -380,13 +380,9 @@ RSSHub 支持 `memory` 和 `redis` 两种缓存方式 - twitter 全部路由: [申请地址](https://apps.twitter.com) - - `TWITTER_CONSUMER_KEY`: Twitter Consumer Key + - `TWITTER_CONSUMER_KEY`: Twitter Consumer Key,支持多个 key,用英文逗号 `,` 隔开 - - `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret - - - `TWITTER_ACCESS_TOKEN`: Twitter Access Token - - - `TWITTER_ACCESS_TOKEN_SECRET`: Twitter Access Token Secret + - `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret,支持多个 key,用英文逗号 `,` 隔开,顺序与 key 对应 - youtube 全部路由: [申请地址](https://console.developers.google.com/) diff --git a/lib/config.js b/lib/config.js index d27be3da93..7b2f70f80f 100644 --- a/lib/config.js +++ b/lib/config.js @@ -42,8 +42,6 @@ module.exports = { twitter: { consumer_key: process.env.TWITTER_CONSUMER_KEY, consumer_secret: process.env.TWITTER_CONSUMER_SECRET, - access_token: process.env.TWITTER_ACCESS_TOKEN, - access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET, }, youtube: { key: process.env.YOUTUBE_KEY, diff --git a/lib/router.js b/lib/router.js index 074c2c48bf..aa310eaa35 100644 --- a/lib/router.js +++ b/lib/router.js @@ -173,7 +173,7 @@ if (config.disqus && config.disqus.api_key) { } // Twitter -if (config.twitter && config.twitter.consumer_key && config.twitter.consumer_secret && config.twitter.access_token && config.twitter.access_token_secret) { +if (config.twitter && config.twitter.consumer_key && config.twitter.consumer_secret) { router.get('/twitter/user/:id', require('./routes/twitter/user')); router.get('/twitter/list/:id/:name', require('./routes/twitter/list')); router.get('/twitter/likes/:id', require('./routes/twitter/likes')); diff --git a/lib/routes/twitter/likes.js b/lib/routes/twitter/likes.js index 7a7cdc6073..3f177a9f27 100644 --- a/lib/routes/twitter/likes.js +++ b/lib/routes/twitter/likes.js @@ -1,12 +1,8 @@ -const Twit = require('twit'); -const config = require('@/config'); const utils = require('./utils'); -const T = new Twit(config.twitter); - module.exports = async (ctx) => { const id = ctx.params.id; - const result = await T.get('favorites/list', { + const result = await utils.getTwit().get('favorites/list', { screen_name: id, tweet_mode: 'extended', }); diff --git a/lib/routes/twitter/list.js b/lib/routes/twitter/list.js index a4c654f0ed..284f31272e 100644 --- a/lib/routes/twitter/list.js +++ b/lib/routes/twitter/list.js @@ -1,12 +1,8 @@ -const Twit = require('twit'); -const config = require('@/config'); const utils = require('./utils'); -const T = new Twit(config.twitter); - module.exports = async (ctx) => { const { id, name } = ctx.params; - const result = await T.get('lists/statuses', { + const result = await utils.getTwit().get('lists/statuses', { owner_screen_name: id, slug: name, tweet_mode: 'extended', diff --git a/lib/routes/twitter/user.js b/lib/routes/twitter/user.js index 01ab5be57e..6f1515b8a3 100644 --- a/lib/routes/twitter/user.js +++ b/lib/routes/twitter/user.js @@ -1,12 +1,8 @@ -const Twit = require('twit'); -const config = require('@/config'); const utils = require('./utils'); -const T = new Twit(config.twitter); - module.exports = async (ctx) => { const id = ctx.params.id; - const result = await T.get('statuses/user_timeline', { + const result = await utils.getTwit().get('statuses/user_timeline', { screen_name: id, tweet_mode: 'extended', }); diff --git a/lib/routes/twitter/utils.js b/lib/routes/twitter/utils.js index de39f9188b..8fa43e92c4 100644 --- a/lib/routes/twitter/utils.js +++ b/lib/routes/twitter/utils.js @@ -1,4 +1,6 @@ const URL = require('url'); +const config = require('@/config'); +const Twit = require('twit'); const ProcessFeed = ({ data = [] }) => { const getQueryParams = (url) => URL.parse(url, true).query; @@ -106,6 +108,30 @@ const ProcessFeed = ({ data = [] }) => { }); }; +const consumer_keys = config.twitter.consumer_key.split(','); +const consumer_secrets = config.twitter.consumer_secret.split(','); +const T = {}; +let count = 0; +let index = -1; + +consumer_keys.forEach((consumer_key, index) => { + const consumer_secret = consumer_secrets[index]; + if (consumer_key && consumer_secret) { + T[index] = new Twit({ + consumer_key, + consumer_secret, + app_only_auth: true, + }); + count = index + 1; + } +}); + +const getTwit = () => { + index++; + return T[index % count]; +}; + module.exports = { ProcessFeed, + getTwit, };