postUpdate

31 views
Skip to first unread message

Mel

unread,
May 9, 2008, 7:06:28 AM5/9/08
to Twitxr API developers
Buenas a tod@s

Estoy intentando hacer una pequeña aplicación que suba a Twitxr
imágenes desde mi Blackberry.
Uso el método "postUpdate" y he seguido todo lo que se indica en el
API. Sin embargo, aun no he podido lograr subir ninguna imagen puesto
que obtengo "Could not find your location" como respuesta del
servidor.


El código utilizado es el siguiente:

//**************Abrimos la conexion
String url = "http://twitxr.com/api/rest/postUpdate";
HttpConnection hcon = (HttpConnection)
Connector.open(url,Connector.READ_WRITE);

//****************Indicamos que el método es POST
hcon.setRequestMethod(HttpConnection.POST);

//**************Indicamos Content-Type multipart para la subida de
imagenes
String boundary = "--------probando";
hcon.setRequestProperty("Content-Type", "multipart/form-data;
boundary=" + boundary);

//***************Formamos la autorizacion, usando el algoritmo md5
para la clave (basado en la implementacion de Paul Johnston:http://
pajhome.org.uk/site/legal.html) y pasando tanto usuario y clave a
Base64 (obtenida de http://iharder.sourceforge.net/current/java/base64/)

String auth = encriptar(usuario,clave);
hcon.setRequestProperty("Authorization", "Basic " + auth);

/*****Adjuntamos los parámetros necesarios para la subida de imagenes:
las variables "latitude" y "longitude" que representan a las
coordenadas gps se han comprobado en Twitxr que son válidas
*
*El metodo addSimple(boundary,name,data) que se menciona pasará la
informacion con la siguiente estructura:
* --boundary\r\n
* Content-disposition: form-data; name="name"\r\n\r\ndata\r\n
*
*Y el metodo addImage(boundary,name,data,content-type,filename)
formara:
* --boundary\r\n
* Content-disposition: form-data; name="name"; filename="filename"\r\n
* Content-Type: content-type
* \r\n\r\ndata\r\n
*
*/

ByteArrayOutputStream b = new ByteArrayOutputStream();

b.write(addSimple(boundary, "text", texto.getBytes()));
b.write(addSimple(boundary, "latitude", latitude.getBytes()));
b.write(addSimple(boundary, "longitude", longitude.getBytes()));
b.write(addImage(boundary, "image", data, "image/jpeg",
"Nombre.jpg"));

b.write(addSimple(boundary, "source", "PruebaTwitxr".getBytes()));

//*****************Mandamos los datos

DataOutputStream d = = hcon.openDataOutputStream();
d.write(b.toByteArray());
String tmp = "\r\n--" + boundary + "--\r\n";
d.write(tmp.getBytes());

Por ultimo, se recoge la información mandada por el servidor con un
StringBuffer


Observando el código quedaría descartada la posibilidad que dicho
error fuera por no indicar a la conexión que el método debe ser POST
puesto que sí se indica.

Con respecto al Base64, tuve que usarlo puesto que utilizando
únicamente el md5 el servidor me indicaba que no tenía autorización
("Invalid credentials")


Bueno espero poder tener alguna respuesta y mientras seguiré
intentándolo por si hay suerte y doy con el problema :P

Gracias por adelantado.

freerider

unread,
May 9, 2008, 7:14:02 AM5/9/08
to Twitxr API developers
Hola Mel,
comprueba que el formato que te devuelve latitude.getBytes() sea +-
##.## o sea que el separador decimal sera un punto.
Otra cosa que miraría es si el parámetro place es opcional, porque no
veo que lo estés pasando y en la documentación no queda demasiado
claro.

Suerte

On May 9, 1:06 pm, Mel <epaja...@gmail.com> wrote:
> Buenas a tod@s
>
> Estoy intentando hacer una pequeña aplicación que suba a Twitxr
> imágenes desde mi Blackberry.
> Uso el método "postUpdate" y he seguido todo lo que se indica en el
> API. Sin embargo, aun no he podido lograr subir ninguna imagen puesto
> que obtengo "Could not find your location" como respuesta del
> servidor.
>
> El código utilizado es el siguiente:
>
> //**************Abrimos la conexion
> String url = "http://twitxr.com/api/rest/postUpdate";
> HttpConnection hcon = (HttpConnection)
> Connector.open(url,Connector.READ_WRITE);
>
> //****************Indicamos que el método es POST
> hcon.setRequestMethod(HttpConnection.POST);
>
> //**************Indicamos Content-Type multipart para la subida de
> imagenes
> String boundary = "--------probando";
> hcon.setRequestProperty("Content-Type", "multipart/form-data;
> boundary=" + boundary);
>
> //***************Formamos la autorizacion, usando el algoritmo md5
> para la clave (basado en la implementacion de Paul Johnston:http://
> pajhome.org.uk/site/legal.html) y pasando tanto usuario y clave a
> Base64 (obtenida dehttp://iharder.sourceforge.net/current/java/base64/)

Mel

unread,
May 9, 2008, 8:03:59 AM5/9/08
to Twitxr API developers
Buenas freerider,

Que rápidez en contestar!! jajaja
Pues como está en el código comentado,las coordenadas que se pasan sí
tienen el formato que indicas, de hecho me aseguré antes de probarlo
directamente con la cuenta de twitxr y me localizaba perfectamente el
lugar indicado.
Lo que no he probado es poner el parámetro place a la vez que indico
tanto la longitud como la latitud, puesto que me pareció entender en
la documentación que dependiendo de la información que dispongas pues
usas "place" ó "latitude" y "longitude" o "cid" y "lac".
De todas formas intentaré probarlo como dices y si funciona dejaré
unmensaje con la solución.
No obstante, si se te ocurriera otra idea será muy bien recibida XD

Gracias

freerider

unread,
May 9, 2008, 8:29:20 AM5/9/08
to Twitxr API developers
es lo que tiene estar siempre online :)

lo del parámetro place no lo veo muy claro que sea la solución...
pero.... aunque he leído bien la documentación y da las 3 opciones.

Prueba cambiar el valor de la variable String boundary = "--------
probando"; quitando le los guiones. Por probar... porque el resto lo
veo bien.
Saludos

freerider

unread,
May 9, 2008, 8:32:29 AM5/9/08
to Twitxr API developers
revisa también el método addSimple(boundary,name,data) y verifica que
este armando correctamente el string con las variables que le pasas.
saludos

Mel

unread,
May 12, 2008, 3:59:55 AM5/12/08
to Twitxr API developers
Buenas,

Pues he probado a utilizar "place" en lugar de "latitude" y
"longitude" y me sigue dando el mismo error "Could not find your
location".
También he probado con quitar todos los guiones del valor inicial de
la variable "boundary" y nada :(
Con respecto al método addSimple, es algo bastante sencillo y lo hace
bien , por comprobar ya no se ni qué más hacer!!! jajajaj
Adjunto aquí el cuerpo del método por si veis algo que pueda no
encajar:

addSimple(boundary,name,data)
ByteArrayOutputStream b = new ByteArrayoutOutputStream
// "--BOUNDARY\r\n"
b.write("--".getBytes());
b.write(boundary.getBytes());
b.write("\r\n".getBytes());
// "Content-disposition: form-data; name=\"NAME\"\r\n\r\n"
b.write("Content-disposition: form-data; name=\"".getBytes());
b.write(name.getBytes());
b.write("\"\r\n\r\n".getBytes());
// data
b.write(data);
// "\r\n"
b.write("\r\n".getBytes());

Lo dicho, si hay alguna sugerencia encantada de recibirla :P

Albert Martin

unread,
May 12, 2008, 6:06:44 AM5/12/08
to twitxr-api...@googlegroups.com
Hola Mel, tienes algun error con la peticion post porque no esta llegando ningun parametro (ni texto ni imagen ni coordenadas), te da el error del location porque es lo unico realmente obligatorio


Voy a mandarte el codigo de TwitxMe  (http://dns.hayami-kishimoto.net/~fadenb/twitxme.html) por correo, es j2me también y está funcinoando, quizás pueda ayudarte con la petición


Un saludo

Albert


2008/5/12 Mel <epaj...@gmail.com>:

Nacho Uve

unread,
May 12, 2008, 10:12:01 AM5/12/08
to twitxr-api...@googlegroups.com
No sé muy bien lo que hace el código.... pero, has probado a ver exactamente lo que se manda en la variable b? Así podrás comprobar si cumple con el formato de indica la API de Twitxr.

Yo tuve un error similar que me volvió loco; Asegurate de poner dobles comillas después de cada parámetro, es decir:
(...)?place="Madrid, Spain"&text="Esto es el texto"

Un saludo... Ánimo.

Mel

unread,
May 13, 2008, 7:38:50 AM5/13/08
to Twitxr API developers
Hola de nuevo!!

Pues sí, estuve poniendo los System.out.println correspondientes para
ver si formaba bien el paso de los parámentros y lo hace todo
correctamente.
Con respecto a las comillas dobles, también me aseguré de revisarlas y
no faltaba ninguna (de todas formas puede verse en el codigo de mi
comentario anterior)
Ahora estoy estudiando la posibilidad de que me pueda faltar algún
tipo de parámetro que haya que especificarle concretamente al código
por el simple hecho de que sea para un dsipositivo Blackberry y no
j2me puro.

Saludossss y bienvenida cualquier posible idea!!!

On 12 mayo, 16:12, "Nacho Uve" <nacho...@gmail.com> wrote:
> No sé muy bien lo que hace el código.... pero, has probado a ver exactamente
> lo que se manda en la variable b? Así podrás comprobar si cumple con el
> formato de indica la API de Twitxr.
>
> Yo tuve un error similar que me volvió loco; Asegurate de poner dobles
> comillas después de cada parámetro, es decir:
> (...)?place="Madrid, Spain"&text="Esto es el texto"
>
> Un saludo... Ánimo.
>
Reply all
Reply to author
Forward
0 new messages