Golang Go语言 github 代码 commit 机器人

灵感

曾经有一次在 GitHub 上看到使用 golang 自动保存 trending 的历史记录到 markdown 文件的项目,感觉这个项目做的很新颖而精致.进而做一个在 GitHub 上自动记录每日 hacknews 新闻和猫眼电影.

知识储备

  • html css selector 或者xpath的语法,提出 hmtl 的有用信息(自己做爬虫也会使用到)
  • redis List/SET/HASH 等数据结构
  • 熟悉 git 的基本命令
  • 熟悉 ssh key 和配置 GitHub ssh key 登陆
  • GO 语言: exec,go-redis,goquery,template,http 等包
  • go stmp 包发送服务器信息和每日 hacknews 到自己的邮箱

思路

  1. 使用 http 包下载 html 文档
  2. goquery 提取 html 中用的信息
  3. 使用第三方翻译接口翻译有用信息
  4. 保存提取的信息到 redis 中并去重,设置自动失效时间
  5. 获取去重之后的信息使用 go template 来渲染 markdown 格式的文档
  6. go exec 调用 git 命令提交生产之后的 markdown 文件到 github 同时更新 readme.md 文件
  7. 发送每日 hacknews 和服务器的状态到自己的邮箱

main.go 代码注释解析

package main

import ( “github.com/dejavuzhou/md-genie/util” “log” “time” )

var gitCount = 1

func createCmds() []util.Cmd { //使用两个账号轮流交替提交代码到 GitHub //可耻的私心:我要让这两个 GitHub 账号在 contributions in the last year 显示面板都是绿色(代表活跃) gitCount++ gifConfig1 := []util.Cmd{ {“git”, []string{“config”, “–global”, “user.email”, “’[email protected]’”}}, } gifConfig2 := []util.Cmd{ {“git”, []string{“config”, “–global”, “user.email”, “’[email protected]’”}}, } //执行一系列 git 命令 和 linux 服务器的命令 来定时监控服务器的健康状态 cmds := []util.Cmd{ {“git”, []string{“config”, “–global”, “user.name”, “‘EricZhou’”}}, {“git”, []string{“stash”}}, {“git”, []string{“pull”, “origin”, “master”}}, {“git”, []string{“stash”, “apply”}}, {“git”, []string{“add”, “.”}}, {“git”, []string{“status”}}, {“git”, []string{“commit”, “-am”, time.Now().Format(time.RFC3339)}}, {“git”, []string{“status”}}, {“git”, []string{“push”, “origin”, “master”}}, {“netstat”, []string{"-lntp"}}, {“free”, []string{"-m"}}, {“ps”, []string{“aux”}}, } if gitCount%2 == 0 { cmds = append(gifConfig2, cmds…) } else { cmds = append(gifConfig1, cmds…) } return cmds }

func main() { //比较懒 使用最原始 sleep 的方法来实现定时任务 for {
//提出 hacknews html 中的新闻游泳信息调用有道翻译来 保存信息到 redis //如果有条件建议使用 google 翻译 API if err := util.SpiderHackNews(); err != nil { log.Fatal(err) } //解析 hacknews 新闻到 markdown 文件,按照时间天格式命名 if err := util.ParseMarkdownHacknews(); err != nil { log.Fatal(err) } //获取猫眼电影 json 接口,保存到 redis if err := util.FetchMaoyanApi(); err != nil { log.Fatal(err) } //解析电影信息到 markdown 文件 if err := util.ParseMaoyanMarkdown(); err != nil { log.Fatal(err) } //读取 archieves 文件夹名称 生成 readme.md 文件 util.ParseReadmeMarkdown() //运行 git linux 命令 保存日志 slice gitlogs, err := util.RunCmds(createCmds()) if err != nil { log.Fatal(err) } //解析日志和 hacknews 新闻 生产 email 的 html 正文 //发送邮件 if err, mailBody := util.ParseEmailContent(gitlogs); err == nil { mailTitle := “md-genie+hacknews 日志:” + time.Now().Format(time.RFC3339) util.SendMsgToEmail(mailTitle, mailBody) } else { log.Fatal(err) } //每天执行 4 次 我的两个 GitHub 账号就可以每天活跃数量为两次 time.Sleep(6 * time.Hour) } }

dejavzuhou/util 包解析

  • api.go获取猫眼电影 json 的 api
  • command.go执行 os 系统命令
  • ding.go发送消息到钉钉群机器人
  • hacknews.go解析新闻,翻译新闻,保存 redis
  • mail.go发送邮件
  • markdown.go生成 markdown 文件
  • redditnews.go爬去 reddit 新闻(reddit 被墙废弃)
  • scanfiles.go 扫描 archives 文件夹里面的文件给 readme.md 做数据源
  • translate.go调用翻译 api

md-genie 源代码


Golang Go语言 github 代码 commit 机器人

更多关于Golang Go语言 github 代码 commit 机器人的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言 github 代码 commit 机器人的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


针对“Golang Go语言 github 代码 commit 机器人”这一话题,以下是一些专业回复:

Go语言(Golang)作为一种静态类型、垃圾回收、并发简单的编程语言,非常适合用于开发自动化脚本和机器人。在GitHub上,代码commit机器人通常指的是一种自动化工具,能够定时或根据特定条件将代码更改提交到GitHub仓库。

要实现一个Go语言的GitHub代码commit机器人,你需要熟悉Go语言的基本语法和GitHub的API。以下是一个简要的实现思路:

  1. 环境准备:安装Go语言和Git,并配置好GitHub的SSH密钥,以便能够无密码推送代码。
  2. 编写机器人代码:使用Go语言编写一个脚本,该脚本能够执行代码抓取、修改、提交等操作。你可以使用Go的http包来与GitHub API交互,使用exec包来执行Git命令。
  3. 设置定时任务:使用操作系统的定时任务功能(如cron)或Go语言的定时器来定时运行你的机器人脚本。
  4. 测试与优化:在测试环境中运行你的机器人,确保其能够正确执行代码提交操作。然后,根据测试结果进行优化和改进。

请注意,自动化提交代码需要谨慎操作,以避免对仓库造成不必要的干扰或破坏。同时,确保你的机器人脚本具有适当的错误处理和日志记录功能,以便在出现问题时能够及时排查和解决。

回到顶部