Skip to content

Commit

Permalink
Merge #53
Browse files Browse the repository at this point in the history
53: feat: Added Users Lookup endpoints (#23) r=myConsciousness a=myConsciousness

# 1. Description

<!-- Provide a description of what this PR is doing.
If you're modifying existing behavior, describe the existing behavior, how this PR is changing it,
and what motivated the change. If this is a breaking change, specify explicitly which APIs have been
changed. -->

## 1.1. Checklist

<!-- Before you create this PR confirm that it meets all requirements listed below by checking the
relevant checkboxes (`[x]`). This will ensure a smooth and quick review process. -->

- [x] The title of my PR starts with a [Conventional Commit] prefix (`fix:`, `feat:`, `docs:` etc).
- [x] I have read the [Contributor Guide] and followed the process outlined for submitting PRs.
- [x] I have updated/added tests for ALL new/updated/fixed functionality.
- [x] I have updated/added relevant documentation in `docs` and added dartdoc comments with `///`.
- [x] I have updated/added relevant examples in `examples`.

## 1.2. Breaking Change

<!-- Does your PR require users to manually update their apps to accommodate your change?

If the PR is a breaking change this should be indicated with suffix "!"  (for example, `feat!:`, `fix!:`). See [Conventional Commit] for details.
-->

- [ ] Yes, this is a breaking change.
- [x] No, this is _not_ a breaking change.

## 1.3. Related Issues

<!-- Provide a list of issues related to this PR from the [issue database].
Indicate which of these issues are resolved or fixed by this PR, i.e. Fixes #xxxx* !-->

<!-- Links -->

[issue database]: https://github.com/twitter-dart/twitter-api-v2/issues
[contributor guide]: https://github.com/twitter-dart/twitter-api-v2/blob/main/CONTRIBUTING.md
[style guide]: https://github.com/twitter-dart/twitter-api-v2/blob/main/STYLEGUIDE.md
[conventional commit]: https://conventionalcommits.org


Co-authored-by: myConsciousness <kato.shinya.dev@gmail.com>
  • Loading branch information
bors[bot] and myConsciousness committed May 3, 2022
2 parents 03050e0 + 436c82e commit 538719d
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 538719d

Please sign in to comment.