如何从头开始使用 Golang 构建 Twitter 机器人

言鼎科技 2023-06-20 562

正如标题所示,您已经知道本教程的内容!所以,是的,我们将从头开始使用 Golang 构建 Twitter 机器人。是的,我们不会使用任何第三方库来开发我们的演示应用程序。本教程主要有两个部分:Twitter 设置和编码部分。所以,事不宜迟,让我们开始我们的开发。

教程要点:使用 Golang 构建 Twitter 机器人

本教程将回答以下问题:如何使用 Golang 构建 Twitter 机器人

  • 如何设置 Twitter 开发者帐户?

  • 为什么我们需要高级开发者帐户?

  • 如何安装 ngrok 以及为什么我们需要 ngrok?

  • 什么是 CRC 验证?

  • 什么是Webhook,如何注册webhook,如何订阅webhook?

  • 使用 Golang 构建 Twitter 机器人

先决条件

  • 基本的 Golang 知识

  • Twitter 开发者帐户(如果您没有,请继续阅读并创建帐户)

  • 在您的系统上安装 Golang

Twitter 开发者帐户设置

创建 Twitter 开发帐户

访问Twitter Developer Platform并填写所需信息。

您将看到以下屏幕。为您的应用程序命名。我在这里命名为tweet_b@t

如何从头开始使用 Golang 构建 Twitter 机器人

成功完成后,您将被重定向到仪表板,如下所示。

如何从头开始使用 Golang 构建 Twitter 机器人

Twitter 提供只读权限,但对于我们的演示应用程序,我们还需要写入权限。所以点击申请提升

您可以在 Apps 下看到您的应用程序名称。请按照以下说明操作:

  • 单击设置图标

  • 切换 OAuth 1.0 以将其打开

  • 选择读取和写入推文消息

  • 在回调 URL 和网站 URL 中输入您的服务器 URL

  • 点击保存

生成访问令牌和秘密令牌

按照说明进行操作:

  • 除了设置图标

  • 单击密钥和令牌

  • 生成 API 密钥和密钥

一旦您收到提升帐户的确认邮件。侧边栏将在产品下显示更多选项。

开发、优化和维护?合而为一——空置!
从我们这里聘请 Golang 开发人员并开始开发您的梦想项目。我们拥有精通和最好的 Go 开发人员,他们具有出色的问题解决能力。今天联系我们!

设置开发环境

在 Premium 下选择 Dev Environments 时,您将看到下图。

如何从头开始使用 Golang 构建 Twitter 机器人

要设置开发环境,请填写帐户活动/沙盒下的必填字段,如下所示。

如何从头开始使用 Golang 构建 Twitter 机器人

因此,这是关于设置您的 Twitter 开发者帐户的。现在。继续编码部分。

Golang 项目搭建

第一步是创建一个项目。因此,请运行以下命令。你可以给它起任何名字,这里我们将使用twit_bot作为我们的项目名称。

如何从头开始使用 Golang 构建 Twitter 机器人
去修改初始化 twit_bot

安装依赖

我们将使用去弄安装以下依赖项-

  • https://github.com/dghubble/oauth1

  • https://github.com/gorilla/mux

  • https://github.com/joho/godotenv

配置 .env 文件

现在,在 godotenv 插件的帮助下加载你的 .env 文件。下面是格式。您可以相应地配置您的文件。

如何从头开始使用 Golang 构建 Twitter 机器人

创建 main.go

现在,让我们开始我们的编码部分。创建main.go。您的初始文件将如下所示。

如何从头开始使用 Golang 构建 Twitter 机器人
包主功能主要(){...}

我们将编码部分进一步划分为多个部分,如下所示。

  • CRC验证

  • Webhook 注册

  • 网络钩子订阅

  • 监听事件

  • 发送推文

  • 服务器设置

挑战-响应-检查 (CRC) 验证

Twitter 将触发 CRC 以确保您既是应用程序的所有者又是 webhook URL。Challenge-Response-Check 不同于循环冗余校验。

我们需要更新func CrcCheck(){ … }以进行 CRC 验证。

