@@ -100,51 +100,9 @@ func (c *Client) GetUserTweets(ctx context.Context, userId string, maxResults in
100
100
tracer := metrics .TraceMethodCall (ctx , metricsStructName , "GetUserTweets" )
101
101
defer tracer .End ()
102
102
103
- tweets , err := func () ([]* Tweet , error ) {
104
- bearerToken , err := c .getBearerToken (c .clientId , c .clientSecret )
105
- if err != nil {
106
- return nil , err
107
- }
108
-
109
- url := fmt .Sprintf (baseUrl + "users/" + userId + "/tweets?max_results=%d" , maxResults )
110
-
111
- req , err := http .NewRequest ("GET" , url , nil )
112
- if err != nil {
113
- return nil , err
114
- }
115
-
116
- req .Header .Add ("Authorization" , "Bearer " + bearerToken )
117
-
118
- resp , err := c .httpClient .Do (req )
119
- if err != nil {
120
- return nil , err
121
- }
122
- defer resp .Body .Close ()
123
-
124
- if resp .StatusCode != http .StatusOK {
125
- return nil , fmt .Errorf ("unexpected http status code: %d" , resp .StatusCode )
126
- }
127
-
128
- var result struct {
129
- Data []* Tweet `json:"data"`
130
- Errors []* twitterError `json:"errors"`
131
- }
132
-
133
- body , err := io .ReadAll (resp .Body )
134
- if err != nil {
135
- return nil , err
136
- }
137
-
138
- if err := json .Unmarshal (body , & result ); err != nil {
139
- return nil , err
140
- }
141
-
142
- if len (result .Errors ) > 0 {
143
- return nil , result .Errors [0 ].toError ()
144
- }
145
- return result .Data , nil
146
- }()
103
+ url := fmt .Sprintf (baseUrl + "users/" + userId + "/tweets?max_results=%d" , maxResults )
147
104
105
+ tweets , err := c .getTweets (ctx , url )
148
106
if err != nil {
149
107
tracer .OnError (err )
150
108
}
@@ -156,55 +114,13 @@ func (c *Client) SearchUserTweets(ctx context.Context, userId, searchString stri
156
114
tracer := metrics .TraceMethodCall (ctx , metricsStructName , "SearchUserTweets" )
157
115
defer tracer .End ()
158
116
159
- tweets , err := func () ([]* Tweet , error ) {
160
- bearerToken , err := c .getBearerToken (c .clientId , c .clientSecret )
161
- if err != nil {
162
- return nil , err
163
- }
164
-
165
- url := fmt .Sprintf (
166
- baseUrl + "tweets/search/all?query=%s&max_results=%d" ,
167
- url .QueryEscape (fmt .Sprintf ("from:%s %s" , userId , searchString )),
168
- maxResults ,
169
- )
170
-
171
- req , err := http .NewRequest ("GET" , url , nil )
172
- if err != nil {
173
- return nil , err
174
- }
175
-
176
- req .Header .Add ("Authorization" , "Bearer " + bearerToken )
177
-
178
- resp , err := c .httpClient .Do (req )
179
- if err != nil {
180
- return nil , err
181
- }
182
- defer resp .Body .Close ()
183
-
184
- if resp .StatusCode != http .StatusOK {
185
- return nil , fmt .Errorf ("unexpected http status code: %d" , resp .StatusCode )
186
- }
187
-
188
- var result struct {
189
- Data []* Tweet `json:"data"`
190
- Errors []* twitterError `json:"errors"`
191
- }
192
-
193
- body , err := io .ReadAll (resp .Body )
194
- if err != nil {
195
- return nil , err
196
- }
197
-
198
- if err := json .Unmarshal (body , & result ); err != nil {
199
- return nil , err
200
- }
201
-
202
- if len (result .Errors ) > 0 {
203
- return nil , result .Errors [0 ].toError ()
204
- }
205
- return result .Data , nil
206
- }()
117
+ url := fmt .Sprintf (
118
+ baseUrl + "tweets/search/all?query=%s&max_results=%d" ,
119
+ url .QueryEscape (fmt .Sprintf ("from:%s %s" , userId , searchString )),
120
+ maxResults ,
121
+ )
207
122
123
+ tweets , err := c .getTweets (ctx , url )
208
124
if err != nil {
209
125
tracer .OnError (err )
210
126
}
@@ -256,6 +172,51 @@ func (c *Client) getUser(ctx context.Context, fromUrl string) (*User, error) {
256
172
return result .Data , nil
257
173
}
258
174
175
+ func (c * Client ) getTweets (ctx context.Context , fromUrl string ) ([]* Tweet , error ) {
176
+ bearerToken , err := c .getBearerToken (c .clientId , c .clientSecret )
177
+ if err != nil {
178
+ return nil , err
179
+ }
180
+
181
+ req , err := http .NewRequest ("GET" , fromUrl , nil )
182
+ if err != nil {
183
+ return nil , err
184
+ }
185
+
186
+ req = req .WithContext (ctx )
187
+
188
+ req .Header .Add ("Authorization" , "Bearer " + bearerToken )
189
+
190
+ resp , err := c .httpClient .Do (req )
191
+ if err != nil {
192
+ return nil , err
193
+ }
194
+ defer resp .Body .Close ()
195
+
196
+ if resp .StatusCode != http .StatusOK {
197
+ return nil , fmt .Errorf ("unexpected http status code: %d" , resp .StatusCode )
198
+ }
199
+
200
+ var result struct {
201
+ Data []* Tweet `json:"data"`
202
+ Errors []* twitterError `json:"errors"`
203
+ }
204
+
205
+ body , err := io .ReadAll (resp .Body )
206
+ if err != nil {
207
+ return nil , err
208
+ }
209
+
210
+ if err := json .Unmarshal (body , & result ); err != nil {
211
+ return nil , err
212
+ }
213
+
214
+ if len (result .Errors ) > 0 {
215
+ return nil , result .Errors [0 ].toError ()
216
+ }
217
+ return result .Data , nil
218
+ }
219
+
259
220
func (c * Client ) getBearerToken (clientId , clientSecret string ) (string , error ) {
260
221
c .bearerTokenMu .RLock ()
261
222
if time .Since (c .lastBearerTokenRefresh ) < bearerTokenMaxAge {
0 commit comments