社交媒体已成为人们和企业分享想法、推广产品以及与目标受众建立联系的重要工具。然而,定期发布内容并管理多个平台上的日程安排往往既耗时又重复性较强。
在本教程中,您将学习如何使用Gemini、Late API以及Next.js来构建一个由人工智能驱动的社交媒体发布日程安排工具。
我们将利用Gemini API根据用户提供的提示生成吸引人的社交媒体内容,使用Next.js处理应用程序的前端和后端逻辑,而通过Late API则能够从单一平台将内容发布到多个社交媒体平台上并进行日程安排。
目录
先决条件
要完全理解本教程的内容,您需要具备对React或Next.js的基本了解。
我们将使用以下工具:
-
Late API:这是一个社交媒体API,允许您通过一个统一的界面在13个不同的社交媒体平台上创建和安排发布内容。
-
Next.js:这是一个基于React开发的框架,可用于构建快速且可扩展的Web应用程序,同时能够处理前端和后端逻辑。
-
Google Gemini API:该API允许您利用谷歌的人工智能模型,根据用户提供的提示生成文本及其他内容。
设置与安装
使用以下代码片段创建一个新的 Next.js 项目:
npx create-next-app post-scheduler
安装项目所需的依赖项。我们将使用 Day.js 来处理 JavaScript 中的日期相关操作,这样就能更轻松地在指定时间安排并发布社交媒体帖文了。
npm install @google/genai dayjs utc
接下来,在 Next.js 项目的根目录下创建一个 .env.local 文件,并在其中输入你的 Gemini API 密钥:
GEMINI_API_KEY=粘贴你的 API 密钥
一旦所有设置完成,你的 Next.js 项目就准备就绪了。现在,让我们开始动手构建吧!🚀

如何使用 Late 安排社交媒体帖文的发布时间
Late 是一个功能齐全的社交媒体日程安排工具,它允许你连接自己的社交媒体账户,并在多个平台上发布帖文。在本节中,你将学习如何使用 Late 的控制面板来创建和安排社交媒体帖文的发布。
首先,创建一个 Late 账户 并登录。

生成一个 API 密钥,并将其添加到 Next.js 项目中的 .env.local 文件中。
LATE_API_KEY=

将你的社交媒体账户连接到 Late,这样你就可以在所有平台上管理和发布帖文了。

通过 OAuth 连接好你的社交媒体账户后,你就可以直接在相应的平台上编写、发布和安排帖文的发布了。

在 Late 的控制面板中,你可以直接编写帖文内容并添加媒体文件。

你可以自行选择内容发布的时机:立即发布、安排在以后发布、将其添加到任务队列中,或者将其保存为草稿。

一旦帖子被发布,你就可以在控制面板中直接查看其状态并预览该帖子。

🎉 恭喜! 你已经成功使用Late控制面板创建了第一篇帖子。在接下来的章节中,你将学习如何使用Late API直接从你的应用程序中创建和安排帖子的发布时间。
如何构建Next.js应用程序界面
在本节中,你将构建该应用程序的用户界面。该应用程序采用单页路由机制,并通过条件渲染来显示最近的帖子、一个用于输入AI提示语的字段,以及一个允许用户创建或安排帖子发布的表单。