如何从头开始使用 Golang 构建 Twitter 机器人
func CrcCheck(writer http.ResponseWriter, request *http.Request) {
  writer.Header().Set("Content-Type", "application/json")
token := request.URL.Query()["crc_token"]
如果 len(令牌) < 1 {
fmt.Fprintf(writer, "没有给出 crc_token")
返回
}
h := hmac.New(sha256.New, []byte(os.Getenv("CONSUMER_SECRET")))
h.Write([]byte(token[0]))
编码 := base64.StdEncoding.EncodeToString(h.Sum(nil))
响应:=制作(地图[字符串]字符串)
response["response_token"] = "sha256=" + 编码
responseJson, _ := json.Marshal(响应)
fmt.Fprintf(编写器,字符串(responseJson))}

解释

  • 使用crc_token参数 Twitter 将发出 GET 请求以进行 CRC 验证。

  • 根据crc_token和您应用的Consumer Secret ,您的应用需要您在收到 GET 请求时制定response_token 。response_token只是一个编码的 JSON,在收到成功的 web hook id 后 3 秒内返回

上面的代码片段执行以下操作:

  • 将响应标头设置为 json 类型:'application/json'

  • request.URL.Query()[“crc_token”]获取crc_token参数。

  • 在 Hmac sha256 的帮助下对其进行加密并对其进行编码。不要忘记将CONSUMER_SECRET替换为您应用程序的原始消费者机密。

  • 生成响应字符串 mao

  • 把response map转成json然后发给writer

导航localhost:8080/webhook/twitter?crc_token=测试你会看到这样的东西。

如何从头开始使用 Golang 构建 Twitter 机器人

我们的 CRC 路线运行良好!

安装 ngrok

现在,我们的下一步是注册一个 webhook。但在学习如何做之前,我们需要安装 ngrok。这背后的原因是 Twitter 有一些协议,基于它们 Twitter 不会接受以下 URL:

  • 基于localhost的 URL

  • 具有端口号的 URL

  • 非 https 网址

因此,出于开发目的,我们要做的是安装 ngrok。使用以下命令使用 8080 端口安装和启动服务器。

如何从头开始使用 Golang 构建 Twitter 机器人
ngrok http 8080

如果你做对了,你应该看到这样的东西 -

如何从头开始使用 Golang 构建 Twitter 机器人

.ngrok.ioURL 以查看与 localhost:9090 类似的响应。此外,打开.env文件并添加 URL。

Webhook 注册

现在,开始为我们的机器人注册 webhook。我们将检查参数列表中是否存在寄存器标志。检查标志后,它将函数RegisterWebhook作为 goroutine 执行。打开client.go,定义函数RegisterWebhook,如下所示。该函数将用于所有 Twitter 请求。

如何从头开始使用 Golang 构建 Twitter 机器人
func RegisterWebhook() {
fmt.Println("正在注册 webhook...")
httpClient := 创建客户端()
路径 := "https://api.twitter.com/1.1/account_activity/all/" + os.Getenv("WEBHOOK_ENV") + "/webhooks.json"
值 := url.Values{}
values.Set("url", os.Getenv("APP_URL")+"/webhook/twitter")
fmt.Println(值,路径)
resp, _ := httpClient.PostForm(path, values)
延迟 resp.Body.Close()
正文,_ := ioutil.ReadAll(resp.Body)
var data map[string]接口{}
如果错误 := json.Unmarshal([]byte(body), &data); 错误!=无{
恐慌(错误)
}
fmt.Println(数据)
fmt.Println("Webhook id of " + data["id"].(string) + " 已被注册")
订阅Webhook()}

解释

  • 首先,我们创建了函数CreateClient()从CreateClient()函数返回的指针可用于代表您的机器人帐户发出所有 Twitter 请求。

  • 获取客户端后,设置参数:路径和值。

  • 在url.Values的帮助下,将 webhook 的 URL 作为其参数传递。

  • 使用httpClient.PostForm(path, values)进行注册 webhook 的发布响应

  • 解码并读取响应

订阅网络钩子

为了订阅 webhook,我们在client.go文件中创建了一个SubscribeWebhook()函数。以下函数将用于订阅事件和检查状态代码 204。

如何从头开始使用 Golang 构建 Twitter 机器人
func SubscribeWebhook() {
fmt.Println("订阅 webapp...")
客户端:=创建客户端()
路径 := "https://api.twitter.com/1.1/account_activity/all/" + os.Getenv("WEBHOOK_ENV") + "/subscriptions.json"
resp, _ := client.PostForm(path, nil)
正文,_ := ioutil.ReadAll(resp.Body)
延迟 resp.Body.Close()
如果 resp.StatusCode == 204 {
fmt.Println("订阅成功")
} else if resp.StatusCode != 204 {
fmt.Println("无法订阅 webhook。响应如下:")
fmt.Println(字符串(正文))
}}

