使用nextjs发布到twitter API,在未请求网站时发布tweet



当前状态:我目前正在使用next.js来构建一个web应用程序。我想这个web应用程序也发布到我的Twitter帐户。我已经在Twitter上创建了一个开发者帐户,并在nextjs中创建了一个API。调用api将触发发布请求,它将在我的Twitter帐户上创建一个帖子,因为所有的身份验证都设置好了。

我想要什么:我想让我的账户每24小时发一条推文,比如每天早上5点(我的当地时间)。我需要这条推文张贴,也当没有人要求网站。不幸的是,我还不知道如何设置它。如有任何帮助,不胜感激。

我一直在考虑使用getStaticProps与nextjs的重新验证功能,但我意识到,当没有人请求的网页,它仍然不会工作。即使代码是在服务器端执行的。

这是我的API代码当前的样子:


import type { NextApiRequest, NextApiResponse } from 'next'
import Twitter from 'twitter'
export default async function postTweet(req: NextApiRequest, res: NextApiResponse){

const client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY ?? "",
consumer_secret: process.env.TWITTER_CONSUMER_SECRET ?? "",
access_token_key: process.env.ACCESS_TOKEN_KEY ?? "",
access_token_secret: process.env.ACCESS_TOKEN_SECRET ?? "",
});

client.post(
'statuses/update',
{ status: message + `(${currentDate})` },
function (error, tweet, response) {
if (error) throw error;
//   console.log(tweet); // Tweet body.
//   console.log(response); // Raw response object.
}
);
}

任何想法,我可以实现这是欢迎!

这真是一个好问题。您可以通过设置CRON JOB来实现这一点。这是一种告诉服务器以特定的时间间隔或在一天/周/月等的特定时间运行特定任务的方法。

如果你想使用GitHub Actions,它有一个CRON JOB功能你可以在这里阅读更多内容https://vercel.com/docs/concepts/solutions/cron-jobs您可以生成cron表达式https://crontab.cronhub.io/例如:每天早上5点:0 5 * * *

name: tweet-at-morning
on:
schedule:
- cron: '0 5 * * *'
jobs:
cron:
runs-on: ubuntu-latest
steps:
- name: Call our API route
run: |
curl --request POST 
--url 'https://yoursite.com/api/cron' 
--header 'Authorization: Bearer ${{ secrets.API_SECRET_KEY }}'

否则,可以使用节点库创建作业队列。我发现Bull.js https://github.com/OptimalBits/bull这个库是最简单和可靠的一个创建作业服务器。