Show Posts
Pages: [1]
1  Community / Exhibition / Gallery / Re: Made my own TwitterClient and I think it's better than the example one on: October 11, 2013, 10:25:52 am
With the requirement from Twitter to use their new api, this code does not work - returns the error page.

Does anyone have updated code that can used with the new Twitter api?

Sure! Look these links.:
https://dev.twitter.com/discussions/15078
http://stackoverflow.com/questions/12916539/simplest-php-example-for-retrieving-user-timeline-with-twitter-api-version-1-1?answertab=votes#tab-top
https://github.com/J7mbo/twitter-api-php
2  Community / Gigs and Collaborations / Problems implementing Twitter's API v1.1 using OAuth on Arduino on: February 18, 2013, 01:02:41 pm
Hi,

I'm using an Arduino Uno board with the Ethernet Shield to get the last tweet (of Twitter) from a public user timeline (it's mine) and display it on the Arduino serial monitor. I want the whole device to work without Python or Ruby and as it's a stand alone project it won't be used with a computer.
I create a client that connects to api.twitter.com and I use this GET command of the REST API v1.0 to obtain it:

Code:
client.print("GET /1/statuses/user_timeline.json?&screen_name=tuitduino&count=1 HTTP/1.1");
client.println("HOST: api.twitter.com");
client.println();

It works properly, but according to the Twitter's API documentation (https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline), I must change my GET command to the new version 1.1. This is what I do:

Code:
client.print("GET /1.1/statuses/user_timeline.json?&screen_name=tuitduino&count=1 HTTP/1.1");
client.println("HOST: api.twitter.com");
client.println();

