mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-09 14:40:23 +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": {
|
"TWITTER_CONSUMER_SECRET": {
|
||||||
"required": false
|
"required": false
|
||||||
},
|
},
|
||||||
"TWITTER_ACCESS_TOKEN": {
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"TWITTER_ACCESS_TOKEN_SECRET": {
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"YOUTUBE_KEY": {
|
"YOUTUBE_KEY": {
|
||||||
"required": false
|
"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`: [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_CONSUMER_SECRET`: Twitter Consumer Secret, support multiple keys, split them with `,`
|
||||||
|
|
||||||
- `TWITTER_ACCESS_TOKEN`: Twitter Access Token
|
|
||||||
|
|
||||||
- `TWITTER_ACCESS_TOKEN_SECRET`: Twitter Access Token Secret
|
|
||||||
|
|
||||||
- `youtube`: [API Key application](https://console.developers.google.com/)
|
- `youtube`: [API Key application](https://console.developers.google.com/)
|
||||||
|
|
||||||
|
|||||||
@@ -380,13 +380,9 @@ RSSHub 支持 `memory` 和 `redis` 两种缓存方式
|
|||||||
|
|
||||||
- twitter 全部路由: [申请地址](https://apps.twitter.com)
|
- 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_CONSUMER_SECRET`: Twitter Consumer Secret,支持多个 key,用英文逗号 `,` 隔开,顺序与 key 对应
|
||||||
|
|
||||||
- `TWITTER_ACCESS_TOKEN`: Twitter Access Token
|
|
||||||
|
|
||||||
- `TWITTER_ACCESS_TOKEN_SECRET`: Twitter Access Token Secret
|
|
||||||
|
|
||||||
- youtube 全部路由: [申请地址](https://console.developers.google.com/)
|
- youtube 全部路由: [申请地址](https://console.developers.google.com/)
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,6 @@ module.exports = {
|
|||||||
twitter: {
|
twitter: {
|
||||||
consumer_key: process.env.TWITTER_CONSUMER_KEY,
|
consumer_key: process.env.TWITTER_CONSUMER_KEY,
|
||||||
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
|
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
|
||||||
access_token: process.env.TWITTER_ACCESS_TOKEN,
|
|
||||||
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET,
|
|
||||||
},
|
},
|
||||||
youtube: {
|
youtube: {
|
||||||
key: process.env.YOUTUBE_KEY,
|
key: process.env.YOUTUBE_KEY,
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ if (config.disqus && config.disqus.api_key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Twitter
|
// 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/user/:id', require('./routes/twitter/user'));
|
||||||
router.get('/twitter/list/:id/:name', require('./routes/twitter/list'));
|
router.get('/twitter/list/:id/:name', require('./routes/twitter/list'));
|
||||||
router.get('/twitter/likes/:id', require('./routes/twitter/likes'));
|
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 utils = require('./utils');
|
||||||
|
|
||||||
const T = new Twit(config.twitter);
|
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const id = ctx.params.id;
|
const id = ctx.params.id;
|
||||||
const result = await T.get('favorites/list', {
|
const result = await utils.getTwit().get('favorites/list', {
|
||||||
screen_name: id,
|
screen_name: id,
|
||||||
tweet_mode: 'extended',
|
tweet_mode: 'extended',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
const Twit = require('twit');
|
|
||||||
const config = require('@/config');
|
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
|
|
||||||
const T = new Twit(config.twitter);
|
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const { id, name } = ctx.params;
|
const { id, name } = ctx.params;
|
||||||
const result = await T.get('lists/statuses', {
|
const result = await utils.getTwit().get('lists/statuses', {
|
||||||
owner_screen_name: id,
|
owner_screen_name: id,
|
||||||
slug: name,
|
slug: name,
|
||||||
tweet_mode: 'extended',
|
tweet_mode: 'extended',
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
const Twit = require('twit');
|
|
||||||
const config = require('@/config');
|
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
|
|
||||||
const T = new Twit(config.twitter);
|
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const id = ctx.params.id;
|
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,
|
screen_name: id,
|
||||||
tweet_mode: 'extended',
|
tweet_mode: 'extended',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
const URL = require('url');
|
const URL = require('url');
|
||||||
|
const config = require('@/config');
|
||||||
|
const Twit = require('twit');
|
||||||
|
|
||||||
const ProcessFeed = ({ data = [] }) => {
|
const ProcessFeed = ({ data = [] }) => {
|
||||||
const getQueryParams = (url) => URL.parse(url, true).query;
|
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 = {
|
module.exports = {
|
||||||
ProcessFeed,
|
ProcessFeed,
|
||||||
|
getTwit,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user