-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathstatuses_user_timeline.go
136 lines (130 loc) · 6.32 KB
/
statuses_user_timeline.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// https://open.weibo.com/wiki/2/statuses/user_timeline
// access_token true string 采用OAuth授权方式为必填参数,OAuth授权后获得。
// uid false int64 需要查询的用户ID。
// screen_name false string 需要查询的用户昵称。
// since_id false int64 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。
// max_id false int64 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。
// count false int 单页返回的记录条数,最大不超过100,超过100以100处理,默认为20。
// page false int 返回结果的页码,默认为1。
// base_app false int 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0。
// feature false int 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0。
// trim_user false int 返回值中user字段开关,0:返回完整user字段、1:user字段仅返回user_id,默认为0。
//
// 获取自己的微博,参数uid与screen_name可以不填,则自动获取当前登录用户的微博;
// 指定获取他人的微博,参数uid与screen_name二者必选其一,且只能选其一;
// 接口升级后:uid与screen_name只能为当前授权用户;
// 读取当前授权用户所有关注人最新微博列表,请使用:获取当前授权用户及其所关注用户的最新微博接口(statuses/home_timeline);
// 此接口最多只返回最新的5条数据,官方移动SDK调用可返回10条;
package weibo
import (
"encoding/json"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"github.com/pkg/errors"
)
// RespStatusesUserTimeline StatusesUserTimeline 接口返回结构
type RespStatusesUserTimeline struct {
RespError
Statuses []struct {
CreatedAt string `json:"created_at"`
ID int64 `json:"id"`
Text string `json:"text"`
Source string `json:"source"`
Favorited bool `json:"favorited"`
Truncated bool `json:"truncated"`
InReplyToStatusID string `json:"in_reply_to_status_id"`
InReplyToUserID string `json:"in_reply_to_user_id"`
InReplyToScreenName string `json:"in_reply_to_screen_name"`
Geo interface{} `json:"geo"`
Mid string `json:"mid"`
RepostsCount int `json:"reposts_count"`
CommentsCount int `json:"comments_count"`
Annotations []interface{} `json:"annotations"`
User struct {
ID int `json:"id"`
ScreenName string `json:"screen_name"`
Name string `json:"name"`
Province string `json:"province"`
City string `json:"city"`
Location string `json:"location"`
Description string `json:"description"`
URL string `json:"url"`
ProfileImageURL string `json:"profile_image_url"`
Domain string `json:"domain"`
Gender string `json:"gender"`
FollowersCount int `json:"followers_count"`
FriendsCount int `json:"friends_count"`
StatusesCount int `json:"statuses_count"`
FavouritesCount int `json:"favourites_count"`
CreatedAt string `json:"created_at"`
Following bool `json:"following"`
AllowAllActMsg bool `json:"allow_all_act_msg"`
Remark string `json:"remark"`
GeoEnabled bool `json:"geo_enabled"`
Verified bool `json:"verified"`
AllowAllComment bool `json:"allow_all_comment"`
AvatarLarge string `json:"avatar_large"`
VerifiedReason string `json:"verified_reason"`
FollowMe bool `json:"follow_me"`
OnlineStatus int `json:"online_status"`
BiFollowersCount int `json:"bi_followers_count"`
} `json:"user"`
} `json:"statuses"`
PreviousCursor int `json:"previous_cursor"`
NextCursor int64 `json:"next_cursor"`
TotalNumber int `json:"total_number"`
}
// StatusesUserTimeline 获取当前授权用户最新发表的微博列表
// uid int64 需要查询的用户ID。
// screenName string 需要查询的用户昵称。
// sinceID int64 返回ID比since_id大的微博(即比since_id时间晚的微博)。
// maxID int64 返回ID小于或等于max_id的微博。
// count int 单页返回的记录条数,最大不超过100,超过100以100处理。
// page int 返回结果的页码
// baseApp int 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用)。
// feature int 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐。
// trimUser int 返回值中user字段开关,0:返回完整user字段、1:user字段仅返回user_id。
func (w *Weibo) StatusesUserTimeline(token string, uid int64, screenName string, sinceID, maxID int64, count, page, baseApp, feature, trimUser int) (*RespStatusesUserTimeline, error) {
apiURL := "https://api.weibo.com/2/statuses/user_timeline.json"
data := url.Values{
"access_token": {token},
"since_id": {strconv.FormatInt(sinceID, 10)},
"max_id": {strconv.FormatInt(maxID, 10)},
"count": {strconv.Itoa(count)},
"page": {strconv.Itoa(page)},
"base_app": {strconv.Itoa(baseApp)},
"feature": {strconv.Itoa(feature)},
"trim_user": {strconv.Itoa(trimUser)},
}
if uid != 0 {
data.Add("uid", strconv.FormatInt(uid, 10))
}
if screenName != "" {
data.Add("screen_name", screenName)
}
req, err := http.NewRequest(http.MethodGet, apiURL, nil)
if err != nil {
return nil, errors.Wrap(err, "weibo StatusesUserTimeline NewRequest error")
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.URL.RawQuery = data.Encode()
resp, err := w.client.Do(req)
if err != nil {
return nil, errors.Wrap(err, "weibo StatusesUserTimeline Do error")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, errors.Wrap(err, "weibo StatusesUserTimeline ReadAll error")
}
r := &RespStatusesUserTimeline{}
if err := json.Unmarshal(body, r); err != nil {
return nil, errors.Wrap(err, "weibo StatusesUserTimeline Unmarshal error:"+string(body))
}
if r.Error != "" && r.ErrorCode != 0 {
return nil, errors.New("weibo StatusesUserTimeline resp error:" + r.Error)
}
return r, nil
}