如何使用 Twitter API 发推文

问题描述 投票:0回答:1

抱歉发布此内容...

我想做的就是使用 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'
  }
}

任何指导都会有帮助。

javascript node.js api twitter oauth
1个回答
0
投票

所以我终于用这个评论解决了这个问题

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.');
© www.soinside.com 2019 - 2024. All rights reserved.