package captureas import ( "crypto/md5" "encoding/hex" "fmt" "io" "net/url" ) type CaptureParams struct { URL string `field:"url"` Width int `field:"w"` Height int `field:"h"` } func (c *Client) Capture(cp *CaptureParams) string { u, err := url.Parse(c.Config.BaseURL) if err != nil { return "" } // Build query string q := u.Query() q.Add("url", cp.URL) if cp.Width > 0 { q.Add("w", fmt.Sprintf("%d", cp.Width)) } if cp.Height > 0 { q.Add("h", fmt.Sprintf("%d", cp.Height)) } u.RawQuery = q.Encode() // Calculate token h := md5.New() ue, _ := url.QueryUnescape(u.RawQuery) io.WriteString(h, ue) io.WriteString(h, c.Secret) token := hex.EncodeToString(h.Sum(nil)) u.Path = "/" + c.Username + "/" + token + "/png" return u.String() }