diff --git a/api.go b/api.go index 0327b88..e463bb3 100644 --- a/api.go +++ b/api.go @@ -211,6 +211,7 @@ func apiPostAdd(c *gin.Context) { cid = int(artc.ID) if publish { ElasticIndex(artc) + DoPings(slug) } return } @@ -248,6 +249,7 @@ func apiPostAdd(c *gin.Context) { GenerateExcerptAndRender(artc) // elasticsearch 索引 ElasticIndex(artc) + DoPings(slug) if artc.ID >= setting.Conf.StartID { ManageTagsArticle(artc, true, ADD) ManageSeriesArticle(artc, true, ADD) diff --git a/conf/app.yml b/conf/app.yml index c051fc7..7fd598c 100644 --- a/conf/app.yml +++ b/conf/app.yml @@ -16,8 +16,6 @@ identifier: startid: 11 # elasticsearch url searchurl: http://elasticsearch:9200 -# superfeedr shortname -superfeedr: deepzz # 评论相关 disqus: shortname: deepzz @@ -53,6 +51,14 @@ mode: domain: deepzz.com # twitter地址: twitter.com/chenqijing2 twitter: twitter.com/chenqijing2 +# superfeedr url +feedrurl: https://deepzz.superfeedr.com/ +# ping rpcs 地址 +pingrpcs: + - http://ping.baidu.com/ping/RPC2 + - http://blogsearch.google.com/ping/RPC2 + - http://rpc.pingomatic.com/ + # 以下数据初始化用,可在后台修改 account: # *后台登录用户名 diff --git a/conf/nginx/domain/deepzz.conf b/conf/nginx/domain/deepzz.conf index 3f5b893..9e3b2bf 100644 --- a/conf/nginx/domain/deepzz.conf +++ b/conf/nginx/domain/deepzz.conf @@ -126,7 +126,7 @@ server { proxy_hide_header Vary; proxy_hide_header X-Powered-By; - # proxy_set_header X-Via QingDao.Aliyun; + proxy_set_header X-Via QingDao.Aliyun; proxy_set_header Connection ""; proxy_set_header Host deepzz.com; proxy_set_header X-Real_IP $remote_addr; diff --git a/conf/tpl/feedTpl.xml b/conf/tpl/feedTpl.xml index 46d6a9a..6ad6386 100644 --- a/conf/tpl/feedTpl.xml +++ b/conf/tpl/feedTpl.xml @@ -5,7 +5,7 @@ https://{{.Domain}} {{.SubTitle}} - + zh-CN {{.BuildDate}} {{range .Artcs}} diff --git a/glide.lock b/glide.lock index 8d1ccd3..df2d614 100644 --- a/glide.lock +++ b/glide.lock @@ -1,12 +1,12 @@ hash: 4b70e76a2e830e97033c06d0e5a90c3199985ff5070bdf8364b1feca63d5caa5 -updated: 2016-11-12T02:35:12.289411301+08:00 +updated: 2016-11-14T22:09:13.900837801+08:00 imports: - name: github.com/boj/redistore version: fc113767cd6b051980f260d6dbe84b2740c46ab0 - name: github.com/eiblog/blackfriday version: c0ec111761ae784fe31cc076f2fa0e2d2216d623 - name: github.com/eiblog/utils - version: 9ae244bfa2feec3e339a26190a56093fde200288 + version: 3352fddbea01fcfeeb8d903b72f3b84da9780525 subpackages: - logd - mgo @@ -61,8 +61,11 @@ imports: - api - auth/qbox - conf - - kodo - kodocli +- name: qiniupkg.com/api.v7/conf + version: ad7023b87b2f5c169812da49fe44900be1c4e5c2 +- name: qiniupkg.com/api.v7/kodo + version: ad7023b87b2f5c169812da49fe44900be1c4e5c2 - name: qiniupkg.com/x version: f512abcf45ab4e2ba0fd4784c57b53d495997d66 subpackages: diff --git a/ping.go b/ping.go index 045167d..a7c4367 100644 --- a/ping.go +++ b/ping.go @@ -1,30 +1,29 @@ package main import ( + "bytes" + "encoding/xml" "io/ioutil" "net/http" "net/url" + "github.com/eiblog/eiblog/setting" "github.com/eiblog/utils/logd" ) -type Feeder interface { +type Pinger interface { PingFunc(url string) } // superfeedr // http://.superfeedr.com/ -type Superfeedr struct { - URL string -} +type superfeedr struct{} -func (f *Superfeedr) PingFunc(urls ...string) { +func (_ *superfeedr) PingFunc(slug string) { vals := url.Values{} vals.Set("hub.mode", "publish") - for _, u := range urls { - vals.Add("hub.url", u) - } - res, err := http.PostForm(f.URL, vals) + vals.Add("hub.url", "https://"+setting.Conf.Mode.Domain+"/post/"+slug+".html") + res, err := http.PostForm(setting.Conf.FeedrURL, vals) if err != nil { logd.Error(err) return @@ -39,3 +38,70 @@ func (f *Superfeedr) PingFunc(urls ...string) { logd.Error(string(data)) } } + +// google baidu +// params +// BlogName string `xml:"param>value>string"` +// HomePage string `xml:"param>value>string"` +// Article string `xml:"param>value>string"` +// RSS_URL string `xml:"param>value>string"` +type pingRPC struct { + XMLName xml.Name `xml:"methodCall"` + MethodName string `xml:"methodName"` + Params struct { + Param [4]rpcValue `xml:"param"` + } `xml:"params"` +} + +type rpcValue struct { + Value string `xml:"value>string"` +} + +func (p *pingRPC) PingFunc(slug string) { + p.Params.Param[1].Value = "https://" + setting.Conf.Mode.Domain + "/post/" + slug + ".html" + buf := &bytes.Buffer{} + buf.WriteString(xml.Header) + enc := xml.NewEncoder(buf) + if err := enc.Encode(p); err != nil { + logd.Error(err) + return + } + for _, url := range setting.Conf.PingRPCs { + rep, err := http.Post(url, "text/xml", buf) + if err != nil { + logd.Error(err) + continue + } + defer rep.Body.Close() + data, err := ioutil.ReadAll(rep.Body) + if err != nil { + logd.Error(err) + continue + } + logd.Print(string(data)) + if rep.StatusCode != 200 { + logd.Error(string(data)) + continue + } + } +} + +var Pings []Pinger + +func init() { + Pings = append(Pings, &superfeedr{}) + pr := &pingRPC{MethodName: "weblogUpdates.extendedPing"} + pr.Params.Param = [4]rpcValue{ + 0: rpcValue{Value: Ei.BTitle}, + 1: rpcValue{Value: "https://" + setting.Conf.Mode.Domain}, + 2: rpcValue{}, + 3: rpcValue{Value: "https://" + setting.Conf.Mode.Domain + "/rss.html"}, + } + Pings = append(Pings, pr) +} + +func DoPings(slug string) { + for _, p := range Pings { + go p.PingFunc(slug) + } +} diff --git a/ping_test.go b/ping_test.go index ef66429..f4137eb 100644 --- a/ping_test.go +++ b/ping_test.go @@ -2,13 +2,25 @@ package main import ( - "fmt" "testing" "github.com/eiblog/eiblog/setting" ) -func TestPing(t *testing.T) { - sf := Superfeedr{URL: fmt.Sprintf("https://%s.superfeedr.com", setting.Conf.Superfeedr)} +func TestSuperFeedr(t *testing.T) { + sf := superfeedr{} sf.PingFunc("https://deepzz.com/rss.html") } + +func TestPingRPC(t *testing.T) { + pr := pingRPC{ + MethodName: "weblogUpdates.extendedPing", + } + pr.Params.Param = [4]rpcValue{ + rpcValue{Value: Ei.BTitle}, + rpcValue{Value: "https://" + setting.Conf.Mode.Domain}, + rpcValue{Value: "https://deepzz.com/post/gdb-debug.html"}, + rpcValue{Value: "https://deepzz.com/rss.html"}, + } + pr.PingFunc("https://deepzz.com/post/gdb-debug.html") +} diff --git a/setting/setting.go b/setting/setting.go index 96507f9..c64c4ab 100644 --- a/setting/setting.go +++ b/setting/setting.go @@ -3,8 +3,6 @@ package setting import ( "io/ioutil" - "os" - "path" "github.com/eiblog/utils/logd" "gopkg.in/yaml.v2" @@ -16,7 +14,6 @@ const ( ) var ( - wd, _ = os.Getwd() Conf = new(Config) BlackIP = make(map[string]bool) ) @@ -32,9 +29,7 @@ type Config struct { Identifier string // 截取标示 Favicon string // icon地址 StartID int32 // 文章起始id - Static string // cdn地址 SearchURL string // elasticsearch 地址 - Superfeedr string // superfeedr Disqus struct { // 获取文章数量相关 ShortName string PublicKey string @@ -54,8 +49,17 @@ type Config struct { AccessKey string SecretKey string } - Mode RunMode // 运行模式 - Twitter string // twitter地址 + Mode RunMode // 运行模式 + Twitter string // twitter地址 + FeedrURL string // superfeedr url + PingRPCs []string // ping rpc 地址 + Account struct { + Username string // * + Password string // * + Email string + PhoneNumber string + Address string + } Blogger struct { // 初始化数据 BlogName string SubTitle string @@ -63,13 +67,6 @@ type Config struct { BTitle string Copyright string } - Account struct { - Username string // * - Password string // * - Email string - PhoneNumber string - Address string - } } type RunMode struct { @@ -84,13 +81,12 @@ type RunMode struct { func init() { // 初始化配置 - dir := wd + "/conf" - data, err := ioutil.ReadFile(path.Join(dir, "app.yml")) + data, err := ioutil.ReadFile("conf/app.yml") checkError(err) err = yaml.Unmarshal(data, Conf) checkError(err) - data, err = ioutil.ReadFile(path.Join(dir, "blackip.yml")) + data, err = ioutil.ReadFile("conf/blackip.yml") checkError(err) err = yaml.Unmarshal(data, BlackIP) checkError(err) diff --git a/views/article.html b/views/article.html index c9e4c64..2158073 100644 --- a/views/article.html +++ b/views/article.html @@ -1 +1 @@ -{{define "article"}}
{{with .Article}}

{{.Title}}

{{str2html .Header}}{{str2html .Content}}

本文链接:参与评论 »

--EOF--

{{with $.Copyright}}{{end}}{{if gt $.Days 100}}

提醒:本文最后更新于 {{$.Days}} 天前,文中所描述的信息可能已发生改变,请谨慎使用。

{{end}}{{with $.Serie}}

专题「{{.Name}}」的其它文章 »

    {{range .Articles}}{{if ne .ID $.Article.ID}}
  • {{.Title}} ({{dateformat .CreateTime "Jan 02, 2006"}})
  • {{end}}{{end}}
{{end}}

Comments

{{end}}
{{end}} +{{define "article"}}
{{with .Article}}

{{.Title}}

{{str2html .Header}}{{str2html .Content}}

本文链接:参与评论 »

--EOF--

{{with $.Copyright}}{{end}}{{if gt $.Days 100}}

提醒:本文最后更新于 {{$.Days}} 天前,文中所描述的信息可能已发生改变,请谨慎使用。

{{end}}{{with $.Serie}}

专题「{{.Name}}」的其它文章 »

    {{range .Articles}}{{if ne .ID $.Article.ID}}
  • {{.Title}} ({{dateformat .CreateTime "Jan 02, 2006"}})
  • {{end}}{{end}}
{{end}}

Comments

{{end}}
{{end}} diff --git a/xml.go b/xml.go index 8c28b19..c24517b 100644 --- a/xml.go +++ b/xml.go @@ -39,12 +39,12 @@ func doFeed() { _, _, artcs := PageList(1, FEED_COUNT) buildDate := time.Now() params := map[string]interface{}{ - "Title": Ei.BTitle, - "SubTitle": Ei.SubTitle, - "Domain": setting.Conf.Mode.Domain, - "Superfeedr": setting.Conf.Superfeedr, - "BuildDate": buildDate.Format(time.RFC1123Z), - "Artcs": artcs, + "Title": Ei.BTitle, + "SubTitle": Ei.SubTitle, + "Domain": setting.Conf.Mode.Domain, + "FeedrURL": setting.Conf.FeedrURL, + "BuildDate": buildDate.Format(time.RFC1123Z), + "Artcs": artcs, } f, err := os.OpenFile("static/feed.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)