Envio de tweets con Netduino 3

ejemplo de manejo del api de twitter desde un Netduino 3


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  NETMF v4.3 , así como una placa  que soporte SSL.

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 puede ser utilizada para registrar y recuperar tweets directamente desde un dispositivo NETMF través de la API de Twitter.

 

 

Para empezar  primero deberá  hacer referencia a la biblioteca de MicroTweet, bien Agregando  el proyecto deMicroTweet a la solución de VS o simplemente instalando la biblioteca a través de NuGet.

Para instalarlo desde NuGet, ejecute el siguiente comando en la consola del administrador de paquetes:

Install-Package MicroTweet

Pueden encontrar instrucciones para usar NuGet y la consola del administrador de paquetes   aqui.
Una vez haga referencia a  MicroTweet assembly  en su aplicación, agregue una  Directiva para el espacio de nombres MicroTweet  en la parte superior del archivo de programa (por ejemplo, Program.cs):
 using 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:

Twitter Follower Count

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

Envío de tweets con Netduino+

Un exelente ejemplo de implementacion de un cliente de twitter usando una placa Netduino +


 Hemos hablado en muchísmas ocasiones en este blog   de Netduino Plus,  una  placa pequeña (pero poderoso) basado en un microprocesador Atmel 32 bits con el mismo factor de forma que un Arduino   que ademas  puede ejecutar programas escritos en C# para Micro de .NET Framework y la versión “Plus” añade un puerto 10/100 Mbps Ethernet, proporcionándole un dispositivo compatible con redes muy potente para alrededor de $59 USD.

¿Qué puede hacer con él? Mucho, realmente, como  puede ver  en los foros Netduino:tiene acceso a conexiones de red mediante System.Net.Sockets, puede realizar peticiones HTTP mediante System.Http, y hay incluso algunas implementaciones de servidores web ligero disponibles(Neomilka Web Server)

Lo único que no pude encontrar fácilmente  es una biblioteca para Twitter, por lo que el autor   inspirándose   en la  Biblioteca Tweet para Arduino, que envía tweets a través de un sitio web externo, presumiblemente para evitar aplicar OAuth de Arduino,  decidió  hacer que  Netduino se comunique con la API de Twitter directamente, lo que significa que no son necesarios  webs ni proxies .

Resumen de OAuth

Twitter actualmente requiere que todas las llamadas API sean autenticados con OAuth. Para comunicarse con la API de Twitter, usted debe primero registrar una aplicación para obtener los valores clave de consumo y del consumidor secreto necesarios. Llamadas a la API cuenta específicas requieren un Token de acceso y el Token de acceso secreto, que se generan después de dar un permiso de la aplicación para acceder a tu cuenta. Un Token de acceso y acceso secreto Token se proporcionan automáticamente por su cuenta cuando se registre una aplicación.

Cada solicitud de API debe tener un encabezado de autenticación con ciertos parámetros OAuth. Uno de estos parámetros es la firma OAuth, que se genera mediante la creación de un valor HMAC-SHA1 hash del método HTTP, la URL normalizada y variables POST, los otros parámetros OAuth, (o parámetros de cadena de consulta de solicitudes GET). Esta firma está codificada en una cadena Base64.

Generación de la firma OAuth es la parte más cálculo intensiva de hacer llamadas a la API. He encontrado que tarda alrededor de 500-1500ms para generar la firma en un Netduino Plus dependiendo de los parámetros de entrada.

También cabe mencionar que uno de los parámetros de OAuth es la fecha y hora actuales con formato como un timestamp de Unix. Sin una fecha y hora exacta fallarán todas las solicitudes de API, así que es importante para asegurarse de que se actualiza el reloj de la Netduino antes de hacer llamadas a la API.

Implementación

Para este proyecto, se usan  las siguientes bibliotecas de terceros:

  • SHA/HMAC Digest clase, con una modificación para manejar adecuadamente secretos valores > 84 caracteres de Elze Kool
  • La clase NearlyGenericArrayList del proyecto MicroLinq
  • El método NTPTime publicado por Chris Seto en los foros de Netduino

La clase OAuth creada para este proyecto implementa la mayor parte de la especificación OAuth, con unos accesos directos adoptadas ahorrar tiempo y programa espacio de procesamiento.Por ejemplo, asume que URLs han sido normalizadas correctamente antes de que se pasan al método OAuth.GetOAuthRequest.