在继续之前,请在你的Next.js项目中创建一个`types.d.ts`文件,然后将以下代码片段复制到该文件中:
interface Post {
_id: string;
content: string;
scheduledFor: string;
status: string;
}
interface AIFormProps {
handleGeneratePost: (e: React.FormEvent<HTMLFormElement>) => void;
useAI: boolean;
setUseAI: React.Dispatch<React.SetStateAction<>boolean>>;
prompt: string;
setPrompt: ReactDispatch<React.SetStateAction<>string>>;
disableBtn: boolean;
}
interface FormProps {
handlePostSubmit: (e: React.FormEvent<HTMLFormElement>) => void;
content: string;
setContent: React.Dispatch<React.SetStateAction<>string>>;
date: string;
setDate: ReactDispatch<React.SetStateAction<>string>>;
disableBtn: boolean;
setUseAI: React.Dispatch<React.SetStateAction<>boolean>>;
useAI: boolean;
}
types.d.ts文件定义了整个应用程序中使用的所有数据结构及类型声明。
将以下代码片段复制到app/page.tsx文件中:
"use client";
import Nav from "./components/Nav";
import { useState } from "react";
import NewPost from "./components/NewPost";
import PostsQueue from "./components/PostsQueue";
export default function Page() {
const [showPostQueue, setShowPostQueue] = useState<boolean>(false;
return (
'w-full h-screen'>
: }
);
}
Page组件会渲染Nav组件,并根据showPostQueue状态的值来条件性地显示PostsQueue或NewPost组件。
创建一个components文件夹,用于存放应用程序中使用的各种页面组件。
cd app
mkdir components && cd components
touch Nav.tsx NewPost.tsx PostElement.tsx PostsQueue.tsx
将以下代码片段添加到Nav.tsx文件中:
export default function Nav({
showPostQueue,
setShowPostQueue,
}: {
showPostQueue: boolean;
setShowPostQueue: React.Dispatch<React.SetStateAction<>boolean>>;
}) {
return (
);
}
将以下代码片段复制到 `PostsQueue.tsx` 文件中:
"use client";
import { useEffect, useState, useCallback } from "react";
import PostElement from "./PostElement";
export default function PostsQueue() const [posts, setPosts] = useState<Post[]>> [];
const [loading, setLoading] = useState<boolean>(true);
return (
<div className='p-4'>
'text-xl font-bold'>>已安排的帖子
{loading ? (
'text-sm'>>正在加载已安排的帖子…</p>
) : (
'mt-4' 0 ? (
posts.map((post) => <PostElement key={post._id} post={post} />>)
) : (
没有可用的已安排帖子。
)}
)}
);
}
PostsQueue.tsx 组件会显示之前创建的帖子列表及其当前状态,表明每篇帖子是已经发布还是被安排在以后发布。在数据加载过程中,会显示加载提示信息;一旦数据加载完成,就会使用 PostElement 组件来渲染每篇帖子。
将以下代码添加到 PostElement.tsx 组件中:
export default function PostElement() {
export const formatReadableTime = (isoString: string) => {
const date = new Date(isoString); // 自动解析为 UTC 格式
return date.toLocaleString(undefined, {
year: "numeric",
month: "short",
day: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: true, // 若需要 24 小时格式,则将此值设为 false
});
};
return (
'p-4 border flex items-center justify-between space-x-4 rounded mb-2 hover:bg-gray-100 cursor-pointer'>
'font-semibold text-sm'>>{post.content.slice(0, 100)}</p>
"text-blue-400 text-xs">
已安排在:{formatReadableTime(post.scheduledFor)}发布
{post.status}</p>
);
}
最后,将以下代码片段复制到NewPost.tsx文件中:
"use client";
import { useState } from "react";
export default function NewPost() {
const [disableBtn, setDisableBtn] = useState<boolean>(falseconst [useAI, setUseAI] = useState<boolean>(falseconst [content, setContent] = useState<string>("";
const [prompt, setPrompt] = useState<string>(""const [date, setDate] = useState<string>("");
//👇🏻 用于生成帖子内容
const handleGeneratePost = async (e: React.FormEvent<HTMLFormElement>>) =>> {
e.preventDefault();
setDisableBtn(true//👇🏻 用于创建或安排帖子的发布时间
const handlePostSubmit = async (e: React.FormEvent<HTMLFormElement>>) =>> {
e.preventDefault();
};
return (
'w-full p-4 h-[90vh] flex flex-col items-center justify-center border-t'>>
'text-xl font-bold'>>新帖子
{useAI ? (
)}
);
}
NewPost组件会根据用户的选择有条件地显示AIPromptForm或PostForm。当用户选择使用人工智能生成内容时,会显示AIPromptForm来收集所需的信息;一旦内容生成完成,就会显示PostForm,让用户能够编辑、创建或安排帖子的发布时间。
请将以下代码添加到`NewPost.tsx`文件中:
export const AIPromptForm = ({
handleGeneratePost,
useAI,
setUseAI,
prompt,
setPrompt,
disableBtn,
}: AIFormProps) => {
return (
恭喜!您已经完成了应用程序界面的配置。
如何集成Gemini API以生成帖文内容
在这里,您将学习如何使用Gemini API根据用户的提示来生成帖文内容。
在继续之前,请确保您已经从Google AI Studio中复制了自己的API密钥。

在Next.js的app目录下创建一个api文件夹。这个文件夹将用来存放用于生成AI内容以及使用Late API创建或安排帖文的API路由。
cd app && mkdir api
接下来,在api文件夹下再创建一个generate文件夹,并在其中添加一个route.ts文件。将以下代码复制到该文件中:
// 👇🏻 在api/generate/route.ts文件中
import { NextRequest, NextResponse } from "next/server";
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY! });
export POST(req: NextRequest) {
const { prompt } = await req.json();
try {
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: `
您是一个社交媒体帖文生成工具,能够高效地为Twitter生成吸引人的帖文。给定一个主题,您需要创作一篇富有创意且能吸引读者的帖文,确保帖文的字符数不超过Twitter规定的280个字符,这个数字包括了所有的标签、提及内容、空格、标点符号以及表情符号。
用户会提供一个主题或方向,而您将根据这些信息来生成帖文。
以下是用户的指令:
if (!response.text) {
return NextResponse.json(
{
message: “在生成帖文时遇到了错误。”,
success: false,
},
{ status: 400 },
);
}
true },
{ status: 200 },
);
} return NextResponse.json(
{ message: “生成帖文时出现错误。”, success: false },
{ status: 500 },
);
}
}
api/generate端点会接收用户提供的提示信息,然后利用Gemini API生成相应的帖子内容。
现在,你可以从NewPost组件中向新创建的/api/generate端点发送请求。请按照以下方式修改handleGeneratePost函数:
const handleGeneratePost = async (e: React.FormEvent<HTMLFormElement>>) => {
e.preventDefault();
setDisableBtn(trueconst result = await fetch("/api/generate", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ prompt }),
});
const data = await result.json();
if (data.success) {
setUseAI(false""false;
};
handleGeneratePost函数会接收用户提供的提示信息,然后返回由AI生成的内容。
如何在Next.js中使用Late API
Late API提供了多种端点,让你能够以编程方式创建、安排并管理帖子内容。这样你就可以将社交媒体发帖功能直接集成到自己的应用程序或自动化工作流程中。
要开始使用,只需将你的Late API密钥以及所使用的社交媒体平台的账户ID复制到.env.local文件中即可:
LATE_API_KEY=<Late_API_key>
ACCOUNT_ID=<social_media_acct_id>
# Gemini API密钥
GEMINI_API_KEY=<>gemini_API_key>

注意:在本教程中,我们将使用Twitter作为用于安排帖子的社交媒体平台。不过你也可以将同样的流程应用到Late API支持的其他平台上,只需在API请求中修改相应的平台名称和账户ID即可。
创建一个api/post端点,用来接收帖子内容,并利用Late API来安排或发布这些帖子。
cd api
mkdir post && cd post
touch route.ts
接下来,在post/route.ts文件中添加以下POST方法:
import { NextRequest, NextResponse } from "next/server";
import utc from "dayjs/plugin/utc";
import dayjs from "dayjs";
dayjs.extend(utc);
export async POST(req: NextRequest) const { content, publishAt } = await req.json();
// 判断该帖子是应该被安排在以后发布,还是应该立即发布
const nowUTC = publishAt ? dayjs(publishAt).utc() : null;
const publishAtUTC = nowUTC ? nowUTC.format("YYYY-MM-DDTHH:mm") : null;
try {
const response = await fetch("https://getlate.dev/api/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer "Content-Type": "application/json",
},
body: JSON.stringify({
content,
platforms: [
{
platform: "twitter",
accountId: process.env.ACCOUNT_ID!,
},
],
publishNow: !publishAt,
scheduledFor: publishAtUTC,
}),
});
const { post, message } = await response.json();
if (post?._id) {
return NextResponse.json({ message, success: true }, { status: 201 });
}
return NextResponse.json({ message: "发生错误", success: false }, { status: 500 });
} catch (error) {
return NextResponse.json({ message: "安排帖子发布时出现错误", success: false }, { status: 500 });
}
}
从上面的代码片段中可以看出:
-
api/post这个端点会接收帖子的内容以及一个可选的publishAt时间。
publishAt值为null,那么帖子会立即被发布;否则,这个时间会被转换为UTC格式以便进行调度。
你还可以在/api/post端点上添加一个GET方法,用来获取那些已经创建或安排发布的帖子:
export async GET() {
try {
const response = await fetch(
"https://getlate.dev/api/v1/posts?platform=twitter",
{
method: "GET",
headers: {
Authorization: `Bearer "Content-Type": "application/json",
},
},
);
const { posts } = await response.json();
return NextResponse.json({ posts }, { status: 200 });
} catch (error) {
return NextResponse.json(
{ message: "获取帖子时出现错误。, success: false },
{ status: 500 },
);
}
}
接下来,需要更新NewPost.tsx文件中的handlePostSubmit函数,让它向/api/post发送POST请求。这样就可以创建或安排帖子的发布,并将结果通知给用户:
const handlePostSubmit = async (e: React.FormEvent<HTMLFormElement>>) => {
e.preventDefault();
setDisableBtn(true);
const now = new Date();
const selected = date ? new Date(date) : null;
const publishAt = !selected || selected <= now ? null : date;
const result = await fetch("/api/post", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ content, publishAt }),
});
const { message, success } = await result.json();
if (success) {
setContent("""""成功:" + message);
} else {
alert("错误:" + message);
}
setDisableBtn(false;
};
最后,获取所有已安排或发布的帖子,并在PostsQueue组件中展示它们:
const fetchScheduledPosts = useCallback(async () => {
try {
const response = await fetch("/api/post", {
method: "GET",
headers: { "Content-Type": "application/json" },
});
const data = await response.json();
setPosts(data_posts);
setLoading(falsecatch (error) {
console.error("获取计划发布的帖子时出现错误:, error);
setLoading(false() => {
fetchScheduledPosts();
}, [fetchScheduledPosts]);
🎉 恭喜!您已经成功使用Next.js、Gemini API和Late API构建了一个基于人工智能的社交媒体帖子调度系统。
本教程的源代码可以在GitHub上找到。
总结
通过本教程,您学会了如何使用Late这个调度平台在多个平台上创建和安排社交媒体帖子的发布时间,同时也了解了如何利用Gemini API生成人工智能生成的文本内容。
Late API是一个功能强大的工具,它能够帮助您自动化处理各种社交媒体相关任务,比如在特定时间间隔发布内容、管理多个账户以及分析数据——所有这些都可以通过一个平台来完成。如果您将它与Gemini这样的生成式AI模型,或是n8n、Zapier这样的自动化工具结合使用,就可以构建出高效的工作流程,从而让您的受众以最少的精力持续关注您的内容。
Gemini API还使得将人工智能生成的文本、图片或代码直接集成到您的应用程序中变得非常容易,这为您打开了广阔的创意空间。
感谢您的阅读!🎉

