package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) //get a list of material type materialQuery struct { Type string `json:"type"` Offiset int `json:"offset"` Count int `json:"count"` } //overall material count type materialCount struct { VoiceCount int64 `json:"voice_count"` VideoCount int64 `json:"video_count"` ImageCount int64 `json:"image_count"` NewsCount int64 `json:"news_count"` } //Material Image Item type materialItemImage struct { MediaID string `json:"media_id"` Name string `json:"name"` UpdateTime int `json:"update_time"` URL string `json:"url"` } type materialImageList struct { TotalCount int `json:"total_count"` ItemCount int `json:"item_count"` Items []materialItemImage `json:"item"` } //Material News Item - Article type materialArticle struct { Title string `json:"title"` Author string `json:"author"` Digest string `json:"digest"` Content string `json:"content"` ContentSourceURL string `json:"content_source_url"` ThumbMediaID string `json:"thumb_media_id"` ShowCoverPic int `json:"show_cover_pic"` URL string `json:"url"` ThumbURL string `json:"thumb_url"` NeedOpenComment int `json:"need_open_comment"` OnlyFansCanComment int `json:"only_fans_can_comment"` } type materialNewsItem struct { MediaID string `json:"media_id"` UpdateTime int `json:"update_time"` Content struct { CreateTime int `json:"create_time"` UpdateTime int `json:"update_time"` NewsItem []materialArticle `json:"news_item"` } `json:"content"` } type materialNewsList struct { TotalCount int `json:"total_count"` ItemCount int `json:"item_count"` Items []materialNewsItem `json:"item"` } // //-- function definition start // func getNewList() (jstr string) { jstr = getMediaList("news") return } func getVoiceList() (jstr string) { jstr = getMediaList("voice") return } func getVideoList() (jstr string) { jstr = getMediaList("video") return } func getImageList() (jstr string) { jstr = getMediaList("image") return } func getMediaList(mediaType string) (jstr string) { var q = materialQuery{mediaType, 0, 20} jsonStr, _ := json.Marshal(q) u := url4MaterialList() req, err := http.NewRequest("POST", u, bytes.NewBuffer(jsonStr)) log.Println(u) if err != nil { return "" } client := &http.Client{} r, err := client.Do(req) if err != nil { return "" } defer r.Body.Close() b, _ := ioutil.ReadAll(r.Body) jstr = string(b) return } func url4MaterialList() string { atk, _ := GetAccessToken() u := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=%s", atk) return u } func url4MaterialCount() string { atk, _ := GetAccessToken() u := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=%s", atk) return u } func getMaterialCount() (materialCount, error) { mc := materialCount{} url := url4MaterialCount() r, err := http.Get(url) if err != nil { return mc, err } defer r.Body.Close() b, _ := ioutil.ReadAll(r.Body) err = json.Unmarshal(b, &mc) return mc, nil } func unmarshalImageList(jstr string) (r materialImageList) { json.Unmarshal([]byte(jstr), &r) return } func unmarshalNewsList(jstr string) (r materialNewsList) { json.Unmarshal([]byte(jstr), &r) return }