go install 之后运行以下命令

如何从头开始使用 Golang 构建 Twitter 机器人
twit_bot -注册

监听事件

现在,是时候让 webhook 监听事件了。打开 main.go 并更新 WebhookHandler() 函数。代码非常简单。

如何从头开始使用 Golang 构建 Twitter 机器人
func WebhookHandler(writer http.ResponseWriter, request *http.Request) {
fmt.Println("Handler called")
正文,_ := ioutil.ReadAll(request.Body)
var 加载客户端.WebhookLoad
错误 := json.Unmarshal(body, &load)
如果错误!=无{
fmt.Println("发生错误:" + err.Error())
}
如果 len(load.TweetCreateEvent) < 1 || load.UserId == load.TweetCreateEvent[0].User.IdStr {
返回
}
_, err = client.SendTweet("@"+load.TweetCreateEvent[0].User.Handle+" 你好 "+load.TweetCreateEvent[0].User.Name+", 这是推特机器人的测试推文。", load .TweetCreateEvent[0].IdStr)
如果错误!=无{
fmt.Println("发生错误:")
fmt.Println(err.Error())
} 别的 {
fmt.Println("推文发送成功")
}}

解释

  • 首先,该函数将读取推文的正文。

  • 初始化用于 JSON 解码的 webhook 加载对象

  • 之后,该函数将检查它是否是推文创建事件并调用SendTweet()将回复作为响应发送到client.go中。

发送推文

函数SendTweet()将用于由机器人向用户发送推文。如您所见,该函数将接受从WebhookHandler()接收的两个参数。机器人发送的回复将包含用户的 Twitter 句柄和自动字符串。

如何从头开始使用 Golang 构建 Twitter 机器人
func SendTweet(tweet string, reply_id string) (*Tweet, error) {
fmt.Println("发送推文作为回复" + reply_id)
var responseTweet 推文
//添加参数
参数 := url.Values{}
params.Set("状态", tweet)
params.Set("in_reply_to_status_id", reply_id)
客户端:=创建客户端()
resp, err := client.PostForm("https://api.twitter.com/1.1/statuses/update.json", 参数)
如果错误!=无{
返回零,错误
}
延迟 resp.Body.Close()
正文,_ := ioutil.ReadAll(resp.Body)
fmt.Println(字符串(正文))
err = json.Unmarshal(正文, &responseTweet)
如果错误!=无{
返回零,错误
}
返回&responseTweet,无}

服务器设置

本节将介绍在main.go中设置服务器的代码。您可以浏览代码逻辑,因为它非常简单。

如何从头开始使用 Golang 构建 Twitter 机器人
功能主要(){
错误 := godotenv.Load()
如果错误!=无{
log.Fatal("加载 .env 文件时出错")
fmt.Println("加载 .env 文件时出错")
}
fmt.Println("启动服务器")
m := mux.NewRouter()
m.HandleFunc("/webhook/twitter", CrcCheck).Methods("GET")
m.HandleFunc("/webhook/twitter", WebhookHandler).Methods("POST")
服务器 := &http.服务器{
处理程序:米,
}
服务器地址 = ":8080"
如果参数:= os.Args;len(args) > 1 && args[1] == "-register" {
去客户端.RegisterWebhook()
}
服务器.ListenAndServe()}

使用 Golang 运行 Twitter 机器人

如果一切都成功完成,机器人应该会向您的句柄发送回复,如下图所示。

如何从头开始使用 Golang 构建 Twitter 机器人

Github Repsoitory:从头开始使用 Golang 构建 Twitter Bot

您可以在此处找到完整的源代码:twitter-bot-using-golang-demo。随意克隆存储库并使用代码。

结论

我希望您已经了解如何使用 Golang 构建 Twitter 机器人。那么,您还在等什么,开始开发您的演示应用程序吧!如果您有任何建议、反馈或疑问,请给我们回信。总是乐于回答!

言鼎科技主做软件开发,微信小程序,网站开发,软件外包,手机APP开发。如有需要记得联系我们!

The End