githubコードcommitロボット
インスピレーション
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を自分のメールボックス に送信
構想 httpパッケージを使用してhtmlドキュメント をダウンロード goquery htmlで使用する情報 を抽出する.サードパーティ翻訳インタフェースを使用して有用な情報 を翻訳する.抽出された情報をredisに保存して消去し、自動失効時間 を設定する.デリバリー後の情報を取得go templateを使用してmarkdown形式のドキュメント をレンダリングする go execはgitコマンドを呼び出して生産後のmarkdownファイルをgithubに提出し同時にreadmeを更新する.mdファイル は毎日hacknewsとサーバの状態を自分のメールボックス に送信する.
main.goコード注釈解析
dejavzuhou/utilパッケージ解析 を取得 を実行する. にメッセージを送信する. を生成する に登ります を呼び出す
md-genieソースコード
GitHubでgolangを使ってtrendingの歴史を自動的に保存してmarkdownファイルに記録したプロジェクトを見たことがありますが、このプロジェクトは斬新で洗練されているような気がします.さらにGitHubに毎日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ソースコード