Skip to content

Latest commit

 

History

History
687 lines (528 loc) · 66.5 KB

README-ES.md

File metadata and controls

687 lines (528 loc) · 66.5 KB

twitter_api_v2

El envoltorio ligero y multiplataforma para Twitter API v2.0 🐦


Awesome GitHub Sponsor GitHub Sponsor

v2 pub package Dart SDK Version Test Analyzer codecov Issues Pull Requests Stars Contributors Code size Last Commits License Contributor Covenant FOSSA Status


| English | 日本語 | Français | Tiếng Việt | বাংলা | Español | Deutsch | Português | 简体中文 |


1. Guía 🌎

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!

1.1. Empezar ⚡

1.1.1. Instalar librería

Con Dart:

 dart pub add twitter_api_v2

O con Flutter:

 flutter pub add twitter_api_v2

1.1.2. Importar

import 'package:twitter_api_v2/twitter_api_v2';

1.1.3. Implementación

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);
  }
}

1.2. Puntos finales compatibles 👀

1.2.1. Servicio de tweets

1.2.1.1. Tweet

Punto final Nombre del método
POST /2/tweets createTweet
DELETE /2/tweets/:id destroyTweet

1.2.1.2. Gustos

Punto final Nombre del método
POST /2/users/:id/likes createLike
DELETE /2/users/:id/likes/:tweet_id destroyLike
GET /2/tweets/:id/liking_users lookupLikingUsers
GET /2/users/:id/liked_tweets lookupLikedTweets

1.2.1.3. Retweets

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

1.2.1.4. Citar Tweets

Punto final Nombre del método
GET /2/tweets/:id/quote_tweets lookupQuoteTweets

1.2.1.5. Buscar Tweets

Punto final Nombre del método
GET /2/tweets/search/all searchAll
GET /2/tweets/search/recent searchRecent

1.2.1.6. Lookup Tweets

Punto final Nombre del método
GET /2/tweets lookupByIds
GET /2/tweets/:id lookupById

1.2.1.7. Recuento de tweets

Punto final Nombre del método
GET /2/tweets/counts/all countAll
GET /2/tweets/counts/recent countRecent

1.2.1.8. Marcadores

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

1.2.1.9. Líneas de tiempo

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

1.2.1.10. Esconder respuestas

Punto final Nombre del método
PUT /2/tweets/:id/hidden createHiddenReply
PUT /2/tweets/:id/hidden destroyHiddenReply

1.2.1.11. Flujo de volumen

Punto final Nombre del método
GET /2/tweets/sample/stream connectSampleStream

1.2.1.12. Flujo filtrado

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

1.2.2. Servicio de los usuarios

1.2.2.1. Sigue

Punto final Nombre del método
POST /2/users/:id/following createFollow
DELETE /2/users/:source_user_id/following/:target_user_id destroyFollow
GET /2/users/:id/followers lookupFollowers
GET /2/users/:id/following lookupFollowings

1.2.2.2. Lookup usuarios

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

1.2.2.3. Mutes del usuario

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

1.2.2.4. Bloquear

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

1.2.3. Servicio de espacios

1.2.3.1. Buscar espacios

Punto final Nombre del método
GET /2/spaces/search search

1.2.3.2. Lookup espacios

Punto final Nombre del método
GET /2/spaces lookupByIds
GET /2/spaces/:id lookupById
GET /2/spaces/:id/buyers lookupBuyers
GET /2/spaces/:id/tweets lookupTweets
GET /2/spaces/by/creator_ids lookupByCreatorIds

1.2.4. Servicio de listas

1.2.4.1. Lookup listas

Punto final Nombre del método
GET /2/lists/:id lookupById
GET /2/users/:id/owned_lists lookupOwnedBy

1.2.4.2. Anclados

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

1.2.4.3. Tweet Lookup

Punto final Nombre del método
GET /2/lists/:id/tweets lookupTweets

1.2.4.4. Administración de listas

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

1.2.4.5. Sigue

Punto final Nombre del método
POST /2/users/:id/followed_lists createFollow
DELETE /2/users/:id/followed_lists/:list_id destroyFollow
GET /2/lists/:id/followers lookupFollowers
GET /2/users/:id/followed_lists lookupFollowedLists

1.2.4.6. Miembros

Punto final Nombre del método
POST /2/lists/:id/members createMember
DELETE /2/lists/:id/members/:user_id destroyMember
GET /2/lists/:id/members lookupMembers
GET /2/users/:id/list_memberships lookupMemberships

1.2.5. Servicio de cumplimiento

1.2.5.1. Cumplimiento de lotes

Punto final Nombre del método
POST /2/compliance/jobs createJob
GET /2/compliance/jobs lookupJobs
GET /2/compliance/jobs/:id lookupJob

1.3. Consejos 🏄

1.3.1. Nombres de método

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.

1.3.2. Generar token de portador solo para aplicaciones

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);
}

1.3.3. Parámetro null a petición

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,
  );
}

1.3.4. Expandir campos de objeto con expansions

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.

1.3.5. Expandir campos de objeto con fields

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 con expansions.

Puede ver más detalles sobre fields de Official Documentation.

1.3.6. Flujo de código de autorización 'OAuth 2.0' con PKCE

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.

1.4. Contribución 🏆

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!

1.5. Colaboradores ✨

Gracias a estas maravillosas personas (clave emoji):

Kato Shinya / 加藤 真也
Kato Shinya / 加藤 真也

💻 🖋 🔣 📖 🎨 💡 🔍 🤔 🚇 🚧 🧑‍🏫 📆 💬 👀 🛡️ 🌍 ⚠️
Andy Piper
Andy Piper

🖋 📢
Konstantin
Konstantin

💻 🎨 📖 💡 ⚠️
Roberto Doering
Roberto Doering

💻 🎨 📖 💡 ⚠️ 🤔
Nitesh Sharma
Nitesh Sharma

💻 🎨 📖 💡 ⚠️ 🤔
ngoluuduythai
ngoluuduythai

📖 🌍
Abdullah Al Mahmud
Abdullah Al Mahmud

📖 🌍
Oumar fall
Oumar fall

📖 🌍
Natalie Stroud
Natalie Stroud

📖 🌍
novas1r1
novas1r1

📖 🌍 🤔
Ikko Ashimine
Ikko Ashimine

📖
Marcos Vinícius
Marcos Vinícius

📖 🌍
Mark O'Sullivan
Mark O'Sullivan

🤔
bors-ng
bors-ng

🚧 👀
All Contributors
All Contributors

📖
Codecov
Codecov

⚠️ 🚧 🛡️
FOSSA
FOSSA

🚧 🛡️
yuto90
yuto90

📝 🖋 💡
normidar
normidar

🤔 💻 📖 💬
Tim Surkis
Tim Surkis

🐛 🤔 💬 📓
shinobi-art
shinobi-art

🐛 💬
Tushar Mishra
Tushar Mishra

💻
Azka Full Snack Developer:)
Azka Full Snack Developer:)

💬 🤔

Este proyecto sigue la especificación all-contributors. ¡Contribuciones de cualquier tipo bienvenidas!

1.6. Mantener ❤️

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 Powered by twitter_api_v2 Powered by twitter_api_v2

[![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)

1.7. Licencia 🔑

Todos los recursos de twitter_api_v2 se proporciona bajo la licencia BSD-3.

Estado de FOSSA

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.

1.8. Más información 🧐

twitter_api_v2 fue diseñado e implementado por Kato Shinya (@myConsciousness).