抱歉发布此内容...
我想做的就是使用 Twitter API 发布一条推文。
除了我自己的开发帐户下的 Twitter 帐户之外,我不想代表任何人发帖。
只是一个简单的应用程序,它有一个 Twitter 页面,可以使用 V2 API 发布推文。
我已经尝试了几个软件包,我已经浏览了所有文档,与 AI 来回
这是我当前的代码
require('dotenv').config({ path: __dirname + '/.env' });
const {TwitterApi} = require('twitter-api-v2');
const OAuth = require('oauth-1.0a');
const crypto = require('crypto');
const fetch = require('node-fetch');
const oauth = OAuth({
consumer: {
key: process.env.TWITTER_CONSUMER_KEY,
secret: process.env.TWITTER_CONSUMER_SECRET
},
signature_method: 'HMAC-SHA1',
hash_function(base_string, key) {
return crypto.createHmac('sha1', key).update(base_string).digest('base64');
},
});
const token = {
key: process.env.TWITTER_ACCESS_TOKEN,
secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
};
const client = new TwitterApi({
auth: {
oauth1a: {
consumerKey: oauth.consumer.key,
consumerSecret: oauth.consumer.secret,
token: token.key,
tokenSecret: token.secret,
},
},
});
const tweet = async () => {
try {
const response = await client.v2.tweet({
text: 'Hello, world!',
});
console.log('Tweet successful:', response.data);
} catch (error) {
console.error('Tweet failed:', error);
}
};
tweet();
此代码导致
Tweet failed: ApiResponseError: Request failed with code 401
data: {
title: 'Unauthorized',
type: 'about:blank',
status: 401,
detail: 'Unauthorized'
}
}
任何指导都会有帮助。
所以我终于用这个评论解决了这个问题
https://github.com/Significant-Gravitas/Auto-GPT/issues/2194#issuecomment-1513626102
访问令牌一直显示读取访问权限,尽管我的免费访问权限允许发布推文。我按照上面的 oauth2 链接中的步骤操作,然后我必须重新生成我的密钥,这次具有读/写访问权限。
const { TwitterApi } = require('twitter-api-v2');
const client = new TwitterApi({
appKey: process.env.TWITTER_CONSUMER_KEY,
appSecret: process.env.TWITTER_CONSUMER_SECRET,
accessToken: process.env.TWITTER_ACCESS_TOKEN,
accessSecret: process.env.TWITTER_ACCESS_TOKEN_SECRET,
});
async function postTweet(tweetText) {
try {
const tweet = await client.v2.tweet(tweetText);
console.log(`Tweet posted with ID ${tweet.data.id}`);
} catch (error) {
console.error(`Failed to post tweet: ${error}`);
}
}
postTweet('Hello world! This is my first tweet with the Twitter API v2.');