mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-09 23:00:48 +08:00
feat: support multiple twitter key
This commit is contained in:
6
app.json
6
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
|
||||
}
|
||||
|
||||
@@ -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/)
|
||||
|
||||
|
||||
@@ -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/)
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'));
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user