but it doesn't work. According to the Twitter's API documentation, I must use OAuth to access this information, that is, to authenticate and authorize an aplication, wich I must create (in my case I suppose that it have to be a website), to read or write tweets from a user account (mine's) on behalf of it. The problem is that I don't know how to integrate the GET HTTP request and the OAuth information with my Arduino code. I've seen the Twitter's API documentation in depth and there are a few examples and libraries to do it "easily" but they are written for other programming languages, not for Arduino.
According to the documentation, I must implement a header, something like this:

Quote
Authorization: OAuth oauth_consumer_key="cCB46H0y6R8Hrx836WwAA", oauth_nonce="18106fa9ce0b1083367cfbd50720abea", oauth_signature="XXXXXXXXXXXXXXXXXXXXXXX", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1361444134", oauth_token="1004705586-tF4876Qu6qTwLMuTaCjbZCLTbFt4hDoRoCun3qW", oauth_version="1.0"

where the alphanumeric values are given to me from Twitter and XXXXXXXXXXXXXXXXXXXXXXX is a private value so I omitted it.

Does anybody has some idea to do it with Arduino? The GET method and the header. It's very important for me because it's for my final project.

Thanks,

Ger.
3  International / Software / Re: conectar arduino a servidor on: February 09, 2013, 02:16:48 pm
No entiendo muy bien lo que quieres hacer. Una solicitud HTTP?
Algo como esto? http://arduino.cc/en/Reference/EthernetClient
4  International / Software / Re: Problemas cliente Twitter con acentos, eñes y otros caracteres on: February 09, 2013, 02:09:53 pm
Creo haber respondido sobre esto en otro hilo que misteriosamente se ha borrado, ponía información sobre la API de twitter que exporta caracteres especiales de html es por eso que recibes  cosas como "&#241". (en el manejo de texto no es lo mismo un microcontrolador que un PC).
Lo que tu llamas arreglos chapuzeros es lo que se viene haciendo en programación desde siempre con los caracteres ASCCI.
Resumiendo.... la chapuza la harás en arduino o al conectar al API de tweeter, tu escoges cual dominas mejor.

Perdona yOPERO, es que le dije a mi compañero que lo preguntara en el foro pero puso el código con el que antes lo habíamos hecho, que ahora es otro (el que he puesto aquí en el primer post) y lo borró por eso xD.
He buscado, encontrado y leído (como mi medio buen inglés me lo ha permitido) sobre esto en el foto de discusiones de la API de Twitter pero no consigo entender mucho ni aclararme y mucho menos encontrar una solución. Por ejemplo:

Y sé que lo puedo arreglar calentándome la cabeza haciendo arreglos con el código, pero yo quería ir a la raíz del problema, que está en la codificación de la URL de la API. Pero al final me va a tocar hacer esas conversiones en el código.
5  International / Software / Re: Problemas cliente Twitter con acentos, eñes y otros caracteres on: February 09, 2013, 12:27:12 pm
En esta pagina emplean una solucion desde el lado del arduino:
http://arduino.cc/forum/index.php?topic=135969.0
Gracias pero ese no es el problema que tengo Heke, el mío es que yo desde Arduino hago una solicitud GET HTTP a un servidor (Twitter) buscando un texto en concreto y el cual me lo envía a mi placa, pero algunos caracteres "no imprimibles" que no están definidos en la tabla ASCII (del 32 al 126) como la ñ, ¿, ¡, €, etc. me aparecen en formato UTF-8 (Unicode) tipo \u00ac (\uHEXADECIMAL) (he cambiado del formato del texto que recibo a .json para recibirlos así en vez de ñ).

Se que en la libreria ethershield tiene una clase llamada urldecode pero no se como se usa...
http://ethershield.thiseldo.co.uk/d8/d5e/class_ether_shield.html#a88ecf6dfd849c7760abbb58692af7ece
La he visto y analizado con cierto esfuerzo pero lo que hace es prácticamente lo mismo que dicen en el post anterior que me has pasado.
De todas formas gracias por tus esfuerzos smiley
Ah y posibles aplicaciones... pues échale imaginación jeje. Por ejemplo para recibir directamente los tweets de una persona en concreto sin tener que estar mirando su perfil, no sé...
6  International / Software / Imprimir caracter simbolo € euro por monitor serial / puerto serie on: February 09, 2013, 12:13:56 pm
Buenas. Me pasa una cosa rarísima. Quiero mostrar por el puerto serie este carácter € (el símbolo del euro) haciendo esto (el ASCII de € es 128):
Code:
Serial.println(char(128));

Pero en la consola sale un espacio en blanco. Sin embargo, selecciono ese espacio en blanco, lo copio, lo pego aquí y ¡sí que aparece!:
Code:
€

¡Y pegándolo en un bloc de notas o en el Word (uso Windows 7) no aparece!
Utilizo una placa Arduino UNO R3 con el IDE 1.0.3 y LO QUE QUIERO ES pasarle a otra placa Arduino Mega lo que yo envío por el puerto serie de ésta.
¿Recibirá la otra placa el símbolo o un espacio en blanco o qué recibirá? ¿Alguien sabe por qué pasa esto? Supongo que el problema es del IDE que es un poco malito (por decirlo de forma fina -.-).

¡Saludos!

EDITO: En la previsualización del post al escribirlo se ve el símbolo del euro (€) pero al postearlo, en el foro, ¡NO SE VE! Dios...
7  International / Software / Re: Problemas cliente Twitter con acentos, eñes y otros caracteres on: February 06, 2013, 03:55:44 pm
Descargate una terminal serie o varias y prueba estas a ver si lo muestran bien ellas que igual es solo tema de la consola.

El problema no es de la consola porque cuando ejecuto este código:
Code:
void setup()
{
  Serial.begin(9600);
}


void loop()
{
  if (Serial.available() > 0)
  {
   char inChar = Serial.read();
   Serial.println(inChar);
  }
}
imprime bien TODOS los caracteres que escribo desde el teclado.
El problema es cómo recibe los caracteres de la URL, será problema de la codificación o algo, y no tengo ni idea de qué es ni de cómo solucionarlo.
Gracias por tu aporte Heke pero sigo aquí con dolor de cabeza :S
Si alguien puede echarme un cable con esto por favor que me lo diga.
8  International / Software / Problemas cliente Twitter con acentos, eñes y otros caracteres on: February 05, 2013, 11:06:50 pm
Buenas, estoy desarrollando un proyecto que consiste en un cliente de Twitter que obtenga los tweets de una cuenta de usuario y los mande por el puerto serie. Utilizo la placa Arduino UNO R3 y el Ethernet shield. La IDE que uso es la 1.0.2, el SO Windows (7 o XP, depende de donde estoy).
El código lo he sacado de aquí (http://arduino.cc/forum/index.php/topic,93480.0.html) pero lo he modificado un tanto (lo pongo al final del post), en vez de usar el del ejemplo que viene en la librería Ethernet (http://arduino.cc/en/Tutorial/TwitterClient) porque ocupa menos, da menos problemas y tiene muchísima más funcionalidad. Funciona bien, el grandísimo problema lo tengo al recibir ciertos caracteres. Por ejemplo:

Cuando escribo este tweet en Twitter:
Code:
Probando la ñ la ¿ y la ¡ por ejemplo.

En la consola me aparece esto:
Code:
Probando la ñ la ¿ y la ¡ por ejemplo.
Y así con muchos otros.

Llevo varios días probando cientos de cosas para solucionarlo, aunque lo que he intentado que tenía más lógica es que una vez que se guarda todo el tweet en el string, reemplazar esos caracteres del string por los que quiero y después imprimirlo, pero no se me ocurre cómo implementarlo bien. Y llego a la conclusión de que es mejor dejar estos "arreglos chapuceros" e ir a la raíz del problema: la URL de la API de Twitter de la cual obtengo la información. He buscado y leído algo sobre esto (la codificación UTF-8, etc.) en estos sitios: (https://dev.twitter.com/docs/counting-characters) y (https://dev.twitter.com/discussions/8246), y encuentro algunas librerías (https://github.com/twitter) como esta interesante (https://github.com/twitter/twitter-text-js) que (creo) lo solucionaría, pero están para lenguajes que no conozco como Java o Ruby y ni idea de cómo traerlas a Arduino. ¡Y ya me desespero y me indigno de verdad, porque por usar esos caracteres (por ser español) tengo una gran dificultad para terminar este proyecto bien! smiley-sad

¿Alguien tiene alguna idea de cómo puedo solucionar esto? Se lo agradecería mucho.

EDIT:
CÓDIGO:
Quote
/*
 Creado originalmente por JO3RI.
 Modificado por G3RMiCH.
 
 ***** MODIFICAR sólo los valores de las variables Ip, Dns, Gateway y Subnet *****
*/

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

byte Mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
byte Ip[] = { X, X, X, X };       //<---------MODIFICAR: Ver en cmd -> ipconfig /all y poner una distinta a la del PC (cambiar último número)
byte Dns[] = { X, X, X, X };      //<---------MODIFICAR: Ver en cmd -> ipconfig /all
byte Gateway[] = { X, X, X, X };  //<---------MODIFICAR: Ver en cmd -> ipconfig /all
byte Subnet[] = { X, X, X, X }; //<---------MODIFICAR: Ver en cmd -> ipconfig /all

EthernetClient client;        //Crea un cliente que puede conectarse al servidor para enviar y recibir datos
TextFinder finder(client, 2);    //Crea el objeto finder de la clase TextFinder

char URL[] = "api.twitter.com";      //URL del servidor al que se conecta
char usuarioTwitter[] = "tuitduino";  //<----------MODIFICAR: Nombre de usuario de Twitter
char usuario[16] = "";                //string para almacenar el Usuario
char tweet[255] = "";                //string para almacenar el Tweet
long retardo = 60000;    //Retardo entre tweets (ms). No poner menos de 30 segundos.


void setup()
{
  Serial.begin(9600);    //Abre puerto serie y establece vel. transmisión datos a 9600 bps (bits/s = baudios)
  Ethernet.begin(Mac, Ip, Dns, Gateway, Subnet);    //Inicializa librería Ethernet y opciones de red
}


void loop()
{
  Serial.println(F("Conectando al servidor..."));
  if (client.connect(URL, 80))
  {
    Serial.println(F("Conectado."));
    //Hace la solicitud GET HTTP a Twitter:
    client.print("GET /1/statuses/user_timeline.json?screen_name=");
    client.print(usuarioTwitter);
    client.println("&count=1 HTTP/1.1");
    client.println("HOST: api.twitter.com");
    client.println();  

    while (client.connected())
    {
       if (client.available())
       {
          Serial.println(F("Obteniendo tweet..."));
          if ( finder.getString("\"text\":\"", "\",\"source", tweet, 256) != 0 )  //Guarda en tweet el texto que encuentra entre "text":" y ","source
          {
              Serial.print("@");
              Serial.print(usuarioTwitter);  //Imprime el Usuario
              Serial.print(": ");
              Serial.println(tweet);  //Imprime el Tweet
          }  
       break;
      }
    }
    delay(1);
    client.stop();    //Corta la conexión con el servidor
    
    Serial.print(F("Espera "));
    Serial.print(retardo/1000);
    Serial.println(F(" segundos...\n"));
    delay(retardo);
  }
}
9  Community / Exhibition / Gallery / Re: Made my own TwitterClient and I think it's better than the example one on: February 05, 2013, 04:00:10 pm
To help you further, post me your twitter buffer (tweet) as you get it on your console.

This part of my code:
Code:
while (client.connected())
    {
      if (client.available())
      {
        Serial.println(F("Obteniendo tweet..."));    
        if ( (finder.find("</id>")) && (finder.getString("<text>", "</text>", tweet, 150)!=0) )
        {
           if ( (finder.find("</name>")) && (finder.getString("<screen_name>", "</screen_name>", usuario, 50)!=0) )
           {
             Serial.print("@");
             Serial.print(usuario);  //Imprime el Usuario
             delay(1);
             Serial.print(">");
             delay(1);
             Serial.println(tweet);  //Imprime el Tweet
           }
        }  
      break;
    }
  }

prints this:
Code:
Obteniendo tweet...
@tuitduino>Probando la &#241; la &#191; y la &#161; por ejemplo.

But it should print this:
Code:
Obteniendo tweet...
@tuitduino>Probando la ñ la ¿ y la ¡ por ejemplo.

Quote
Second I need to know if in your buffer (tweet) this "&#241" takes 5 places or 3. Because we need to know if 241 is one character or three (2,4,1).
It is "&#241;" with an ;
It takes 6 places, one for every value you see (I've tested it), so "241" are three and "&#241;" are six.

Quote
On the other hand you could use textfinder on your "tweet" buffer and look for &#241 and replace it with '241' (1 character)
I've tried to do that by creating a new object
TextFinder replace(¿tweet?, 2)
and then looking for "&#241;" as it follows
if ( replace.find("&#241;") )
but I don't know how to replace "&#241;" into the buffer (tweet) smiley-mad smiley-cry So I'm going to attempt to do it the other way you mentioned before between quotes.

Quote
oh, and could you post the twitter account that posts those funny Spanish characters?
Well... I've created a Twitter account specialy for this purpose and my target is getting tweets from Spanish users, for this reason I have all of this troubles...

PD: many thanks again and I promise I will mention you in my code smiley-wink
10  Community / Exhibition / Gallery / Re: Made my own TwitterClient and I think it's better than the example one on: February 05, 2013, 07:45:06 am
are you able to show those characters on the serial monitor, when put into a string? (not from twitter, but when you just do Serial.print("those special characters"); ?

You can replace those &#241 , &#191, &#161 with the actual character. I did that in another project of mine (www.jo3ri.be/arduino/projects/castduino). You can start looking for &# with Textfinder and when found replace those with along with the according number.

Something like if &# and 241 than you have ñ.

also check google on "string replace" (http://www.cplusplus.com/reference/string/string/replace/)

Thanks for reply so fast JO3RI.
Well, I've opened a new sketch just to test this character (ñ):
Code:
char inChar1 = 'ñ';
char inChar2[] = {'ñ'};
char inChar3[] = "ñ";
char inChar4 = 241;
String inString = "ñ";

void setup()
{
  Serial.begin(9600);
 
  Serial.println("ñ");
  Serial.println(char(241));
  Serial.println(inChar1);
  Serial.println(inChar2);
  Serial.println(inChar3);
  Serial.println(inChar4);
  Serial.println(inString);
}

void loop()
{
}

Results:
Serial.println("ñ");  prints  ñ
Serial.println(char(241));  prints  ñ
char inChar1 = 'ñ';         Serial.println(inChar1);  prints  ±
char inChar2[] = {'ñ'};   Serial.println(inChar2);   prints  ±Ã±
char inChar3[] = "ñ";     Serial.println(inChar3);  prints  ñ
char inChar4 = 241;       Serial.println(inChar4);  prints  ñ
String inString1 = "ñ";     Serial.println(inString1);  prints  ñ
String inString2 = String(char(241));   Serial.println(inString2);  prints  ñ

I understand all of your code and it works, and I assure you I've been testing for days how to implement the replacement of those html characters and everything I'm testing doesn't work. Please, could you give me a hand and be a bit more explicit? This is the project for my degree smiley-wink Thanks.

PD: I changed the format from .rss to .xml and obviously the strings StartHere, EndHere, etc...
11  Community / Exhibition / Gallery / Re: Made my own TwitterClient and I think it's better than the example one on: January 28, 2013, 03:50:27 pm
Hi JO3RI,
I'm trying to do a Twitter client with Arduino (I want to receive tweets from an user account and display it on the serial monitor. I'm using an Arduino UNO R3 board and the Ethernet shield.
I have tested this example http://arduino.cc/en/Tutorial/TwitterClient and it works, but I have a problem: I'm Spanish, so there are some characters we use like letter 'ñ' and others like '¿' or '¡', etc., and the serial monitor doesn't show it. It shows "&#241" instead of 'ñ', "&#191" instead of '¿', "&#161" instead of '¡', etc. smiley-sad
Could you please help me to fix it? Do you have any idea of how I can solve it? Could your code help me to do it?
You'd be very helpful, really smiley
Pages: [1]