github 代码commit机器人

栏目: 编程工具 · 发布时间: 6年前

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

灵感

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

知识储备

  • html css selector 或者 xpath 的语法,提出html的有用信息(自己做爬虫也会使用到)
  • 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", "'dejavuzhou@qq.com'"}},
    }
    gifConfig2 := []util.Cmd{
        {"git", []string{"config", "--global", "user.email", "'1413507308@qq.com'"}},
    }
        //执行一系列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
command.go
ding.go
hacknews.go
mail.go
markdown.go
redditnews.go
scanfiles.go
translate.go

md-genie源代码


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax Design Patterns

Ajax Design Patterns

Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99

Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具