La clase TweetBot se ha separado en dos archivos diferentes: TweetBot.cs para la estructura de la clase principal y TweetBot.HTTPRequests.cs para las solicitudes HTTP. Mientras que actualmente hay sólo un método de solicitud HTTP, esta estructura ayudará a asegurarse de que el código sigue siendo fácil de entender como desarrollo continúa.

TweetBot instancias tendrán un evento DebugMessage que se puede conectar a imprimir los mensajes de depuración a un puerto serie, un archivo de registro en una tarjeta SD, etc..

Actualmente, se realizan todas las operaciones HTTP sincrónicamente pero probablemente puede modificar que ejecuta asincrónicamente bastante fácilmente. Además, actualmente hay muy poca errores así que si no puede alcanzarse la API de Twitter o si entras en las teclas de acceso mal probablemente obtendrá una excepción no controlada. Tal vez sea una buena idea para envolver todo método TweetBot llamadas en un bloque try/catch.

Utilizando la clase TweetBot

Uso TweetBot es bastante sencillo. En primer lugar, especificar sus datos de cuenta y aplicación en algún lugar en su programa.

Debe primero registrar una nueva aplicación para conseguir un Consumer Key y Consumer Secret. Una vez que haya completado el procedimiento de registro, abra la página de Aplicaciones de Twitter, ver los detalles de su aplicación y haga clic en el enlace que dice “Mi Token de acceso”. Esa página mostrará de su cuenta usuario acceso Token y secreto Token de acceso de usuario.

Con el fin de crear las solicitudes válidas de OAuth, reloj de la Netduino debe establecerse con la hora correcta. Aquí hay un ejemplo de los foros Netduino para recuperar el tiempo actual de un servidor NTP. (Este código también está incluido en la aplicación de demostración).

Para enviar un tweet, crear una nueva instancia de la clase TweetBot y llamar a su método SendTweet:

Eso es todo! SendTweet devuelve true si el mensaje fue enviado con éxito.

Programa de demostración

El programa demo incluido con este proyecto crea una serie de “consola” en puerto COM1 el Plus’ Netduino funcionando a 115200bps. Este puerto utiliza pin digital 0 en el N + para Rx y pin 1 para Tx( el autor ha usando un Bus Pirate para comunicarse con el puerto serial de la Netduino, pero también puede usar un dispositivo FT232R (o similar) a 3.3V o un convertidor de nivel).

Bus Pirate

Tres conexiones son necesarias:

  • Autobús pirata Gnd a Netduino Gnd
  • Autobús pirata Tx a Netduino Rx
  • Bus Pirate Rx de Tx Netduino

Consulte el manual de Bus Pirate de números pin específico como pueden variar entre los dispositivos. Una vez que todo está conectado y encendido, configurar el Bus Pirate para 115200bps UART con “Normalidad” (3, 3V / Gnd) salida. La secuencia de comandos es m, 3, 9, 1, 1, 1, 2.

A continuación, inicie la macro “Puente transparente” escribiendo “(1)” (con el paréntesis) y luego “y” aceptar la advertencia. Esto configura el Bus Pirate para actuar como un puente UART transparente, así los caracteres de entrada se envían a la Netduino y todos los resultados de la Netduino se muestran en su terminal.

Consola demo

Cuando se ejecuta el programa de demostración, un mensaje de ayuda se escribirán en el puerto serie. Si se conecta después de que se ha enviado el mensaje inicial, sólo tienes que escribir “?” y pulse enter para verlo otra vez.
Para enviar un tweet, tipo “p < mensaje >” y pulse enter. También puede omitir el mensaje a enviar un mensaje genérico de “Hola desde un [OEMString]!”. (Tenga en cuenta que si intenta enviar el mismo mensaje varias veces probablemente obtendrá un error de “mensaje repetido”).
Si todo sale bien, se registrará su mensaje en Twitter desde tu cuenta:

Código

 Este proyecto está ahora en CodePlex: MicroTweet – Twitter OAuth biblioteca API para la Micro de .NET Framework

Como software de Netduino, este código está liberado bajo la licencia Apache 2.0.

 

 

 

Fuente   aqui