所以你想创建一个 Twitter 机器人(1/3)
GenAI LIVE! | 2025年6月4日
我的爱好之一是创建推特机器人,比如@fakefantas ,你可能很熟悉。如果你不熟悉也没关系,这不是重点。重点是,有时人们会问我怎么做,我很喜欢谈论这个,因为理论上来说,这很复杂,但当你把它分解成几个部分时,就很容易管理了!
(我的大多数机器人只是在计时器上随机发送推文,这意味着它们不会听取回复或知道他们之前发布的内容。这在很大程度上有助于降低复杂性,但希望在本系列结束时,您能够弄清楚如何添加此功能)
机器人是一个很酷的“问题”,因为它乍一听就让人望而生畏,需要学习的东西太多了!然而,当你把问题分解成更小的问题时,你就会发现有很多东西需要学习,而且你得把问题分解三遍。进步!
说到机器人,它有一部分是创建内容。这部分工作就是凭空创造内容。这很难,因为你必须有趣,但有时你也需要图片甚至视频,我们必须以某种方式实现自动化,我通常使用Puppeteer。
- 然后,你需要进行第二部分,将你的内容转换成一条推文,并显示在 twitter.com 上。这很难,因为后端开发和 API 密钥都是垃圾,但幸运的是,我们正在做的是一个非常典型的示例。
- 第三部分是我们将其部署到其他人的计算机上并使其自动运行,而不是我们自己做,我使用Heroku来实现这一点,但像 Glitch 这样的东西也可以很好地工作!
在这个第一个教程中,我想重点介绍第二部分。(因为我数不过来)我们将在Glitch上创建我们的应用程序,到最后我们将能够输入npm run tweet
并看到屏幕上弹出的东西。
有件事!我们使用 Glitch 来避免在本地设置 Node,但它可以有效地托管和部署我们的代码,因此可以为我们完成很多第三步的工作。我个人使用 GitHub+Heroku,因为它们在协作和调度方面提供了更强大的工具。
发推文
让我们从基础开始,让我们创建一个 JS 函数来告诉我们星期几,我们将忽略时区,因为这不是今天的重点,并且不会让它变得比必须的更复杂。
/*tweet.js*/
const weekdays = [
"Sunday", /*america wtf*/
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
];
const tweet = function () {
return `Wooo todays a ${weekdays[new Date().getDay()]}`;
};
console.log(tweet());
如果你运行node ./tweet.js
(而且是星期六),你现在会得到Wooo todays a 6
。一旦你满意了,最后一件事是,在我们创建文件时,控制台日志记录规则用于调试,但当我们完成后,这将成为一个更大系统的一部分,所以让我们导出tweet
它吧!我们稍后会导入它。你可以随意进行任何更改,我们真正关心的是调用它时tweet()
会返回一个不超过 280 个字符的文本。
- console.log(tweet());
+ module.exports = tweet;
把它放在你的厨房柜台上(或者任何你编写代码的地方),让我们集中精力成为一名 Twitter 开发人员:
制作 Twitter 应用
我们想在dev.twitter.com上创建一个“应用” 。如果你四处看看,就会发现 Twitter 在这方面真的已经彻底失去了冷静。不过还好,我们的用例还在。
随着 Twitter 不再是一个古怪的网站,而越来越成为 NBCUniversal 的直接竞争对手,开发者控制台也在不断变化,但核心概念是不变的。
- 你需要一个“访问令牌”(以及密钥)。它们会告诉 Twitter 哪个用户正在发布内容(而不是用户名/密码组合)。
- 要获取访问令牌,你需要创建一个包含“消费者密钥”(以及密码)的应用。这会告知 Twitter 哪个“应用”正在向其发布内容(而不是用户浏览器)。总共需要四个密钥。好东西总是成双成对的。
- 要获取你的消费者密钥/秘密,你需要创建一个“Twitter 应用”。截至撰写本文时,创建应用后,Twitter 会立即提供你当前账户的访问令牌/密钥,这真是太棒了。
找到“创建应用按钮”,点击并填写表单。按照 Twitter 的要求操作,最后你应该就能找到一个包含你的代币的页面:
重要提示:这些令牌就像您的密码一样,任何拥有这四个令牌的人都可以访问您的 Twitter 帐户。请谨慎使用它们!
让我们回到编码
如果你在 Twitter 开发者网站上逛了一下,就会发现那里有非常详细的文档,教你如何在 Twitter 上发帖、发出经过身份验证的请求等等。我喜欢使用 Node 的一点(而我那位更喜欢重新发明轮子而不是开车的前男友却很讨厌这一点)在于,我们的工作已经有人帮我们完成了。
仔细阅读一下该twitter
软件包的页面,你会发现我们已经在顶部完成了身份验证(我们的 4 个令牌!),并在下方发布了一些推文,这样可以正常工作吗?让我们来npm i twitter
一探究竟!
/*index.js*/
const Twitter = require('twitter');
const client = new Twitter({
consumer_key: "314gvas...12kjbh31n2",
consumer_secret: "bd129u...21hjbv3",
access_token_key: "89xzcyh...ads",
access_token_secret: "98217...gyve98"
});
client.post("statuses/update", { status: "bananas lol" }, function(
error,
tweet,
response
) {
if (error) throw error;
console.log("yay!");
console.log(response);
});
我们暂时不会使用这个tweet()
函数,因为先单独测试各个部分总是好的。想象一下,如果这个函数不起作用,问题出在这里还是在tweet.js
?没人知道,乱糟糟的。尽可能精简代码有助于更快地找到 bug。
话虽如此,在这种情况下,我们希望运气好一点,这个功能就能立即使用!尝试运行node index.js
这条帖子在我删掉之前就获得了 2 个赞,我没骗你。好吧,是时候来一场实战了!我们来插入我们的tweet()
函数吧。
/*don't forget to import this at the top!!*/
const tweet = require("./tweet.js");
/*and keep the authentication stuff in the middle the same*/
client.post("statuses/update", { status: tweet() }, function(
error,
tweet,
response
) {
if (error) throw error;
console.log("yay!");
console.log(response);
});
(不用说,你会想用你的机器人账号,而不是你自己的账号)但更重要的是我们做到了!
在第二部分中,我们会把它从电脑搬到Heroku,并设置成每小时或每隔一段时间发一次推文。与此同时,为什么不设计一个更有趣的tweet()
功能呢?
迷路了?以下是我们目前在 glitch 上得到的信息。你会注意到,我没有直接使用代币,而是使用了一种叫做 的东西process.env
。正如我之前所说,你不会想泄露你的代币!即使是用代码也不要!
我们也将在第 2 部分中详细介绍这一点,但现在不要让您的代码离开您的计算机,或者使用类似dotenv 的东西。
鏂囩珷鏉ユ簮锛�https://dev.to/walaura/so-you-want-to-make-a-twitter-bot-1-3-4nj2