El envoltorio ligero y multiplataforma para Twitter API v2.0 🐦
| English | 日本語 | Français | Tiếng Việt | বাংলা | Español | Deutsch | Português | 简体中文 |
- 1. Guía 🌎
- 1.1. Empezar ⚡
- 1.2. Puntos finales compatibles 👀
- 1.3. Consejos 🏄
- 1.4. Contribución 🏆
- 1.5. Colaboradores ✨
- 1.6. Mantener ❤️
- 1.7. Licencia 🔑
- 1.8. Más información 🧐
Esta librería proporciona la forma más fácil de usar Twitter API v2.0 en aplicaciones Dart y Flutter.
Mostrar un poco de ❤️ y estrellar el repositorio para apoyar el proyecto.
¡También proporcionamos twitter_oauth2_pkce para una fácil OAuth 2.0 PKCE authentication cuando se usa la API de Twitter!
Con Dart:
dart pub add twitter_api_v2
O con Flutter:
flutter pub add twitter_api_v2
import 'package:twitter_api_v2/twitter_api_v2';
import 'dart:async';
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
//! Necesita obtener claves y tokens en https://developer.twitter.com
final twitter = v2.TwitterApi(
//! Autenticación con OAuth2.0 es el valor predeterminado.
//!
//! Tenga en cuenta que para utilizar puntos finales que requieren ciertos permisos del usuario,
//! como Tweets y Gustos, necesitas un token emitido por OAuth2.0 PKCE.
//!
//! La forma más fácil de lograrlo autenticación con OAuth 2.0 PKCE es utilizar [twitter_oauth2_pkce](https://pub.dev/packages/twitter_oauth2_pkce)!
bearerToken: 'YOUR_TOKEN_HERE',
//! O tal vez prefieras utilizar el viejo método OAuth1.0a
//! sobre el método OAuth2.0 PKCE. A continuación, puede utilizar el código siguiente
//! para establecer los tokens OAuth1.0a.
//!
//! Sin embargo, tenga en cuenta que algunos puntos finales no se pueden utilizar para la autenticación del método OAuth 1.0a.
oauthTokens: v2.OAuthTokens(
consumerKey: 'YOUR_CONSUMER_KEY_HERE',
consumerSecret: 'YOUR_CONSUMER_SECRET_HERE',
accessToken: 'YOUR_ACCESS_TOKEN_HERE',
accessTokenSecret: 'YOUR_ACCESS_TOKEN_SECRET_HERE',
),
//! El tiempo de espera predeterminado es de 10 segundos.
timeout: Duration(seconds: 20),
);
try {
// Obtener el perfil del usuario autenticado.
final me = await twitter.users.lookupMe();
// Obtener los tweets asociados a la consulta de búsqueda.
final tweets = await twitter.tweets.searchRecent(
query: '#ElonMusk',
maxResults: 20,
// Puede expandir el resultado de la búsqueda.
expansions: [
v2.TweetExpansion.authorId,
v2.TweetExpansion.inReplyToUserId,
],
tweetFields: [
v2.TweetField.conversationId,
v2.TweetField.publicMetrics,
],
userFields: [
v2.UserField.location,
v2.UserField.verified,
v2.UserField.entities,
v2.UserField.publicMetrics,
],
);
await twitter.tweets.createLike(
userId: me.data.id,
tweetId: tweets.data.first.id,
);
// El punto final de flujo de volumen de alto rendimiento está disponible.
final sampleStream = await twitter.tweets.connectSampleStream();
await for (final response in sampleStream.stream.handleError(print)) {
print(response);
}
// También está disponible el punto de conexión de flujo filtrado de alto rendimiento.
await twitter.tweets.createFilteringRules(
rules: [
v2.FilteringRuleParam(value: '#ElonMusk'),
v2.FilteringRuleParam(value: '#Tesla'),
v2.FilteringRuleParam(value: '#SpaceX'),
],
);
final filteredStream = await twitter.tweets.connectFilteredStream();
await for (final response in filteredStream.stream.handleError(print)) {
print(response.data);
print(response.matchingRules);
}
} on TimeoutException catch (e) {
print(e);
} on v2.RateLimitExceededException catch (e) {
print(e);
} on v2.TwitterException catch (e) {
print(e.response.headers);
print(e.body);
print(e);
}
}
Punto final | Nombre del método |
---|---|
POST /2/tweets | createTweet |
DELETE /2/tweets/:id | destroyTweet |
Punto final | Nombre del método |
---|---|
POST /2/users/:id/retweets | createRetweet |
DELETE /2/users/:id/retweets/:source_tweet_id | destroyRetweet |
GET /2/tweets/:id/retweeted_by | lookupRetweetedUsers |
Punto final | Nombre del método |
---|---|
GET /2/tweets/:id/quote_tweets | lookupQuoteTweets |
Punto final | Nombre del método |
---|---|
GET /2/tweets/search/all | searchAll |
GET /2/tweets/search/recent | searchRecent |
Punto final | Nombre del método |
---|---|
GET /2/tweets | lookupByIds |
GET /2/tweets/:id | lookupById |
Punto final | Nombre del método |
---|---|
GET /2/tweets/counts/all | countAll |
GET /2/tweets/counts/recent | countRecent |
Punto final | Nombre del método |
---|---|
POST /2/users/:id/bookmarks | createBookmark |
DELETE /2/users/:id/bookmarks/:tweet_id | destroyBookmark |
GET /2/users/:id/bookmarks | lookupBookmarks |
Punto final | Nombre del método |
---|---|
GET /2/users/:id/mentions | lookupMentions |
GET /2/users/:id/tweets | lookupTweets |
GET /2/users/:id/timelines/reverse_chronological | lookupHomeTimeline |
Punto final | Nombre del método |
---|---|
PUT /2/tweets/:id/hidden | createHiddenReply |
PUT /2/tweets/:id/hidden | destroyHiddenReply |
Punto final | Nombre del método |
---|---|
GET /2/tweets/sample/stream | connectSampleStream |
Punto final | Nombre del método |
---|---|
POST /2/tweets/search/stream/rules | createFilteringRules |
GET /2/tweets/search/stream/rules | lookupFilteringRules |
GET /2/tweets/search/stream | connectFilteredStream |
Punto final | Nombre del método |
---|---|
GET /2/users | lookupByIds |
GET /2/users/:id | lookupById |
GET /2/users/by | lookupByNames |
GET /2/users/by/username/:username | lookupByName |
GET /2/users/me | lookupMe |
Punto final | Nombre del método |
---|---|
POST /2/users/:id/muting | createMute |
DELETE /2/users/:source_user_id/muting/:target_user_id | destroyMute |
GET /2/users/:id/muting | lookupMutingUsers |
Punto final | Nombre del método |
---|---|
POST /2/users/:id/blocking | createBlock |
DELETE /2/users/:source_user_id/blocking/:target_user_id | destroyBlock |
GET /2/users/:id/blocking | lookupBlockingUsers |
Punto final | Nombre del método |
---|---|
GET /2/spaces/search | search |
Punto final | Nombre del método |
---|---|
GET /2/lists/:id | lookupById |
GET /2/users/:id/owned_lists | lookupOwnedBy |
Punto final | Nombre del método |
---|---|
POST /2/users/:id/pinned_lists | createPinnedList |
DELETE /2/users/:id/pinned_lists/:list_id | destroyPinnedList |
GET /2/users/:id/pinned_lists | lookupPinnedLists |
Punto final | Nombre del método |
---|---|
GET /2/lists/:id/tweets | lookupTweets |
Punto final | Nombre del método |
---|---|
POST /2/lists | createPublicList |
POST /2/lists | createPrivateList |
DELETE /2/lists/:id | destroyList |
PUT /2/lists/:id | updateListAsPublic |
PUT /2/lists/:id | updateListAsPrivate |
Punto final | Nombre del método |
---|---|
POST /2/compliance/jobs | createJob |
GET /2/compliance/jobs | lookupJobs |
GET /2/compliance/jobs/:id | lookupJob |
twitter_api_v2 utiliza los siguientes prefijos estándar dependiendo de las características del punto final. ¡Así que es muy fácil de encontrar el método correspondiente al punto final que quieres utilizar!
Prefijo | Descripción |
---|---|
lookup | Este prefijo se adjunta a los puntos finales que hacen referencia a tweets, usuarios, etc. |
search | Este prefijo se adjunta a los puntos finales que realizan búsquedas exhaustivas. |
connect | Este prefijo se adjunta a los puntos finales con streaming de alto rendimiento. |
count | Este prefijo se adjunta al punto final que cuenta un elemento en particular. |
create | Este prefijo se adjunta al punto final realizar el estado de creación, como Tweet y Follow . |
destroy | Este prefijo se adjunta al punto final realizar el estado de destrucción, como Tweet y Follow . |
update | Este prefijo se adjunta al punto final realizar el estado de actualización. |
twitter_api_v2 proporciona una utilidad para generar o buscar el token al portador solo de la aplicación.
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final bearerToken = await v2.OAuthUtils.generateAppOnlyBearerToken(
consumerKey: 'YOUR_CONSUMER_KEY',
consumerSecret: 'YOUR_CONSUMER_SECRET',
);
print(bearerToken);
}
En esta librería, parámetros que no son necesarios en el momento de la solicitud, i.e., parámetros opcionales, se definen como anulables. Sin embargo, desarrolladores no necesitan tener en cuenta el parámetro null cuando enviar solicitudes cuando usando esta librería.
Significa los parámetros especificados con un valor nulo se eliminan de forma segura y se ignoran antes de enviar la solicitud.
Por ejemplo, argumentos especificados con null se omiten en la siguiente solicitud.
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final twitter = v2.TwitterApi(bearerToken: 'YOUR_TOKEN_HERE');
await twitter.tweets.createTweet(
text: 'Hello, World!',
// Estos parámetros se omiten a petición porque son nulos.
mediaIds: null,
expansions: null,
);
}
Por ejemplo, puede haber una situación en la que los datos contienen únicamente un ID, y quiere para recuperar el objeto de datos asociado con ese ID también. En tales casos, la especificación de la Twitter API v2.0
llamada expansions
es útil, y esta librería es compatible con esa especificación.
Básicamente se puede utilizar en los puntos finales que realizan la comunicación GET como el procesamiento de lookup
y search
. Algunos campos también pueden incluirse en la propiedad includes
de TwitterResponse.
Puede usar expansions
como se muestra a continuación:
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final twitter = v2.TwitterApi(bearerToken: 'YOUR_TOKEN_HERE');
try {
final tweets = await twitter.tweets.searchRecent(
query: '#ElonMusk',
// ¡Especifique los campos que necesita!
expansions: [
v2.TweetExpansion.authorId,
v2.TweetExpansion.inReplyToUserId,
],
);
print(tweets);
} on v2.TwitterException catch (e) {
print(e);
}
}
Puede ver más detalles sobre expansions
de Documentación oficial.
Twitter API v2.0
soporta una especificación muy interesante, permitir a los usuarios controlar la cantidad de datos contenidos en el objeto de respuesta para cada punto final dependiendo de la situación. Se llama fields
, y esta librería es compatible con esta especificación.
Básicamente se puede utilizar en puntos finales que realizan comunicaciones GET como el procesamiento de lookup
y search
. Algunos campos también pueden incluirse en el campo includes
de TwitterResponse.
Puede usar fields
como se muestra a continuación:
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final twitter = v2.TwitterApi(bearerToken: 'YOUR_TOKEN_HERE');
try {
final tweets = await twitter.tweets.searchRecent(
query: '#ElonMusk',
maxResults: 20,
expansions: v2.TweetExpansion.values,
tweetFields: [
v2.TweetField.conversationId,
v2.TweetField.publicMetrics,
],
userFields: [
v2.UserField.location,
v2.UserField.publicMetrics,
],
);
print(tweets);
} on v2.TwitterException catch (e) {
print(e);
}
}
Nota
Algunos campos deben combinarse conexpansions
.
Puede ver más detalles sobre fields
de Official Documentation.
Twitter API v2.0 admite métodos de autenticación con OAuth 2.0 PKCE, y permite a los usuarios de aplicaciones utilizar Twitter API v2.0 solicitar autorización para el alcance mínimo necesario de la operación.
Desde la autenticación OAuth2.0 PKCE requiere pasar por un navegador, twitter_api_v2 no proporciona esta especificación para la compatibilidad con aplicaciones CLI. En cambio, proporcionamos twitter_oauth2_pkce, una librería para aplicaciones Flutter.
twitter_oauth2_pkce es 100% compatible con twitter_api_v2 y se puede utilizar. Puede ver más detalles de los enlaces a continuación.
También, consulte la siguiente aplicación Flutter de ejemplo simple que combina twitter_api_v2 y twitter_oauth2_pkce.
Si desea contribuir a twitter_api_v2, cree un problema o crear una solicitud de extracción.
Hay muchas maneras de contribuir a la OSS. Por ejemplo, se pueden considerar los siguientes temas:
- Hay solicitar parámetros o campos de respuesta que no se implementan.
- La documentación está desactualizada o incompleta.
- Tener una mejor manera o idea para lograr la funcionalidad.
- etc...
Puede ver más detalles de los recursos a continuación:
O bien puede crear una discusión si lo desea.
Siéntase libre de unirse a este desarrollo, ¡las opiniones diversas hacen que el software sea mejor!
Gracias a estas maravillosas personas (clave emoji):
Este proyecto sigue la especificación all-contributors. ¡Contribuciones de cualquier tipo bienvenidas!
La forma más sencilla de mostrarnos su apoyo es dando una estrella al proyecto en GitHub y Pub.dev.
También puedes apoyar este proyecto convirtiéndote en patrocinador en GitHub:
También puede mostrar en su repositorio que su aplicación está hecha con twitter_api_v2 mediante uno de los siguientes distintivos:
[![Powered by twitter_api_v2](https://img.shields.io/badge/Powered%20by-twitter_api_v2-00acee.svg)](https://github.com/twitter-dart/twitter-api-v2)
[![Powered by twitter_api_v2](https://img.shields.io/badge/Powered%20by-twitter_api_v2-00acee.svg?style=flat-square)](https://github.com/twitter-dart/twitter-api-v2)
[![Powered by twitter_api_v2](https://img.shields.io/badge/Powered%20by-twitter_api_v2-00acee.svg?style=for-the-badge)](https://github.com/twitter-dart/twitter-api-v2)
Todos los recursos de twitter_api_v2 se proporciona bajo la licencia BSD-3
.
Nota
Los avisos de licencia en la fuente se validan estrictamente en función de.github/header-checker-lint.yml
. Por favor, consulte header-checker-lint.yml los estándares permitidos.
twitter_api_v2 fue diseñado e implementado por Kato Shinya (@myConsciousness).