En 2011, el autor misenhower publicó una biblioteca de cliente de la API OAuth de Twitter para Micro net llamado MicroTweet que permitía enviar tweets usando una placa Netduino Plus y Netduino 2 Plus.Han pasado ya más 5 años y desde luego el API v1.0 de Twitter ha quedada obsoleta 8 (y desactivada) a partir de que Twitter comenzara a aplicar el uso de conexiones de SSL a extremos de acceso al API , lo cual significa que la biblioteca original de MicroTweet no ha sido funcional durante mucho tiempo..
Después de la aparición de Netduino 3 , que ha incorporado entre su muchas nuevas características soporte SSL, el autor ha visto interesante revisar esta biblioteca actualizandola con nuevos requerimientos de API de Twitter. El resultado es MicroTweet 2, cuyo código ya está disponible en GitHub , y también como un paquete binario de NuGet.
MicroTweet 2 es pues una reescritura completa de la biblioteca original contando con varias características nuevas útiles para proyectos NETMF . Como requisitos necesita NETMFv4.3 , así como una placa quesoporteSSL.
Algunas de las características diferenciadoras respecto a la versión anterior son las siguientes
- Se usa la clase HttpWebRequest estándar (de System.Http) en lugar de un cliente HTTP a la medida. Esto es en parte debido al nuevo requisito de HTTPS, y en parte porque las más modernas placas NETMF tiene mucho más espacio de programa que la versión de Netduino Plus .El original Netduino Plus tenía solamente 64 KB de espacio de código disponibles. Ensamblar System.Http habría exigido más de la mitad de ese espacio, dejando muy poco espacio para el código de usuario. Netduino 3 Wi-Fi cuenta con más de 1.400 KB de espacio de código así como tras modernas placasNETMF que tienen al menos 384 KB, por lo que ahora es mucho menos preocupante de lo que solía ser.
- La original biblioteca de MicroTweet podría realmente hacer una cosa: publicar tweets. El autor siempre tenía la intención de añadir más características, pero la memoria limitada de la original Netduino Plus a analizar las respuestas de la API de Twitter lo convertian en una tarea relativamente difícil.El 3 de Netduino tiene significativamente más memoria RAM, por lo que ahora es mucho más fácil de procesar las respuestas recibidas desde Twitter.
- Todas las respuestas de la API de Twitter se serializan como JSON, así que para 2 de MicroTweet el autor construyó un parser JSON. La aplicación es bastante simple: se toma una matriz de caracteres y va a través de él, analizandocarácter por carácter. Existen otros analizadores JSON para NETMF pero el autor quería construir uno propio para permitir una mayor flexibilidad al añadir cuenta y optimización de rendimiento. En la construcción de esta biblioteca encontró que el Netduino 3 , por decirlo suavemente, no es excesivamente rápido en el análisis de las respuestas JSON(toma alrededor de 4 segundos para analizar una respuesta de 20KB, lo cual es mucho pues además hay que sumar el tiempo que tarda en recibir la respuesta en primer lugar, que se suma al menos unos segundos más para el tiempo total de procesamiento).
- La versión anterior de MicroTweet utiliza la bibliotecaMicroLinq .Para MicroTweet 2 se ha quitado esta dependencia y añadido un método de tipo de inserción sencilla para controlar esta necesidad. Haciendo MicroTweet enteramente autónomo debe ayudar a hacer un poco más fácil mantener actualizado el proyecto.
Esta biblioteca como vamos ver puedeser utilizadapararegistraryrecuperartweetsdirectamentedesdeundispositivoNETMFtravés de la APIde Twitter.
Para empezar primero deberá hacer referencia a labiblioteca de MicroTweet, bien Agregando elproyecto deMicroTweetalasolución de VSosimplementeinstalandolabibliotecaa través de NuGet.
ParainstalarlodesdeNuGet,ejecuteelsiguientecomandoenlaconsola del administrador de paquetes:
Install-Package MicroTweet
También, si utiliza DHCP, puede que desee esperar a que una dirección IP para ser adquirida antes de realizar cualquier operación de red, aunque también puede hacer esto marcando el valor de IPAddress.GetDefaultLocalAddress()
en el comienzo de su programa, por ejemplo usando el siguiente código
while (IPAddress.GetDefaultLocalAddress() == IPAddress.Any)
Thread.Sleep(50);
Ajuste de la hora actual
Es importante destacar que las solicitudes de la API de Twitter deben tener un válido timestamp (actual), por lo que el autor ha incluido para nuestra comodidad una clase SNTP dentro de la biblioteca MicroTweet para recuperar el tiempo actual de un servidor NTP.
Puede actualizar la hora actual en su placa puede usar el código siguiente:
Microsoft.SPOT.Hardware.Utility.SetLocalTime(Sntp.GetCurrentUtcTime());
Inicializando TwitterClient
Para usar la API de Twitter desde la aplicación usted debe primero registrarlo con Twitter para obtener un conjunto de claves API. Para ello tendrá que ir a la página de gestor de aplicaciones de Twitter para crear una nueva aplicación y obtener las claves necesarias. Usted recibirá dos juegos de llaves: una para la aplicación que creó y otra para su cuenta de usuario acceder a la API a través de la aplicación. Éstas claves se conocen como las credenciales de la aplicación y las credenciales de usuario.
Puede inicializar una nueva instancia de TwitterClient con un código similar al siguiente:
// Set up application and user credentials var appCredentials = new OAuthApplicationCredentials() { ConsumerKey = "YOUR_CONSUMER_KEY_HERE", ConsumerSecret = "YOUR_CONSUMER_SECRET_HERE", }; var userCredentials = new OAuthUserCredentials() { AccessToken = "YOUR_ACCESS_TOKEN", AccessTokenSecret = "YOUR_ACCESS_TOKEN_SECRET", }; // Create new Twitter client with these credentials var twitter = new TwitterClient(appCredentials, userCredentials);
Enviando un tweet
Enviando un Tweet uso el método SendTweet para enviar un tweet:
try { var tweet = twitter.SendTweet("Trying out MicroTweet!"); } catch (Exception e) { // Couldn't send the tweet, the exception may have more information }
Si se recibe un error de API de Twitter, se producirá un TwitterException con más detalles.La propiedad de mensaje de la excepción contiene el mensaje de error real proveniente de Twitter.
Recuperar su línea de tiempo inicio
Utilice el método GetHomeTimeline para recuperar los más recientes tweets y retweets, escritos por personas que siguen:
try { var tweets = twitter.GetHomeTimeline(); foreach (Tweet tweet in tweets) Debug.Print("Tweet from @" + tweet.User.ScreenName + ": \"" + tweet.Text + "\""); } catch (Exception e) { // Couldn't retrieve the timeline, the exception may have more information }
GetHomeTimeline acepta dos argumentos, sinceID y maxID, para especificar la gama de tweets para recuperar.
Puede utilizar argumentos con nombre para especificar estos valores.
Por ejemplo: var tweets = twitter. GetHomeTimeline(maxID: 603281686600683520);
Recuperar la línea de tiempo de un usuario específico
Utilice el método GetUserTimeline para ver los tweets y retweets publicadas por un usuario específico:
try { var tweets = twitter.GetUserTimeline("twitter"); foreach (Tweet tweet in tweets) Debug.Print("Tweet from @" + tweet.User.ScreenName + ": \"" + tweet.Text + "\""); } catch (Exception e) { // Couldn't retrieve the timeline, the exception may have more information }
De un forma parecida a GetHomeTimeline, puede especificar la gama de tweets para recuperar con sinceID y maxID: var tweets = twitter. GetUserTimeline (“twitter”, sinceID: 600728701584576512);
Otras clases de TwitterClient
Hay en esta biblioteca algunos otros métodos muy útiles:
GetCurrentUser puede utilizarse para verificar las credenciales proporcionadas (claves de API). Si las credenciales son válidas, se devolverá un objeto de usuario con los detalles para el usuario de autenticación.
GetUser recupera la información del usuario con el nombre de usuario especificado o el ID.
Proyecto de muestra
MicroTweet 2 incluye un proyecto de muestra simple que envía un tweet y recupera los últimos tweets de personas que siguen.No hay ninguna funcionalidad de hardware específico en el proyecto de ejemplo incluido, funciona igualmente bien en cualquier junta (o incluso el emulador NETMF).
El autor pensó que sería divertido hacer un proyecto de muestra basado en hardware simple, así que aquí está el reloj de seguidores de Twitter:
Este proyecto recupera datos de usuario y muestra su actual cuenta de seguidor en un display de 7 segmentos. Usted podría también, por supuesto, configurar para recuperar el recuento de seguidores de cualquier usuario en Twitter. Aquí está el código para este proyecto.
Fuente aqui