go-sitemap is the easiest way to generate Sitemaps in Go. It supports baidu search engine as well.
package main
import (
"github.com/yaotian/go-sitemap/stm"
)
func main() {
sm := stm.NewSitemap()
sm.Create()
sm.SetSearchEngine(stm.SearcnEngine_Baidu)
mobileType := stm.NewMobleType("pc,mobile")
sm.Add(stm.URL{"loc": "home", "changefreq": "always", "mobile": mobileType})
sm.Add(stm.URL{"loc": "readme"})
sm.Add(stm.URL{"loc": "aboutme", "priority": 0.1})
sm.Finalize().PingSearchEngines()
}
Sitemap provides interface for create sitemap xml file and that has convenient interface.
And also needs to use first Sitemap struct if it wants to use this package.
Installing
$ go get github.com/yaotian/go-sitemap/stm
Features
Current Features or To-Do
Getting Started
Preventing Output
To disable all non-essential output you can give false
to sm.SetVerbose
.
To disable output in-code use the following:
sm := stm.NewSitemap()
sm.SetVerbose(false)
Pinging Search Engines
PingSearchEngines requests some ping server.
sm.Finalize().PingSearchEngines()
If you want to add new search engine
, you can set that to method's arguments. like this.
sm.Finalize().PingSearchEngines("http://newengine.com/ping?url=%s")
Options
sm.SetDefaultHost("http://www.example.com")
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemap-generator/")
sm.SetPublicPath("tmp/")
sm.SetSitemapsPath("sitemaps/")
sm.SetAdapter(&stm.S3Adapter{Region: "ap-northeast-1", Bucket: "your-bucket", ACL: "public-read"})
sm.SetFilename("new_filename")
Upload sitemap to S3
package main
import (
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/yaotian/go-sitemap/stm"
)
func main() {
sm := stm.NewSitemap()
sm.SetDefaultHost("http://example.com")
sm.SetSitemapsPath("sitemap-generator")
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemap-generator/")
sm.SetAdapter(&stm.S3Adapter{
Region: "ap-northeast-1",
Bucket: "your-bucket",
ACL: "public-read",
Creds: credentials.NewEnvCredentials(),
})
sm.Create()
sm.Add(stm.URL{"loc": "home", "changefreq": "always", "mobile": true})
sm.Add(stm.URL{"loc": "readme"})
sm.Add(stm.URL{"loc": "aboutme", "priority": 0.1})
sm.Finalize().PingSearchEngines()
}
News sitemaps
sm.Add(stm.URL{"loc": "/news", "news": stm.URL{
"publication": stm.URL{
"name": "Example",
"language": "en",
},
"title": "My Article",
"keywords": "my article, articles about myself",
"stock_tickers": "SAO:PETR3",
"publication_date": "2011-08-22",
"access": "Subscription",
"genres": "PressRelease",
}})
Look at Creating a Google News Sitemap as required.
Video sitemaps
sm.Add(stm.URL{"loc": "/videos", "video": stm.URL{
"thumbnail_loc": "http://www.example.com/video1_thumbnail.png",
"title": "Title",
"description": "Description",
"content_loc": "http://www.example.com/cool_video.mpg",
"category": "Category",
"tag": []string{"one", "two", "three"},
}})
Look at Video sitemaps as required.
Image sitemaps
sm.Add(stm.URL{"loc": "/images", "image": []stm.URL{
{"loc": "http://www.example.com/image.png", "title": "Image"},
{"loc": "http://www.example.com/image1.png", "title": "Image1"},
}})
Look at Image sitemaps as required.
Geo sitemaps
sm.Add(stm.URL{"loc": "/geos", "geo": stm.URL{
"format": "kml",
}})
Couldn't find Geo sitemaps example. Although its like a below.
<url>
<loc>/geos</loc>
<geo:geo>
<geo:format>kml</geo:format>
</geo:geo>
</url>
Mobile sitemaps
sm.Add(stm.URL{"loc": "mobiles", "mobile": true})
Look at Feature phone sitemaps as required.
Full Example
package main
import (
"github.com/yaotian/go-sitemap/stm"
)
func main() {
sm := stm.NewSitemap()
sm.SetDefaultHost("http://yourhost.com")
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemaps/")
sm.SetSitemapsPath("sitemaps/")
sm.SetFilename("anothername")
sm.SetCompress(true)
sm.SetVerbose(true)
sm.SetAdapter(&stm.S3Adapter{Region: "ap-northeast-1", Bucket: "your-bucket"})
sm.Create()
sm.Add(stm.URL{"loc": "/home", "changefreq": "dayly"})
sm.Add(stm.URL{"loc": "/abouts", "mobile": true})
sm.Add(stm.URL{"loc": "/news", "news": stm.URL{
"publication": stm.URL{
"name": "Example",
"language": "en",
},
"title": "My Article",
"keywords": "my article, articles about myself",
"stock_tickers": "SAO:PETR3",
"publication_date": "2011-08-22",
"access": "Subscription",
"genres": "PressRelease",
}})
sm.Add(stm.URL{"loc": "/images", "image": []stm.URL{
{"loc": "http://www.example.com/image.png", "title": "Image"},
{"loc": "http://www.example.com/image1.png", "title": "Image1"},
}})
sm.Add(stm.URL{"loc": "/videos", "video": stm.URL{
"thumbnail_loc": "http://www.example.com/video1_thumbnail.png",
"title": "Title",
"description": "Description",
"content_loc": "http://www.example.com/cool_video.mpg",
"category": "Category",
"tag": []string{"one", "two", "three"},
}})
sm.Add(stm.URL{"loc": "/geos", "geo": stm.URL{
"format": "kml",
}})
sm.Finalize().PingSearchEngines("http://newengine.com/ping?url=%s")
}
支持百度的sitemap
urls := makeUrl()
baidu_sm := stm.NewSitemap()
baidu_sm.SetVerbose(true)
baidu_sm.SetCompress(false)
baidu_sm.SetDefaultHost(setting.AppUrl2)
baidu_sm.SetPublicPath("static/baidu/")
baidu_sm.SetFilename("sitemap")
baidu_sm.Create()
baidu_sm.SetSearchEngine(stm.SearcnEngine_Baidu)
sm2 := stm.NewSitemap()
sm2.SetVerbose(true)
sm2.SetCompress(false)
sm2.SetDefaultHost(setting.AppUrl2)
sm2.SetPublicPath("static/google/")
sm2.SetFilename("sitemap")
sm2.Create()
for _, url := range urls {
nv := stm.NewMobleType("pc,mobile")
nv2 := stm.NewMobleType("")
url["mobile"] = nv
baidu_sm.Add(url)
url["mobile"] = nv2
sm2.Add(url)
}
baidu_sm.Finalize()
sm2.Finalize()
Documentation
How to testing
Prepare testing
$ go get github.com/clbanning/mxj
Do testing
$ go test -v -cover ./...