feat: support multiple twitter key

This commit is contained in:
DIYgod
2019-06-10 19:23:25 +08:00
parent d7f9c5cc0e
commit a002648819
9 changed files with 34 additions and 36 deletions

View File

@@ -29,12 +29,6 @@
"TWITTER_CONSUMER_SECRET": {
"required": false
},
"TWITTER_ACCESS_TOKEN": {
"required": false
},
"TWITTER_ACCESS_TOKEN_SECRET": {
"required": false
},
"YOUTUBE_KEY": {
"required": false
}

View File

@@ -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/)

View File

@@ -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/)

View File

@@ -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,

View File

@@ -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'));

View File

@@ -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',
});

View File

@@ -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',

View File

@@ -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',
});

View File

@@ -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,
};