Skip to content

Commit e5c65a1

Browse files
committed
feat: Favorite timeline wrappers
1 parent 485d3c3 commit e5c65a1

File tree

4 files changed

+108
-1
lines changed

4 files changed

+108
-1
lines changed

changelog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
PENDING
2+
-------
3+
- Feat: .favoriteTimeline for API v1 #296 (thanks to @AuroraDysis)
4+
- Feat: `duration_millis` property for v1 medias (thanks to @RyoshiKayo)
5+
16
1.12.2
27
------
38
- Feat: .homeTimeline for API v2 #288

doc/v1.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ For streaming API, see [Streaming part](./streaming.md).
2121
* [User timeline](#Usertimeline)
2222
* [By user ID](#ByuserID)
2323
* [By username](#Byusername)
24+
* [Favorites timeline](#Favoritestimeline)
25+
* [By user ID](#ByuserID-1)
26+
* [By username](#Byusername-1)
2427
* [Post and retrieve tweets](#Postandretrievetweets)
2528
* [Create a tweet](#Createatweet)
2629
* [Reply to a tweet](#Replytoatweet)
@@ -217,6 +220,58 @@ const userTimeline = await client.v1.userTimelineByUsername('plhery');
217220
const fetchedTweets = userTimeline.tweets;
218221
```
219222

223+
### <a name='Favoritestimeline'></a>Favorites timeline
224+
225+
#### <a name='ByuserID-1'></a>By user ID
226+
227+
Last favorited tweets of `userId` user.
228+
Get to know how [paginators work here](./paginators.md).
229+
230+
Tweet mode is `extended` by default.
231+
232+
**Method**: `.favoriteTimeline()`
233+
234+
**Endpoint**: `favorites/list.json`
235+
236+
**Right level**: `Read-only`
237+
238+
**Arguments**:
239+
- `userId: string`
240+
- `options?: TweetV1UserTimelineParams`
241+
242+
**Returns**: `UserFavoritesV1Paginator`
243+
244+
**Example**
245+
```ts
246+
const favoritesTimeline = await client.v1.favoriteTimeline('12');
247+
const fetchedTweets = favoritesTimeline.tweets;
248+
```
249+
250+
#### <a name='Byusername-1'></a>By username
251+
252+
Last favorited tweets of @`username` user.
253+
Get to know how [paginators work here](./paginators.md).
254+
255+
Tweet mode is `extended` by default.
256+
257+
**Method**: `.favoriteTimelineByUsername()`
258+
259+
**Endpoint**: `favorites/list.json`
260+
261+
**Right level**: `Read-only`
262+
263+
**Arguments**:
264+
- `username: string`
265+
- `options?: TweetV1UserTimelineParams`
266+
267+
**Returns**: `UserFavoritesV1Paginator`
268+
269+
**Example**
270+
```ts
271+
const favoritesTimeline = await client.v1.favoriteTimelineByUsername('plhery');
272+
const fetchedTweets = favoritesTimeline.tweets;
273+
```
274+
220275
## <a name='Postandretrievetweets'></a>Post and retrieve tweets
221276

222277
### <a name='Createatweet'></a>Create a tweet

src/paginators/tweet.paginator.v1.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,8 @@ export class UserTimelineV1Paginator extends TweetTimelineV1Paginator<TweetV1Tim
8585
export class ListTimelineV1Paginator extends TweetTimelineV1Paginator<TweetV1TimelineResult, ListStatusesV1Params> {
8686
protected _endpoint = 'lists/statuses.json';
8787
}
88+
89+
// Favorites
90+
export class UserFavoritesV1Paginator extends TweetTimelineV1Paginator<TweetV1TimelineResult, TweetV1UserTimelineParams> {
91+
protected _endpoint = 'favorites/list.json';
92+
}

src/v1/client.v1.read.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ import {
5858
ListStatusesV1Params,
5959
ListSubscriptionsV1Params,
6060
} from '../types';
61-
import { HomeTimelineV1Paginator, ListTimelineV1Paginator, MentionTimelineV1Paginator, UserTimelineV1Paginator } from '../paginators/tweet.paginator.v1';
61+
import { HomeTimelineV1Paginator, ListTimelineV1Paginator, MentionTimelineV1Paginator, UserFavoritesV1Paginator, UserTimelineV1Paginator } from '../paginators/tweet.paginator.v1';
6262
import { MuteUserIdsV1Paginator, MuteUserListV1Paginator } from '../paginators/mutes.paginator.v1';
6363
import { FriendshipsIncomingV1Paginator, FriendshipsOutgoingV1Paginator, UserSearchV1Paginator } from '../paginators/user.paginator.v1';
6464
import { ListMembershipsV1Paginator, ListMembersV1Paginator, ListOwnershipsV1Paginator, ListSubscribersV1Paginator, ListSubscriptionsV1Paginator } from '../paginators/list.paginator.v1';
@@ -191,6 +191,48 @@ export default class TwitterApiv1ReadOnly extends TwitterApiSubClient {
191191
});
192192
}
193193

194+
/**
195+
* Returns the most recent Tweets liked by the authenticating or specified user, 20 tweets by default.
196+
* Note: favorites are now known as likes.
197+
* https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list
198+
*/
199+
public async favoriteTimeline(userId: string, options: Partial<TweetV1UserTimelineParams> = {}) {
200+
const queryParams: Partial<TweetV1UserTimelineParams> = {
201+
tweet_mode: 'extended',
202+
user_id: userId,
203+
...options,
204+
};
205+
const initialRq = await this.get<TweetV1TimelineResult>('favorites/list.json', queryParams, { fullResponse: true });
206+
207+
return new UserFavoritesV1Paginator({
208+
realData: initialRq.data,
209+
rateLimit: initialRq.rateLimit!,
210+
instance: this,
211+
queryParams,
212+
});
213+
}
214+
215+
/**
216+
* Returns the most recent Tweets liked by the authenticating or specified user, 20 tweets by default.
217+
* Note: favorites are now known as likes.
218+
* https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list
219+
*/
220+
public async favoriteTimelineByUsername(username: string, options: Partial<TweetV1UserTimelineParams> = {}) {
221+
const queryParams: Partial<TweetV1UserTimelineParams> = {
222+
tweet_mode: 'extended',
223+
screen_name: username,
224+
...options,
225+
};
226+
const initialRq = await this.get<TweetV1TimelineResult>('favorites/list.json', queryParams, { fullResponse: true });
227+
228+
return new UserFavoritesV1Paginator({
229+
realData: initialRq.data,
230+
rateLimit: initialRq.rateLimit!,
231+
instance: this,
232+
queryParams,
233+
});
234+
}
235+
194236
/* Users */
195237

196238
/**

0 commit comments

Comments
 (0)