user.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package user
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/lin-jim-leon/douyin/util"
  6. "net/url"
  7. )
  8. const (
  9. UserInfoUrl string = "https://open.douyin.com/oauth/userinfo/"
  10. UserFansUrl string = "https://open.douyin.com/data/external/user/fans/"
  11. UserLikeUrl string = "https://open.douyin.com/data/external/user/like/"
  12. UserCommentsUrl string = "https://open.douyin.com/data/external/user/comment/"
  13. UserShareUrl string = "https://open.douyin.com/data/external/user/share/"
  14. )
  15. // Info .
  16. type Info struct {
  17. util.CommonError
  18. Avatar string `json:"avatar"`
  19. AvatarLarger string `json:"avatar_larger"`
  20. ClientKey string `json:"client_key"`
  21. EAccountRole string `json:"e_account_role"`
  22. ErrorCode int `json:"error_code"`
  23. LogId string `json:"log_id"`
  24. Nickname string `json:"nickname"`
  25. OpenId string `json:"open_id"`
  26. UnionId string `json:"union_id"`
  27. }
  28. type UserInfoRes struct {
  29. Message string `json:"message"`
  30. Data Info `json:"data"`
  31. }
  32. // GetUserInfo获取用户基本信息
  33. func GetUserInfo(openId string, accesstoken string) (info UserInfoRes, err error) {
  34. req := url.Values{}
  35. req.Set("access_token", accesstoken)
  36. req.Set("open_id", openId)
  37. data := req.Encode()
  38. var response []byte
  39. response, err = util.HTTPPost(UserInfoUrl, data, "application/x-www-form-urlencoded")
  40. if err != nil {
  41. return UserInfoRes{}, err
  42. }
  43. var result UserInfoRes
  44. err = json.Unmarshal(response, &result)
  45. if err != nil {
  46. return UserInfoRes{}, err
  47. }
  48. if result.Data.ErrorCode != 0 {
  49. return UserInfoRes{}, fmt.Errorf("GetUserInfo error : errcode=%v , errmsg=%v", result.Data.ErrCode, result.Data.ErrMsg)
  50. }
  51. return result, nil
  52. }
  53. type UserfanRes struct {
  54. Data UserfanData `json:"data"`
  55. Extra UserfanExtra `json:"extra"`
  56. }
  57. type UserfanData struct {
  58. Description string `json:"description"`
  59. ErrorCode int `json:"error_code"`
  60. ResultList []UserfanResult `json:"result_list"`
  61. }
  62. type UserfanResult struct {
  63. Date string `json:"date"`
  64. NewFans string `json:"new_fans"`
  65. TotalFans string `json:"total_fans"`
  66. }
  67. type UserfanExtra struct {
  68. Description string `json:"description"`
  69. ErrorCode string `json:"error_code"`
  70. LogID string `json:"logid"`
  71. Now string `json:"now"`
  72. SubDescription string `json:"sub_description"`
  73. SubErrorCode string `json:"sub_error_code"`
  74. }
  75. // GetUserFans
  76. func GetUserFans(accesstoken string, date string, open_id string) (info UserfanRes, err error) {
  77. headers := map[string]string{
  78. "access-token": accesstoken,
  79. "Content-Type": "application/json",
  80. }
  81. params := map[string]string{
  82. "date_type": date, //7/15/30
  83. "open_id": open_id,
  84. }
  85. var response []byte
  86. response, err = util.HTTPGetWithHeaders(UserFansUrl, headers, params)
  87. if err != nil {
  88. return UserfanRes{}, err
  89. }
  90. var result UserfanRes
  91. err = json.Unmarshal(response, &result)
  92. if err != nil {
  93. return UserfanRes{}, err
  94. }
  95. if result.Data.ErrorCode != 0 {
  96. return UserfanRes{}, fmt.Errorf("GetUserfan error : errcode=%v , errmsg=%v", result.Data.ErrorCode, result.Data.Description)
  97. }
  98. return result, nil
  99. }
  100. type UserLikeRes struct {
  101. Data UserLikeData `json:"data"`
  102. Extra UserLikeExtra `json:"extra"`
  103. }
  104. type UserLikeData struct {
  105. Description string `json:"description"`
  106. ErrorCode int `json:"error_code"`
  107. ResultList []UserLikeResult `json:"result_list"`
  108. }
  109. type UserLikeResult struct {
  110. Date string `json:"date"`
  111. NewLike string `json:"new_like"`
  112. }
  113. type UserLikeExtra struct {
  114. Description string `json:"description"`
  115. ErrorCode string `json:"error_code"`
  116. LogID string `json:"logid"`
  117. Now string `json:"now"`
  118. SubDescription string `json:"sub_description"`
  119. SubErrorCode string `json:"sub_error_code"`
  120. }
  121. // GetUserLike
  122. func GetUserLike(accesstoken string, date string, open_id string) (info UserLikeRes, err error) {
  123. headers := map[string]string{
  124. "access-token": accesstoken,
  125. "Content-Type": "application/json",
  126. }
  127. params := map[string]string{
  128. "date_type": date, //7/15/30
  129. "open_id": open_id,
  130. }
  131. var response []byte
  132. response, err = util.HTTPGetWithHeaders(UserLikeUrl, headers, params)
  133. if err != nil {
  134. return UserLikeRes{}, err
  135. }
  136. var result UserLikeRes
  137. err = json.Unmarshal(response, &result)
  138. if err != nil {
  139. return UserLikeRes{}, err
  140. }
  141. if result.Data.ErrorCode != 0 {
  142. return UserLikeRes{}, fmt.Errorf("GetUserlike error : errcode=%v , errmsg=%v", result.Data.ErrorCode, result.Data.Description)
  143. }
  144. return result, nil
  145. }
  146. type UserCommentRes struct {
  147. Data UserCommentData `json:"data"`
  148. Extra UserCommentExtra `json:"extra"`
  149. }
  150. type UserCommentData struct {
  151. Description string `json:"description"`
  152. ErrorCode int `json:"error_code"`
  153. ResultList []UserCommentEntry `json:"result_list"`
  154. }
  155. type UserCommentEntry struct {
  156. Date string `json:"date"`
  157. NewComment string `json:"new_comment"`
  158. }
  159. type UserCommentExtra struct {
  160. Description string `json:"description"`
  161. ErrorCode string `json:"error_code"`
  162. LogID string `json:"logid"`
  163. Now string `json:"now"`
  164. SubDescription string `json:"sub_description"`
  165. SubErrorCode string `json:"sub_error_code"`
  166. }
  167. func GetUserComments(accesstoken string, date string, open_id string) (info UserCommentRes, err error) {
  168. headers := map[string]string{
  169. "access-token": accesstoken,
  170. "Content-Type": "application/json",
  171. }
  172. params := map[string]string{
  173. "date_type": date, //7/15/30
  174. "open_id": open_id,
  175. }
  176. var response []byte
  177. response, err = util.HTTPGetWithHeaders(UserCommentsUrl, headers, params)
  178. if err != nil {
  179. return UserCommentRes{}, err
  180. }
  181. var result UserCommentRes
  182. err = json.Unmarshal(response, &result)
  183. if err != nil {
  184. return UserCommentRes{}, err
  185. }
  186. if result.Data.ErrorCode != 0 {
  187. return UserCommentRes{}, fmt.Errorf("GetUsercomments error : errcode=%v , errmsg=%v", result.Data.ErrorCode, result.Data.Description)
  188. }
  189. return result, nil
  190. }
  191. type UserShareRes struct {
  192. Data UserShareData `json:"data"`
  193. Extra UserShareExtra `json:"extra"`
  194. }
  195. type UserShareData struct {
  196. Description string `json:"description"`
  197. ErrorCode int `json:"error_code"`
  198. ResultList []UserShareItem `json:"result_list"`
  199. }
  200. type UserShareItem struct {
  201. Date string `json:"date"`
  202. NewShare string `json:"new_share"`
  203. }
  204. type UserShareExtra struct {
  205. Description string `json:"description"`
  206. ErrorCode string `json:"error_code"`
  207. LogID string `json:"logid"`
  208. Now string `json:"now"`
  209. SubDescription string `json:"sub_description"`
  210. SubErrorCode string `json:"sub_error_code"`
  211. }
  212. func GetUserShare(accesstoken string, date string, open_id string) (info UserShareRes, err error) {
  213. headers := map[string]string{
  214. "access-token": accesstoken,
  215. "Content-Type": "application/json",
  216. }
  217. params := map[string]string{
  218. "date_type": date, //7/15/30
  219. "open_id": open_id,
  220. }
  221. var response []byte
  222. response, err = util.HTTPGetWithHeaders(UserShareUrl, headers, params)
  223. if err != nil {
  224. return UserShareRes{}, err
  225. }
  226. var result UserShareRes
  227. err = json.Unmarshal(response, &result)
  228. if err != nil {
  229. return UserShareRes{}, err
  230. }
  231. if result.Data.ErrorCode != 0 {
  232. return UserShareRes{}, fmt.Errorf("GetUsercomments error : errcode=%v , errmsg=%v", result.Data.ErrorCode, result.Data.Description)
  233. }
  234. return result, nil
  235. }