Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

150 lines
3.4KB

  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. )
  10. //get a list of material
  11. type materialQuery struct {
  12. Type string `json:"type"`
  13. Offiset int `json:"offset"`
  14. Count int `json:"count"`
  15. }
  16. //overall material count
  17. type materialCount struct {
  18. VoiceCount int64 `json:"voice_count"`
  19. VideoCount int64 `json:"video_count"`
  20. ImageCount int64 `json:"image_count"`
  21. NewsCount int64 `json:"news_count"`
  22. }
  23. //Material Image Item
  24. type materialItemImage struct {
  25. MediaID string `json:"media_id"`
  26. Name string `json:"name"`
  27. UpdateTime int `json:"update_time"`
  28. URL string `json:"url"`
  29. }
  30. type materialImageList struct {
  31. TotalCount int `json:"total_count"`
  32. ItemCount int `json:"item_count"`
  33. Items []materialItemImage `json:"item"`
  34. }
  35. //Material News Item - Article
  36. type materialArticle struct {
  37. Title string `json:"title"`
  38. Author string `json:"author"`
  39. Digest string `json:"digest"`
  40. Content string `json:"content"`
  41. ContentSourceURL string `json:"content_source_url"`
  42. ThumbMediaID string `json:"thumb_media_id"`
  43. ShowCoverPic int `json:"show_cover_pic"`
  44. URL string `json:"url"`
  45. ThumbURL string `json:"thumb_url"`
  46. NeedOpenComment int `json:"need_open_comment"`
  47. OnlyFansCanComment int `json:"only_fans_can_comment"`
  48. }
  49. type materialNewsItem struct {
  50. MediaID string `json:"media_id"`
  51. UpdateTime int `json:"update_time"`
  52. Content struct {
  53. CreateTime int `json:"create_time"`
  54. UpdateTime int `json:"update_time"`
  55. NewsItem []materialArticle `json:"news_item"`
  56. } `json:"content"`
  57. }
  58. type materialNewsList struct {
  59. TotalCount int `json:"total_count"`
  60. ItemCount int `json:"item_count"`
  61. Items []materialNewsItem `json:"item"`
  62. }
  63. //
  64. //-- function definition start
  65. //
  66. func getNewList() (jstr string) {
  67. jstr = getMediaList("news")
  68. return
  69. }
  70. func getVoiceList() (jstr string) {
  71. jstr = getMediaList("voice")
  72. return
  73. }
  74. func getVideoList() (jstr string) {
  75. jstr = getMediaList("video")
  76. return
  77. }
  78. func getImageList() (jstr string) {
  79. jstr = getMediaList("image")
  80. return
  81. }
  82. func getMediaList(mediaType string) (jstr string) {
  83. var q = materialQuery{mediaType, 0, 20}
  84. jsonStr, _ := json.Marshal(q)
  85. u := url4MaterialList()
  86. req, err := http.NewRequest("POST", u, bytes.NewBuffer(jsonStr))
  87. log.Println(u)
  88. if err != nil {
  89. return ""
  90. }
  91. client := &http.Client{}
  92. r, err := client.Do(req)
  93. if err != nil {
  94. return ""
  95. }
  96. defer r.Body.Close()
  97. b, _ := ioutil.ReadAll(r.Body)
  98. jstr = string(b)
  99. return
  100. }
  101. func url4MaterialList() string {
  102. atk, _ := GetAccessToken()
  103. u := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=%s", atk)
  104. return u
  105. }
  106. func url4MaterialCount() string {
  107. atk, _ := GetAccessToken()
  108. u := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=%s", atk)
  109. return u
  110. }
  111. func getMaterialCount() (materialCount, error) {
  112. mc := materialCount{}
  113. url := url4MaterialCount()
  114. r, err := http.Get(url)
  115. if err != nil {
  116. return mc, err
  117. }
  118. defer r.Body.Close()
  119. b, _ := ioutil.ReadAll(r.Body)
  120. err = json.Unmarshal(b, &mc)
  121. return mc, nil
  122. }
  123. func unmarshalImageList(jstr string) (r materialImageList) {
  124. json.Unmarshal([]byte(jstr), &r)
  125. return
  126. }
  127. func unmarshalNewsList(jstr string) (r materialNewsList) {
  128. json.Unmarshal([]byte(jstr), &r)
  129. return
  130. }