Skip to content

Commit

Permalink
feat: Added Users Lookup endpoints (#23)
Browse files Browse the repository at this point in the history
  • Loading branch information
myConsciousness committed May 3, 2022
1 parent 03050e0 commit 436c82e
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 0 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
- Added **Tweet Bookmarks** endpoints. ([#2](https://github.com/twitter-dart/twitter-api-v2/issues/2))
- GET /2/tweets/counts/all
- GET /2/tweets/counts/recent
- Added **Users Lookup** endpoints. ([#23](https://github.com/twitter-dart/twitter-api-v2/issues/23))
- GET /2/users
- GET /2/users/:id
- GET /2/users/by
- GET /2/users/by/username/:username
- GET /2/users/me

## v1.0.0

Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ void main() async {
2. [GET /2/users/:id/followers](https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-followers)
3. [GET /2/users/:id/following](https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-following)
4. [POST /2/users/:id/following](https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/post-users-source_user_id-following)
2. **Lookup Users**
1. [GET /2/users](https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users)
2. [GET /2/users/:id](https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-id)
3. [GET /2/users/by](https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by)
4. [GET /2/users/by/username/:username](https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by-username-username)
5. [GET /2/users/me](https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me)

## 1.3. Contribution

Expand Down
151 changes: 151 additions & 0 deletions lib/src/service/users/users_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,103 @@ abstract class UsersService {
Future<TwitterResponse<List<UserData>, UserMeta>> followings(
{required String userId});

/// Returns a variety of information about a single user specified by the requested ID.
///
/// ## Parameters
///
/// - [userId]: The ID of the user to lookup.
///
/// ## Endpoint Url
///
/// - https://api.twitter.com/2/users/:id
///
/// ## Rate Limits
///
/// - **App rate limit (OAuth 2.0 App Access Token)**:
/// 900 requests per 15-minute window shared among all users of your app
///
/// - **User rate limit (OAuth 2.0 user Access Token)**:
/// 900 requests per 15-minute window per each authenticated user
///
/// ## Reference
///
/// - https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-id
Future<TwitterResponse<UserData, void>> lookupById({required String userId});

/// Returns a variety of information about one or more users specified by the requested IDs.
///
/// ## Parameters
///
/// - [userIds]: A list of user IDs.
/// Up to 100 are allowed in a single request.
///
/// ## Endpoint Url
///
/// - https://api.twitter.com/2/users
///
/// ## Rate Limits
///
/// - **App rate limit (OAuth 2.0 App Access Token)**:
/// 900 requests per 15-minute window shared among all users of your app
///
/// - **User rate limit (OAuth 2.0 user Access Token)**:
/// 900 requests per 15-minute window per each authenticated user
///
/// ## Reference
///
/// - https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users
Future<TwitterResponse<List<UserData>, void>> lookupByIds(
{required List<String> userIds});

/// Returns a variety of information about one or more users specified by their usernames.
///
/// ## Parameters
///
/// - [username]: The Twitter username (handle) of the user.
///
/// ## Endpoint Url
///
/// - https://api.twitter.com/2/users/by/username/:username
///
/// ## Rate Limits
///
/// - **App rate limit (OAuth 2.0 App Access Token)**:
/// 900 requests per 15-minute window shared among all users of your app
///
/// - **User rate limit (OAuth 2.0 user Access Token)**:
/// 900 requests per 15-minute window per each authenticated user
///
/// ## Reference
///
/// - https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by-username-username
Future<TwitterResponse<UserData, void>> lookupByName(
{required String username});

/// Returns a variety of information about one or more users specified by their usernames.
///
/// ## Parameters
///
/// - [usernames]: A list of Twitter usernames (handles).
/// Up to 100 are allowed in a single request.
///
/// ## Endpoint Url
///
/// - https://api.twitter.com/2/users/by
///
/// ## Rate Limits
///
/// - **App rate limit (OAuth 2.0 App Access Token)**:
/// 900 requests per 15-minute window shared among all users of your app
///
/// - **User rate limit (OAuth 2.0 user Access Token)**:
/// 900 requests per 15-minute window per each authenticated user
///
/// ## Reference
///
/// - https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by
Future<TwitterResponse<List<UserData>, void>> lookupByNames(
{required List<String> usernames});

/// Returns information about an authorized user.
///
/// ## Endpoint Url
Expand Down Expand Up @@ -202,6 +299,60 @@ class _UsersService extends BaseService implements UsersService {
);
}

@override
Future<TwitterResponse<UserData, void>> lookupById(
{required String userId}) async {
final response = await super.get(
UserContext.oauth2,
'/2/users/$userId',
);

return TwitterResponse(data: UserData.fromJson(response['data']));
}

@override
Future<TwitterResponse<List<UserData>, void>> lookupByIds(
{required List<String> userIds}) async {
final response = await super.get(
UserContext.oauth2,
'/2/users',
queryParameters: {'ids': userIds.join(',')},
);

return TwitterResponse(
data: response['data']
.map<UserData>((user) => UserData.fromJson(user))
.toList(),
);
}

@override
Future<TwitterResponse<UserData, void>> lookupByName(
{required String username}) async {
final response = await super.get(
UserContext.oauth2,
'/2/users/by/username/$username',
);

return TwitterResponse(data: UserData.fromJson(response['data']));
}

@override
Future<TwitterResponse<List<UserData>, void>> lookupByNames(
{required List<String> usernames}) async {
final response = await super.get(
UserContext.oauth2,
'/2/users/by',
queryParameters: {'usernames': usernames.join(',')},
);

return TwitterResponse(
data: response['data']
.map<UserData>((user) => UserData.fromJson(user))
.toList(),
);
}

@override
Future<TwitterResponse<UserData, void>> lookupMe() async {
final response = await super.get(
Expand Down

0 comments on commit 436c82e

Please sign in to comment.