如何从头开始使用 Golang 构建 Twitter 机器人
正如标题所示,您已经知道本教程的内容!所以,是的,我们将从头开始使用 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。
成功完成后,您将被重定向到仪表板,如下所示。
Twitter 提供只读权限,但对于我们的演示应用程序,我们还需要写入权限。所以点击申请提升。
您可以在 Apps 下看到您的应用程序名称。请按照以下说明操作:
单击设置图标
切换 OAuth 1.0 以将其打开
选择读取和写入推文消息
在回调 URL 和网站 URL 中输入您的服务器 URL
点击保存
生成访问令牌和秘密令牌
按照说明进行操作:
除了设置图标
单击密钥和令牌
生成 API 密钥和密钥
一旦您收到提升帐户的确认邮件。侧边栏将在产品下显示更多选项。
开发、优化和维护?合而为一——空置!
从我们这里聘请 Golang 开发人员并开始开发您的梦想项目。我们拥有精通和最好的 Go 开发人员,他们具有出色的问题解决能力。今天联系我们!
设置开发环境
在 Premium 下选择 Dev Environments 时,您将看到下图。
要设置开发环境,请填写帐户活动/沙盒下的必填字段,如下所示。
因此,这是关于设置您的 Twitter 开发者帐户的。现在。继续编码部分。
Golang 项目搭建
第一步是创建一个项目。因此,请运行以下命令。你可以给它起任何名字,这里我们将使用twit_bot作为我们的项目名称。
安装依赖
我们将使用去弄安装以下依赖项-
https://github.com/dghubble/oauth1
https://github.com/gorilla/mux
https://github.com/joho/godotenv
配置 .env 文件
现在,在 godotenv 插件的帮助下加载你的 .env 文件。下面是格式。您可以相应地配置您的文件。
创建 main.go
现在,让我们开始我们的编码部分。创建main.go。您的初始文件将如下所示。
我们将编码部分进一步划分为多个部分,如下所示。
CRC验证
Webhook 注册
网络钩子订阅
监听事件
发送推文
服务器设置
挑战-响应-检查 (CRC) 验证
Twitter 将触发 CRC 以确保您既是应用程序的所有者又是 webhook URL。Challenge-Response-Check 不同于循环冗余校验。
我们需要更新func CrcCheck(){ … }以进行 CRC 验证。
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=测试你会看到这样的东西。
我们的 CRC 路线运行良好!
安装 ngrok
现在,我们的下一步是注册一个 webhook。但在学习如何做之前,我们需要安装 ngrok。这背后的原因是 Twitter 有一些协议,基于它们 Twitter 不会接受以下 URL:
基于localhost的 URL
具有端口号的 URL
非 https 网址
因此,出于开发目的,我们要做的是安装 ngrok。使用以下命令使用 8080 端口安装和启动服务器。
如果你做对了,你应该看到这样的东西 -
去.ngrok.ioURL 以查看与 localhost:9090 类似的响应。此外,打开.env文件并添加 URL。
Webhook 注册
现在,开始为我们的机器人注册 webhook。我们将检查参数列表中是否存在寄存器标志。检查标志后,它将函数RegisterWebhook作为 goroutine 执行。打开client.go,定义函数RegisterWebhook,如下所示。该函数将用于所有 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。
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 之后运行以下命令
监听事件
现在,是时候让 webhook 监听事件了。打开 main.go 并更新 WebhookHandler() 函数。代码非常简单。
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 句柄和自动字符串。
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中设置服务器的代码。您可以浏览代码逻辑,因为它非常简单。
功能主要(){
错误 := 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 机器人
如果一切都成功完成,机器人应该会向您的句柄发送回复,如下图所示。
Github Repsoitory:从头开始使用 Golang 构建 Twitter Bot
您可以在此处找到完整的源代码:twitter-bot-using-golang-demo。随意克隆存储库并使用代码。
结论
我希望您已经了解如何使用 Golang 构建 Twitter 机器人。那么,您还在等什么,开始开发您的演示应用程序吧!如果您有任何建议、反馈或疑问,请给我们回信。总是乐于回答!
言鼎科技主做软件开发,微信小程序,网站开发,软件外包,手机APP开发。如有需要记得联系我们!