Ver la versión completa : [Programación] Mi ultima aplicacion en Android Market
firesign
08/02/2012, 13:44
Hola a todos.
NOVEDAD: version 1.1 disponible, con muchas de las mejoras que me habeis comentado, y con feeds RSS propios (no tienen porque estar en Google Reader).
Ayer subi una nueva aplicacion al Market. Se llama Newsboard, en homenaje a Flipboard, a la que pretendia que se pareciera pero despues he tenido que ir quedandome en algo mucho mas discreto y para nada tan ambicioso, puesto que yo no cuento con los servicios web online que tienen ellos.
Es un cliente de Twitter y Google Reader muy vistoso, y permite consultar tu cuenta y tus noticias de una forma muy visual.
La idea es ampliarlo con Facebook, noticias RSS añadidas por el usuario sin que tengan que estar en Google Reader, etc, en un futuro.
Os dejo el enlace. Es totalmente gratis, sin publicidad ni nada. Echadle un vistazo y probadla, merece la pena:
https://market.android.com/details?id=com.israelcardenas.newsboard
http://img337.imageshack.us/img337/7843/funciones.png
http://img821.imageshack.us/img821/6293/captura1vs.png
Aparte, comentar que hoy me han quitado una de mis aplicaciones del Market, concretamente la que tenia para ver la TV con canales españoles, por una denuncia hecha a Google desde RTVE (manda wevos...). La aplicacion simplemente era un menu relativamente currado desde la que se podia acceder a las paginas oficiales de cada cadena para ver sus canales online. No utilizaba paginas "alternativas", no ofrecia ningun canal de pago ni nada parecido, y ni siquiera hacia por cargar los videos directamente o reproducirlos en algun reproductor flash por mi cuenta, como hacen otras. Eran simples enlaces... Aparte, la aplicacion ofrecia la programacion de los canales, asi como acceso a noticias sobre TV.
Solo han quitado la version de pago, la gratuita con publicidad no la han quitado, al menos por ahora. Sin embargo, ya me he adelantado yo y la he despublicado por mi cuenta. No se si pretenderan llegar a algo mas. En el mail de Google vienen perfectamente detallados los datos de la persona que ha realizado la queja, con nombre, apellidos, y direccion de correo (de RTVE). Y con una simple busqueda en Google he localizado quien es, en que ciudad vive, DNI, y mas datos (manda wevos la seguridad de la pagina de RTVE..., tienen accesibles e indexados por Google ficheros Excel con montones de datos de personas).
Ya le he escrito sobre este tema al abogado con el que consulte sobre esta misma aplicacion, especilizado en derechos de autor y propiedad intelectual, y que me dijo que no habia ningun problema con mi aplicacion por la forma en la que estaba hecha y como funcionaba. Espero que no pase nada mas...
La iba a probar porque no me convence ninguna aplicación de las que tengo para el Google Reader, pero...
¿Por qué pides permisos de GPS y cámara? ¿Y por qué está a nombre de una tal Silvia?
firesign
08/02/2012, 13:55
La iba a probar porque no me convence ninguna aplicación de las que tengo para el Google Reader, pero...
¿Por qué pides permisos de GPS y cámara? ¿Y por qué está a nombre de una tal Silvia?
De GPS porque te permite hacer busquedas en Twitter localizadas por tu posicion. Puedes elegir si quieres hacerlas de forma global, o localizadas por tu posicion.
De camara evidentemente es porque si quieres subir Tweets con imagenes te deja echar la foto con la camara :D
Y esta a nombre de Silvia porque es mi mujer y el usuario lo sacamos a su nombre, mas que nada por el tema de los cobros de publicidad, etc.
Ah, sí, ya recuerdo lo de poner las aplicaciones a nombre de tu mujer.
Me da mucho yuyu decirle a tu aplicación mi usuario y contraseña de Google... sí que lo haré porque te conozco, pero seguro que hay mucha gente que no lo consentirá. ¿No puedes hacer algo similar al OAuth que imagino que haces con Twitter, o pedir permiso de "acceso a cuenta Google"?
Bueno, como en todo no hay nada tan claro cuando hablamos de beneficios obteniendo recursos de otras webs (aunque sea enlazándolas) y hablamos del carácter supranacional en muchos casos de las conexiones a través de los móviles... Por otro lado, muchas veces es la información accesoria más que los enlaces principales por donde se quiere tocar las narices. No es tampoco la primera app que ha tenido problemas similares, y creo que en otro hilo ya mencioné que incluso con bases de datos a veces hay problemas (y Google retira en caso de duda, que tampoco es tonto y sabe lo que le beneficia, sin perjuicio de una contra notificación en algunos casos).
En fin, rollo aparte, el diseño me gusta mucho porque es lo que yo siempre busco. Limpito y sencillo.
No he probado ningún otro, pero este no esta mal :).
Una cosa, cuando das a Google Reader sin estar logeado y sueltas el rollo de que hay que meter los datos en configuración... yo pondría un boton de Ir y otro de Cancelar, para ahorrar un poco de trabajo al usuario :D.
Otra cosa, la previsualización que haces de las noticias... con la imagen a tamaño completo de background... destroza las imagenes, yo no las redimensionaría, al menos no al tamaño de la pantalla por que queda bastante feo.
También haría cambio de noticia hacia derecha e izquierda cuando ya estas viendo una completa, para ver la siguiente completa.
Puntuada ;)
:brindis::brindis:
GameMaster
08/02/2012, 14:19
felicidades.
Para no tener que pedir el usuario y contraseña de google para acceder al reader, échale un vistazo a la clase AccountManager de Android.
Esta clase accede a las cuentas de gmail configuradas en el teléfono y te pedirá conceder permisos y punto, nada de pedir contraseñas a nadie. Hay mucha gente desconfiada que no va a usar la aplicación sólo por ese detalle.
Enhorabuena por la aplicación, tiene buena pinta!!
:brindis:
^MiSaTo^
08/02/2012, 14:37
Ah, sí, ya recuerdo lo de poner las aplicaciones a nombre de tu mujer.
Me da mucho yuyu decirle a tu aplicación mi usuario y contraseña de Google... sí que lo haré porque te conozco, pero seguro que hay mucha gente que no lo consentirá. ¿No puedes hacer algo similar al OAuth que imagino que haces con Twitter, o pedir permiso de "acceso a cuenta Google"?
Hombre, si quieres acceder a google reader... necesitas tu cuenta de google. Y no, la api que yo sepa (a no ser que la hayan cambiado) no admite oAuth (gracias a dios, porque es un **** coñazo).
Por otro lado, hice un widget para Android llamado SocialFeed que es basicamente la misma idea, pero en vez de con GReader, con twitter y FB XDDD (no está en el market, lo hice como una demo para mi empresa)
firesign
08/02/2012, 15:44
Hombre, si quieres acceder a google reader... necesitas tu cuenta de google. Y no, la api que yo sepa (a no ser que la hayan cambiado) no admite oAuth (gracias a dios, porque es un **** coñazo).
Por otro lado, hice un widget para Android llamado SocialFeed que es basicamente la misma idea, pero en vez de con GReader, con twitter y FB XDDD (no está en el market, lo hice como una demo para mi empresa)
Es cierto, la API de Google no admite OAuth. Twitter si, y asi esta hecho. Pero Google Reader no puede.
< - >
Para no tener que pedir el usuario y contraseña de google para acceder al reader, échale un vistazo a la clase AccountManager de Android.
Esta clase accede a las cuentas de gmail configuradas en el teléfono y te pedirá conceder permisos y punto, nada de pedir contraseñas a nadie. Hay mucha gente desconfiada que no va a usar la aplicación sólo por ese detalle.
Enhorabuena por la aplicación, tiene buena pinta!!
:brindis:
Le echare una pinta, ipso facto, a esa clase.
EDITO: le he echado un vistazo a este tema, pero no creo que sirva. Aunque pueda obtener las Accounts que esten dadas de alta en el telefono, no se puede obtener la contraseña de las mismas. Y el problema es que para trabajar con el API de Google Reader hay que utilizar forzosamente el login y la contraseña del usuario. No queda otra. Por lo tanto, no hay mas wevos que pedir la contraseña si quiere utilizarlo...
< - >
No he probado ningún otro, pero este no esta mal :).
Una cosa, cuando das a Google Reader sin estar logeado y sueltas el rollo de que hay que meter los datos en configuración... yo pondría un boton de Ir y otro de Cancelar, para ahorrar un poco de trabajo al usuario :D.
Otra cosa, la previsualización que haces de las noticias... con la imagen a tamaño completo de background... destroza las imagenes, yo no las redimensionaría, al menos no al tamaño de la pantalla por que queda bastante feo.
También haría cambio de noticia hacia derecha e izquierda cuando ya estas viendo una completa, para ver la siguiente completa.
Puntuada ;)
:brindis::brindis:
La previsualizacion a tamaño completo si que es verdad que destroza las imagenes que no tengan un formato muy parecido con el hueco de la pantalla. Pero la verdad es que he probado todo tipo de transformaciones con "matrix" y ninguna quedaba bien, asi que al final me decante por esta, que aunque deforme muchas imagenes, al menos es la que mas espectacular queda...
Lo de cambiar las noticias a izquierda y derecha cuando la estas viendo completa ya esta hecho. Viene explicado en la ayuda. Lo puedes hacer pero solo en la zona del titulo y donde estan las flechas indicando el movimiento (las puse para eso, pero si veo que la gente no lo identifica las quitare :D ). No he logrado hacerlo dentro de la propia noticia en si (la zona con fondo blanco) porque es un Webview, y para que sigan funcionando los enlaces no puedo ponerle un listener onTouch a esa zona (o al menos no he encontrado la forma, porque poderse hacer si que se puede porque lo he visto en otras).
He buscado bastante y no lo he logrado. Si algun alma caritativa sabe como colocar un onTouchListener a un Webview y que siga pudiendose clickar en los enlaces que incluya, soy todo oidos :brindis:
IronArthur
09/02/2012, 09:36
Por partes:
estéticamente me gusta mucho, el diseño es muy bueno.
El options menu para las opciones te "recomiendo" quitarlo porque en general se va a usar cada vez menos http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html y la guia de diseño recomendada : http://developer.android.com/design/index.html
la autenticación con los distintos servicios me ha resultado bastante engorrosa, ahora mismo no recuerdo como te autenticabas con greader en el pulse pero no recuerdo que fuera así.
cuando entras en la seccion de greader p.e.: y salen las distintintas categorias la animación de movimiento me parece algo brusca.
sobre el webview, nunca he trabajdo con el, pero en mi experiencia con eventos es q podrías poner el control del evento en el layout superior al webview (override) y si es un flip desplazas pagina y si es un click lo pasas al evento inferior. Yo lo he hecho con listas y desplazamientos/tablas anidados. Sino lo consigues hacer comenta y busca la info de como hacerlo q lo tengo hecho en mono ahora mismo.
Ya sé que soy algo critico pero por experiencia son las mejores cosas q te puedo comentar para mejorar el programa.
salu2
Lo de cambiar las noticias a izquierda y derecha cuando la estas viendo completa ya esta hecho. Viene explicado en la ayuda. Lo puedes hacer pero solo en la zona del titulo y donde estan las flechas indicando el movimiento (las puse para eso, pero si veo que la gente no lo identifica las quitare :D ). No he logrado hacerlo dentro de la propia noticia en si (la zona con fondo blanco) porque es un Webview, y para que sigan funcionando los enlaces no puedo ponerle un listener onTouch a esa zona (o al menos no he encontrado la forma, porque poderse hacer si que se puede porque lo he visto en otras).
He buscado bastante y no lo he logrado. Si algun alma caritativa sabe como colocar un onTouchListener a un Webview y que siga pudiendose clickar en los enlaces que incluya, soy todo oidos :brindis:
Sip, en el preview de la noticia vi que se podía por eso te comentaba lo de ponerlo también en la noticia completa jeje. Creo que la gente si lo identificara facilmente ;)
:brindis::brindis:
firesign
09/02/2012, 10:54
Por partes:
estéticamente me gusta mucho, el diseño es muy bueno.
El options menu para las opciones te "recomiendo" quitarlo porque en general se va a usar cada vez menos http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html y la guia de diseño recomendada : http://developer.android.com/design/index.html
la autenticación con los distintos servicios me ha resultado bastante engorrosa, ahora mismo no recuerdo como te autenticabas con greader en el pulse pero no recuerdo que fuera así.
cuando entras en la seccion de greader p.e.: y salen las distintintas categorias la animación de movimiento me parece algo brusca.
sobre el webview, nunca he trabajdo con el, pero en mi experiencia con eventos es q podrías poner el control del evento en el layout superior al webview (override) y si es un flip desplazas pagina y si es un click lo pasas al evento inferior. Yo lo he hecho con listas y desplazamientos/tablas anidados. Sino lo consigues hacer comenta y busca la info de como hacerlo q lo tengo hecho en mono ahora mismo.
Ya sé que soy algo critico pero por experiencia son las mejores cosas q te puedo comentar para mejorar el programa.
salu2
No te preocupes, por supuesto que las criticas me son muy utiles, y si son de gente que controla del tema mucho mas. Se trata de mejorar, por supuesto.
Lo del "options" lo tengo mas que claro, y lo tengo apuntado desde que lo vi en algun blog. Ya pondre alguna forma de llamarlo desde un icono con forma de rueda dentada o algo. Sera por sitio libre en la pantalla de inicio... :D Lo que pasa es que ya lo tenia hecho asi desde un principio, y queria sacar ya algo. Pero sera lo primero que cambie, je je...
La autenticacion con los servicios es la forma que he encontrado para hacerlo:
- En Twitter con OAuth es como explican en su propia pagina de desarrolladores, y como he encontrado en todos los ejemplos que he visto por ahi. Imagino que habra otro tipo mas avanzado haciendo uso de AccountManager y usando la cuenta de Twitter dada de alta en el dispositivo, pero no he encontrado informacion de eso, y ademas con eso dependes de que la persona tenga instalado ya el cliente de Twitter (que sera lo mas probable, pero bueno), y creada esa cuenta o cuentas.
- En GReader no he visto otra posibilidad, pero no creo que sea engorroso meter el usuario y la clave. ¿Que pueda generar desconfianza? Por supuesto. Pero engorroso no creo, es de lo mas simple. La cosa es que GReader solo puedes acceder a el mediante una API muy simple que necesita que se le pase el usuario y la contraseña obligatoriamente. Y no he encontrado forma de conseguir la contraseña de las cuentas de Google dadas de alta en el dispositivo mediante AccountManager... Respecto a Pulse, en el que yo tengo instalado en mi movil, no me deja (o yo no he encontrado la forma de hacerlo) utilizar Google Reader. Se dan de alta las fuentes RSS manualmente o de las que el te ofrece, pero yo no veo como integrarlo con mis fuentes de GReader...
Las animaciones he utilizado las que trae para este tipo de movimiento el SDK de Android. Vamos, que las he cogido de las que vienen en los recursos del SDK y las he metido en mi proyecto. Seguro que las hay mucho mejores hechas por otros por ahi, pero no he encontrado ninguna (no he gastado tampoco demasiado tiempo en buscar esto).
Sobre el tema del Webview, he intentado hacer algo parecido a lo que me comentas (o eso creo), pero no lo he conseguido. El Webview esta metido en una TableRow. He intentado hacer el onTouchListener sobre la TableRow, pero no me funciona. Si pongo el onTouchListener sobre el TableRow, o consigo que se ejecute. Cuando dentro del TableRow hay otro tipo de Layout o View si funciona (por eso se desplaza desde el titulo), pero si lo que hay dentro es una WebView no me funciona...
En cualquier caso creo que lo que me comentas del WebView es diferente a lo que yo he probado, pero no lo entiendo muy bien como dices. Si me indicas de algun sitio donde venga informacion al respecto, un ejemplo, o explicacion mas detallada, te lo agradeceria :brindis:
IronArthur
09/02/2012, 15:32
No me puedo explicar demasiado ahora q no tengo tiempo pero es similar a lo que preguntan aqui:
http://stackoverflow.com/questions/5596909/android-touch-events-with-multiple-viewssuch-as-a-listview-in-a-viewflliper
Básicamente lo que haces es extender el listener del webview y si detectas que estas haciendo el gesto de desplazamiento te desplazas sino dejas gestionar el evento normalmente.
A ver si tengo tiempo entre hoy y mañana y hago un par de pruebas y te lo pego.
Salu2
Feedly sí que lee GReader, y no recordaba meter usuario y contraseña. Por si acaso la he borrado totalmente y vuelto a instalar, y efectivamente, no pide contraseña. Mirando los permisos de la aplicación *creo* que utiliza alguna contraseña que está guardada en algún lugar del móvil.
Cuando inicia te pregunta si das permiso a que acceda a los datos de la cuenta de GReader, así que supongo que los leerá de algún sitio del móvil.
firesign
09/02/2012, 18:47
No me puedo explicar demasiado ahora q no tengo tiempo pero es similar a lo que preguntan aqui:
http://stackoverflow.com/questions/5596909/android-touch-events-with-multiple-viewssuch-as-a-listview-in-a-viewflliper
Básicamente lo que haces es extender el listener del webview y si detectas que estas haciendo el gesto de desplazamiento te desplazas sino dejas gestionar el evento normalmente.
A ver si tengo tiempo entre hoy y mañana y hago un par de pruebas y te lo pego.
Salu2
Tengo implementado algo parecido a eso ya. Por ejemplo, en la zona del titulo puedes ver si que simplemente pulsas, muestra la opcion de compartir en Twitter. Si desplazas en vertical, la pantalla se mueve arriba y abajo. Y si desplazas en horizontal, mueve entre las noticias. Si hago eso mismo con el WebView me funciona todo excepto que ya no procesa los simples toques (si los desplazamientos horizontales y verticales).
En cualquier caso, creo que el problema que tengo es que no se como procesar el evento "normalmente", es decir, como hacer que el evento lo procese la vista "hija". Vamos, que una vez dentro del Listener de movimiento, no se como pasar de el y hacer que lo procese el hijo con lo que tenga que hacer por defecto... Y en el ejemplo de stackoverflow tampoco llego a verlo.
^MiSaTo^
09/02/2012, 19:01
Tengo implementado algo parecido a eso ya. Por ejemplo, en la zona del titulo puedes ver si que simplemente pulsas, muestra la opcion de compartir en Twitter. Si desplazas en vertical, la pantalla se mueve arriba y abajo. Y si desplazas en horizontal, mueve entre las noticias. Si hago eso mismo con el WebView me funciona todo excepto que ya no procesa los simples toques (si los desplazamientos horizontales y verticales).
En cualquier caso, creo que el problema que tengo es que no se como procesar el evento "normalmente", es decir, como hacer que el evento lo procese la vista "hija". Vamos, que una vez dentro del Listener de movimiento, no se como pasar de el y hacer que lo procese el hijo con lo que tenga que hacer por defecto... Y en el ejemplo de stackoverflow tampoco llego a verlo.
El booleano que devuelves en la función on touch es el que dice si has procesado o no el evento. Ahora mismo lo digo de cabeza pero yo lo que haría sería:
Hacer un override del ontouch en el WebView y dentro algo como esto:
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//aquí procesas lo que sea
}
else {
super.OnTouch(v, event);
}
Con eso, haces que sea la clase "padre" la que se encargue del evento, por lo que funcionaría de manera "normal" y tú sólo te preocupas de procesar los eventos que sean (en este caso ACTION_DOWN).
PD: Perdonad algún gazapo en el código pero llevo 2 meses haciendo una app de iOS y otra de Win Phone (las 2 a la vez)... tengo un cacao de lenguajes de la leche y no se si lo que he escrito está bien o no xDD
firesign
09/02/2012, 19:21
El booleano que devuelves en la función on touch es el que dice si has procesado o no el evento. Ahora mismo lo digo de cabeza pero yo lo que haría sería:
Si, ya me habia imaginado que era el boolean. Aun asi, llevo un rato probando opciones y nada, no hay forma.
Estoy viendo que cuando la vista hija es un WebView, cuando se toca la pantalla el padre nunca procesa el evento. Por mucho que lo hago, no hay forma, es siempre el WebView directamente el que lo procesa. Vamos, que o proceso el onTouch con un listener directamente en el WebView, o por mucho que lo haga con la vista padre, nunca lo ve.
No tengo ni idea de porque es esto asi. Con cualquier otro tipo de vista hija que he probado funciona perfectamente esto que decis, pero con el WebView no me funciona. He definido el onTouch listener en la vista padre, y simplemente le he puesto un Log que me escriba una frase, y no salta nunca. Si lo pongo en el WebView hijo, salta la frase en log sin problemas... :lamer: :confused:
Entonces, la historia en mi caso seria como definir un onTouch listener del WebView que cuando desplazo haga el movimiento (eso lo tengo), pero cuando simplemente toques, lo procese como lo haria un WebView por defecto.
^MiSaTo^
09/02/2012, 19:24
Si, ya me habia imaginado que era el boolean. Aun asi, llevo un rato probando opciones y nada, no hay forma.
Estoy viendo que cuando la vista hija es un WebView, cuando se toca la pantalla el padre nunca procesa el evento. Por mucho que lo hago, no hay forma, es siempre el WebView directamente el que lo procesa. Vamos, que o proceso el onTouch con un listener directamente en el WebView, o por mucho que lo haga con la vista padre, nunca lo ve.
No tengo ni idea de porque es esto asi. Con cualquier otro tipo de vista hija que he probado funciona perfectamente esto que decis, pero con el WebView no me funciona. He definido el onTouch listener en la vista padre, y simplemente le he puesto un Log que me escriba una frase, y no salta nunca. Si lo pongo en el WebView hijo, salta la frase en log sin problemas... :lamer: :confused:
Entonces, la historia en mi caso seria como definir un onTouch listener del WebView que cuando desplazo haga el movimiento (eso lo tengo), pero cuando simplemente toques, lo procese como lo haria un WebView por defecto.
Lo que te propongo yo es que sobrescribas el onTouch del webView, creándote tú una clase que herede del WebView y usándola en vez de un WebView normal.
firesign
09/02/2012, 19:26
Ahora mismo lo digo de cabeza pero yo lo que haría sería:
Hacer un override del ontouch en el WebView y dentro algo como esto:
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//aquí procesas lo que sea
}
else {
super.OnTouch(v, event);
}
...
Exacto. Lo que estaba pensando en este momento, como decia. Pero el problema es que al hacerlo, al menos como lo tengo, no puedo acceder al "super". Te pongo como lo estoy definiendo:
webView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
...
super.onTouch(arg0, arg1); <--- Aqui me dice que onTouch no esta definido para el tipo Object...
...
}
});
Estoy ya perdido... :lamer:
< - >
Lo que te propongo yo es que sobrescribas el onTouch del webView, creándote tú una clase que herede del WebView y usándola en vez de un WebView normal.
Eso te estaba escribiendo a la vez, je je. Pero estoy negado ahora mismo y no lo consigo...
^MiSaTo^
09/02/2012, 19:26
Exacto. Lo que estaba pensando en este momento, como decia. Pero el problema es que al hacerlo, al menos como lo tengo, no puedo acceder al "super". Te pongo como lo estoy definiendo:
webView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
...
super.onTouch(arg0, arg1); <--- Aqui me dice que onTouch no esta definido para el tipo Object...
...
}
});
Estoy ya perdido... :lamer:
Ok si quieres hacerlo así entonces tienes que hacer dos cosas. En la Activity que tienes eso pon que implementa el listener y a webView.setOnTouchListener le pasas this.
Luego en el método onTouch que hayas puesto ya metes el super y demás ;)
firesign
09/02/2012, 19:40
Ok si quieres hacerlo así entonces tienes que hacer dos cosas. En la Activity que tienes eso pon que implementa el listener y a webView.setOnTouchListener le pasas this.
Luego en el método onTouch que hayas puesto ya metes el super y demás ;)
Definitivamente va a ser mas complicado...
El problema es que todo esto se procesa en una clase interna de una Activity, pero que dicha clase no es una Activity, sino una que extiende de AsyncTask, ya que es la que procesa en background la descarga de los datos y los muestra.
Puedo hacer que esa clase implemente el listener de onTouch, pero el super vuelve a no valer porque en este caso, en lugar de object, me dice que AsyncTask no tiene ningun onTouch.
[Ahhh] [Ahhh] [Ahhh] :( :( :(
^MiSaTo^
09/02/2012, 19:42
Definitivamente va a ser mas complicado...
El problema es que todo esto se procesa en una clase interna de una Activity, pero que dicha clase no es una Activity, sino una que extiende de AsyncTask, ya que es la que procesa en background la descarga de los datos y los muestra.
Puedo hacer que esa clase implemente el listener de onTouch, pero el super vuelve a no valer porque en este caso, en lugar de object, me dice que AsyncTask no tiene ningun onTouch.
[Ahhh] [Ahhh] [Ahhh] :( :( :(
Obviamente dentro de un asyncTask no se puede hacer!
Si pegas el código igual me es más fácil ver cómo solucionarlo porque ahora no se para qué tienes ese AsyncTask
firesign
09/02/2012, 19:43
Obviamente dentro de un asyncTask no se puede hacer!
Si pegas el código igual me es más fácil ver cómo solucionarlo porque ahora no se para qué tienes ese AsyncTask
Lo estoy probando directamente en el Activity, solo por probar, e igualmente me dice al poner el "super" que no existe el "onTouch" para el tipo Activity...
Lo que pasa es que el codigo de la clase es bastante grande... Si quieres te la puedo enviar por correo o algo. La actividad en si muestra un codigo HTML en un Webview, y el AsyncTask se utiliza dentro de ella para descargar las imagenes del Webview y mostrar mientras se descargan un Dialog con el progreso de carga.
^MiSaTo^
09/02/2012, 19:44
Lo estoy probando directamente en el Activity, solo por probar, e igualmente me dice al poner el "super" que no existe el "onTouch" para el tipo Activity...
Pero estás implementando la interfaz del listener?
firesign
09/02/2012, 20:19
Pero estás implementando la interfaz del listener?
Sip:
public class ReaderDetail extends Activity implements OnTouchListener {
...
public boolean onTouch(View arg0, MotionEvent arg1) {
...
super.onTouch(arg0, arg1); <--- The method onTouch(View, MotionEvent) is undefined for the type Activity
...
}
...
}
IronArthur
10/02/2012, 09:56
Y algo así? con las diferencias correspondientes claro
// when a touch even happens outside of the window
// make the window go away
this.window.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_OUTSIDE) {
BetterPopupWindow.this.window.dismiss();
return true;
}
return false;
}
});
Adaptandolo a tu caso, esta sacado de una "libreria" para quickactions http://code.google.com/p/simple-quickactions/source/browse/trunk/src/org/example/qberticus/quickactions/BetterPopupWindow.java?r=8
window,en este caso, seria igual q tu webview, y si haces un fling devuelves true (que ya está tratado) o sino devuelves false q tiene que seguir al evento estandar de touch.
Salu2
firesign
10/02/2012, 11:01
Al final despues de probar 1001 posibilidades, lo he logrado. Eso si, solo he podido hacerlo de una forma, el resto o no funcionaban o tenian algun error asociado.
Simplemente, me he creado mi propia clase MyWebView extendiendo de WebView, y he implementado el metodo OnTouchEvent mediante un GestureDetector. Y es en este GestureDetector en el que si el movimiento es horizontal cambio de noticia, mientras que si solo es un toque le dejo procesar al "super" del WebView... Y claro, la instancia de WebView que uso ahora es una instancia de MyWebView :)
Os pongo la clase MyWebView :
class MyWebView extends WebView {
private boolean flinged;
GestureDetector gd;
// CONSTRUCTOR
public MyWebView(Context context) {
super(context);
gd = new GestureDetector(context, sogl);
}
// FUNCION onTouchEvent: encargada de procesar los eventos Touch del WebView
public boolean onTouchEvent(MotionEvent event) {
gd.onTouchEvent(event);
if (flinged) {
flinged = false;
return true;
} else {
return super.onTouchEvent(event);
}
}
// Configuracion del detector de gestos para el WebView
GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
float horMov = event2.getRawX() - event1.getRawX();
float verMov = event2.getRawY() - event1.getRawY();
float absHorMov = Math.abs(horMov);
float absVerMov = Math.abs(verMov);
if (absVerMov > absHorMov) {
// El movimiento es mas vertical que horizontal
flinged = false;
} else if(event1.getX() - event2.getX() > 20) {
// CAMBIAR A LA NOTICIA SIGUIENTE
flinged = true;
} else if (event2.getX() - event1.getX() > 20) {
// CAMBIAR A LA NOTICIA ANTERIOR
flinged = true;
} else {
flinged = false;
}
return (flinged);
}
};
}
Gracias a todos!!
Por otro lado, ya he metido para la nueva version un par de iconos en la pantalla inicial para acceder a la ayuda y a la configuracion sin necesidad de usar el "menu", y ahora estoy con el tema de obtener acceso a la cuenta de Google dada de alta en el telefono sin pedirle al usuario meter su login y password. Ya lo he conseguido mas o menos, utilizando el codigo del cliente de Picassa de Google, que tienen colgado en su web. Ahora me queda afinarlo porque lo tengo hecho muy guarramente :)
firesign
14/02/2012, 16:48
Ya he subido la version 1.1 del programa, con bastantes novedades, casi todas de las cosas que me habeis comentado:
- ya no pide el usuario y la clave de Google, permite utilizar cualquiera de las cuentas que tengais dadas de alta en el telefono para acceso a Google Reader.
- he metido iconos directos para Configuracion y Ayuda en la pagina de entrada, para no tener que usar el menu ahora que Google quiere quitarlo.
- ya se pueden mover las noticias en la vista en detalle haciendo el deslizamiento en cualquier parte de la pantalla.
- y ya he metido la opcion de poder dar de alta y ver feeds RSS configurados por el usuario en el programa, sin que tengan que estar en Google Reader (muy util para meter feeds que querais consultar de vez en cuando y que no os "ensucien" vuestro Google Reader).
Ahora me voy a meter con Facebook, a ver que complicado resulta... :D
Echadle una prueba, y mas cosas que querais comentarme, ya sabeis :brindis:
^MiSaTo^
14/02/2012, 16:49
Ya he subido la version 1.1 del programa, con bastantes novedades, casi todas de las cosas que me habeis comentado:
- ya no pide el usuario y la clave de Google, permite utilizar cualquiera de las cuentas que tengais dadas de alta en el telefono para acceso a Google Reader.
- he metido iconos directos para Configuracion y Ayuda en la pagina de entrada, para no tener que usar el menu ahora que Google quiere quitarlo.
- ya se pueden mover las noticias en la vista en detalle haciendo el deslizamiento en cualquier parte de la pantalla.
- y ya he metido la opcion de poder dar de alta y ver feeds RSS configurados por el usuario en el programa, sin que tengan que estar en Google Reader (muy util para meter feeds que querais consultar de vez en cuando y que no os "ensucien" vuestro Google Reader).
Ahora me voy a meter con Facebook, a ver que complicado resulta... :D
Echadle una prueba, y mas cosas que querais comentarme, ya sabeis :brindis:
Si tienes problemas con la api de FB dimelo, que yo tuve que pegarme con ella en Noviembre. No te fíes de la documentación, que la mayoría de cosas las han cambiado y bájate el último SDK que tienen para Android. Aún así hay cosas que no van y que tuve que cambiar yo directamente de la librería que te dan...
Déjame que te haga algunos comentarios. Soy un heavy user de GReader, muchos días ni siquiera necesito salir de lo que tengo ahí. No sé si soy un usuario objetivo de tu aplicación o te enfocas a otros más "casuals".
- Según las estadísiticas, tengo 115 fuentes y más de 100.000 items. Doy estos números para que te hagas una idea de lo tremendamente incómodo que es ver las fuentes en grupos de 6 y entrando en cada uno de ellos a ver qué novedades hay. Una buena lista con el timeline que me muestre solo los nuevos items para mí es imprescindible, y si puede ser una vista separada por tags/carpetas, aún mejor. Tal como está ahora, con una lista de las subscripciones, a mí personalmente no me parece útil porque la mayoría no se actualizan diariamente y solo unas pocas se actualizan cada hora.
- Hay muchísimas fuentes que no funcionan. Algunos ejemplos: directoalpaladar, El Perro Mistetas, Elblogsalmon... Muestran un error de RSS, pero lo cierto es que funcionan perfectamente en otros lectores incluido el oficial.
- Los tiempos de carga de algunas fuentes son larguísimos (fácilmente 30 segundos con el relojito en pantalla), hasta que he desactivado las imágenes. Algunas incluso con las imágenes desactivadas tardan muchísimo o nunca dejan de mostrar el reloj. Ejemplos: cabovolo, Command Line Kung Fu, gominolasdepetroleo...
- Una vez dentro de alguna de las fuentes que funcionan, a mí personalmente un título que ocupa la tercera parte del espacio (Desire HD) me parece un desperdicio de pantalla :) Pero eso es personal. Es bonito y elegante, seguro, pero desperdicia espacio.
En Android aún no he encontrado una aplicación que me satisfaga tanto como la página del GReader en un PC. Feedly se acerca un poco, pero no entiendo por qué a veces saca las fuentes que le da la gana en vez de las mías.
firesign
14/02/2012, 20:40
Déjame que te haga algunos comentarios. Soy un heavy user de GReader, muchos días ni siquiera necesito salir de lo que tengo ahí. No sé si soy un usuario objetivo de tu aplicación o te enfocas a otros más "casuals".
- Según las estadísiticas, tengo 115 fuentes y más de 100.000 items. Doy estos números para que te hagas una idea de lo tremendamente incómodo que es ver las fuentes en grupos de 6 y entrando en cada uno de ellos a ver qué novedades hay. Una buena lista con el timeline que me muestre solo los nuevos items para mí es imprescindible, y si puede ser una vista separada por tags/carpetas, aún mejor. Tal como está ahora, con una lista de las subscripciones, a mí personalmente no me parece útil porque la mayoría no se actualizan diariamente y solo unas pocas se actualizan cada hora.
Que bestia!! :lol2:
Obviamente no esta pensada la aplicacion para unos numeros tan brutales. Aparte te comento: no he encontrado forma de obtener solo los items no leidos. Aparte, descargar tal cantidad de datos correspondientes a 100.000 items... debe ser brutal. Google puede hacerlo sin problemas, porque tienen servidores dedicados a ellos, obtienen tus datos, los ordenan, y despues te los sirven ya procesados.
Yo lo que he encontrado despues de mucho buscar para utilizar la API de Google Reader no te deja acceder a mucho mas que a la lista de tus subscripciones. Asi que lo maximo que puedo hacer, al menos por ahora, es acceder a tu lista de feeds subscritos, y despues usarlos como si fuera un RSS normal.
- Hay muchísimas fuentes que no funcionan. Algunos ejemplos: directoalpaladar, El Perro Mistetas, Elblogsalmon... Muestran un error de RSS, pero lo cierto es que funcionan perfectamente en otros lectores incluido el oficial.
Esto es verdad y no lo es. Vamos, a medias. En la pagina de error intento explicarlo. A ver, te lo explico con un ejemplo:
- si miras por ejemplo Applesfera, entras a su pagina, y obtienes la direccion del icono de RSS que tienen nada mas entrar, la direccion es: http://www.applesfera.com/index.xml .
- si utilizas esa direccion en tu Google Reader, veras como alli te funciona y en mi aplicacion no.
- pero la cosa es que si accedes para descargar el XML a esa direccion, descarga un HTML minimo sin ningun dato valido. Y esto es lo maximo que yo desde el movil he podido hacer.
- como te comento Google accede a esos datos desde sus servidores, preparados para ello. La cosa es que esa direccion lo que hace es acceder a un proxy, y te lleva realmente a la direccion verdadera donde esta el feed, que es: http://feeds.weblogssl.com/applesfera (si pulsas en el icono de la pagina veras que a donde te lleva es realmente esa).
- si das de alta esa direccion en Google Reader veras que funciona correctamente tanto en Google Reader como en mi aplicacion.
- puedes comprobar lo que te digo si haces un "curl" (desde algun sistema Unix, ya sea Linux o Mac OS) contra ambas direcciones:
- curl http://www.applesfera.com/index.xml -> no baja nada, solo un HTML creado por nginx (un proxy)
- curl http://feeds.weblogssl.com/applesfera -> te baja el XML con todas las noticias y los datos
Por lo tanto, mientras no vea la forma de resolver esas redirecciones, o bien de poder utilizar mas profundamente Google Reader (que no se si es posible, pero no he logrado encontrar informacion donde diga que si) no se podra acceder con mi programa a los feeds que se hayan dado de alta con las direcciones que no son realmente las direcciones de los feeds, sino que hacen una redireccion. Yo lo he podido comprobar con mis fuentes, habia varias que no funcionaban y era por esto.
Otra cosa que tambien puede pasar es que los feeds que tengas no cumplan el estandar RSS. Si pasa eso, mi programa no puede interpretarlos, aunque puede que Google si soporte mas estandares (quien sabe si Atom o cualquier otro).
- Los tiempos de carga de algunas fuentes son larguísimos (fácilmente 30 segundos con el relojito en pantalla), hasta que he desactivado las imágenes. Algunas incluso con las imágenes desactivadas tardan muchísimo o nunca dejan de mostrar el reloj. Ejemplos: cabovolo, Command Line Kung Fu, gominolasdepetroleo...
Si estan las imagenes desactivadas, lo unico que se hace es descargar el fichero XML al que se accede desde la URL del feed. Ahi ya entran en juego solo la velocidad de tu conexion, de la wifi de tu movil (mi Sensation
descarga los datos infinitamente mas rapido que mi Nexus S), y del servidor que sirve el XML. Lo que hay que bajar con las imagenes desactivadas son muy muy pocos datos, porque simplemente es un fichero de texto en formato XML que no suele ocupar mucho. Pero aparte de eso, el programa no hace nada mas. No he metido operaciones extrañas en ese proceso ni mucho menos, asi que no puede influir otra cosa mas que las que te comento.
Si estan activadas las imagenes, evidentemente aparte del XML tambien se descarga la primera imagen que haya en cada noticia, para usarla de fondo. Las imagenes si que suelen tardar mas en bajar que solo el XML, que no es mas que texto.
- Una vez dentro de alguna de las fuentes que funcionan, a mí personalmente un título que ocupa la tercera parte del espacio (Desire HD) me parece un desperdicio de pantalla :) Pero eso es personal. Es bonito y elegante, seguro, pero desperdicia espacio.
¿Te refieres a cuando ya has abierto una noticia en detalle? ¿O a cuando estan solo los titulos de las noticias sin abrir? Si es en detalle, el titulo se desplaza, asi que tampoco importa demasiado. Si es en el listado de titulos de noticias, es verdad lo que dices, pero la verdad es que era una decision de diseño que tome tampoco sin pensarlo demasiado. La cosa es que pretendia mostrar o 1 o 2 noticias por pagina, como hace Flipboard, y poniendolo así caben, asi que tampoco lo vi mal. Pero espacio desaprovechado es, eso no te lo discuto
En Android aún no he encontrado una aplicación que me satisfaga tanto como la página del GReader en un PC. Feedly se acerca un poco, pero no entiendo por qué a veces saca las fuentes que le da la gana en vez de las mías.
Es que por mucho que he buscado, lo que he llegado a encontrar es que Google Reader no tiene API. Bueno, realmente si lo tiene, pero es una API html con la que hay que interactuar mediante HTML. Haciendo peticiones HTML, capturando la respuesta y procesandola... Esto es un infierno, la verdad. Asi que es bastante dificil integrarse con el.
^MiSaTo^
14/02/2012, 21:14
Es que por mucho que he buscado, lo que he llegado a encontrar es que Google Reader no tiene API. Bueno, realmente si lo tiene, pero es una API html con la que hay que interactuar mediante HTML. Haciendo peticiones HTML, capturando la respuesta y procesandola... Esto es un infierno, la verdad. Asi que es bastante dificil integrarse con el.
GReader no tiene API efectivamente, pero hay una gente que se curró un poco de documentación (sacada por ingeniería inversa o vete a saber cómo) e hizo una librería para python. Yo me basé en ello e hice una para iOS, si quieres te puedo pasar el código ;)
Aunque obviamente tiene menos funcionalidad que la web de greader porque no se ha conseguido acceder a todo.
Estoy probando este código, pero me da "Unauthorized", no sé bien por qué. El SID parece generarse correctamente. Por si alguien puede corregirlo:
#!/usr/bin/python
import urllib
USER=
PASSWD=
agent = urllib.URLopener()
# Pide un SID
answer=agent.open('https://www.google.com/accounts/ClientLogin', urllib.urlencode({'Email':USER, 'Passwd':PASSWD})).readlines()
SID=answer[0][4:].strip()
# toma el stream
agent.addheader('Cookie', 'SID=%s'%SID)
answer=agent.open('http://www.google.com/reader/api/0/stream/contents/user/-/state/com.google/reading-list').readlines()
print answer
En teoría así se accede a los últimos items. Obviamente no quiero los 100,000, pero si los 100 ó 200 últimos. El acceso por feeds para mí no tiene utilidad porque tendría que mirar los 115 uno a uno varias veces al día :D
firesign
15/02/2012, 08:20
GReader no tiene API efectivamente, pero hay una gente que se curró un poco de documentación (sacada por ingeniería inversa o vete a saber cómo) e hizo una librería para python. Yo me basé en ello e hice una para iOS, si quieres te puedo pasar el código ;)
Aunque obviamente tiene menos funcionalidad que la web de greader porque no se ha conseguido acceder a todo.
Pues estaria genial! :brindis:
Ya sabes mi direccion de Gmail, asi que me la puedes enviar ahi, a ver que consigo ver.
< - >
Estoy probando este código, pero me da "Unauthorized", no sé bien por qué. El SID parece generarse correctamente. Por si alguien puede corregirlo:
#!/usr/bin/python
import urllib
USER=
PASSWD=
agent = urllib.URLopener()
# Pide un SID
answer=agent.open('https://www.google.com/accounts/ClientLogin', urllib.urlencode({'Email':USER, 'Passwd':PASSWD})).readlines()
SID=answer[0][4:].strip()
# toma el stream
agent.addheader('Cookie', 'SID=%s'%SID)
answer=agent.open('http://www.google.com/reader/api/0/stream/contents/user/-/state/com.google/reading-list').readlines()
print answer
En teoría así se accede a los últimos items. Obviamente no quiero los 100,000, pero si los 100 ó 200 últimos. El acceso por feeds para mí no tiene utilidad porque tendría que mirar los 115 uno a uno varias veces al día :D
A ver si entre lo de Misato, esto, y los recursos que vienen con lo que yo estoy utilizando (vienen bastante mas URLs de acceso a recursos de Google Reader, pero ninguna forma de como usarlas), puedo conseguir algo.
En cualquier caso, esto me lo tomo con calma, ¿eh? Los programas que voy haciendo los hago en ratos libres. Si pudiera dedicarme mas a fondo si que me preocuparia mucho mas en que todo fuera "casi-perfecto". Pero entre mi trabajo habitual (que poco tiene que ver con esto), y el resto de temas de una vida de casado normal y corriente, lo mas que puedo dedicarle es una horilla al dia, y eso unos 3 o 4 dias a la semana...
Creo que ya que me he metido con Facebook intentare ahora dedicarle mas tiempo a intentar conseguir algo con Facebook, y a ratos mirare algo mas del Google Reader, a ver si consigo algo. Si yo me pongo con algo no paro hasta que me salga, pero tambien tengo que hacerlo con ganas y la verdad, cada vez tengo menos ganas de seguir con lo de Android (y mira que me gusta). Estoy esperando a ver si sale el iPad 3, y lo mismo cuando salga, si no se pasan de precio y coincide con el cobro del variable del año pasado, me lo pillo, y me meto definitivamente con iOS...
^MiSaTo^
15/02/2012, 08:22
Debo tener la lib en el otro ordena o algo porque aquí no la encuentro :(
De todos modos busca la librería python de la que te hablo, es en la que me basé
EDIT: si te vas a meter con iOS no lo hagas con un iPad. La mayoría de aplis las piden para iPhone, y a veces como extra tb para iPad (pero es automático que sea compatible en ambos). Yo me compraría un iPhone, pero no el 4S, el 3GS que es el mínimo soportado por Apple ;)
firesign
15/02/2012, 13:15
Debo tener la lib en el otro ordena o algo porque aquí no la encuentro :(
De todos modos busca la librería python de la que te hablo, es en la que me basé
EDIT: si te vas a meter con iOS no lo hagas con un iPad. La mayoría de aplis las piden para iPhone, y a veces como extra tb para iPad (pero es automático que sea compatible en ambos). Yo me compraría un iPhone, pero no el 4S, el 3GS que es el mínimo soportado por Apple ;)
Buscare esa libreria, pero vamos, para mi Python es como chino... :)
Ya tengo un iPhone 4, que le saque a mi empresa el año pasado utilizando mi poder de persuasion. En principio es de la empresa, pero vamos, por ahora no me lo han quitado.
Lo que mas me frena de ponerme mas en serio con iOS es no poder probarlo libremente en iPhone o iPad, sin tener el usuario de Apple. Lo que si es verdad es que ahora tengo uno de la empresa, pero es el usuario corporativo de la Junta de Andalucia, asi que no puedo tontear con el demasiado...
< - >
Por cierto, para Facebook he encontrado este SDK que parece bastante sencillo de manejar y te permite hacer casi de todo, de forma mucho mas facil que con el SDK oficial de Facebook:
http://www.easyfacebookandroidsdk.com/
Yo voy a intentar usar este.
¿Alguien ha podido mirar por qué mi código de arriba no funciona? :brindis:
firesign
15/02/2012, 16:23
¿Alguien ha podido mirar por qué mi código de arriba no funciona? :brindis:
Yo es que como te he comentado, de Python cero...
No hay que saber Python, sino comprobar que he enviado todo lo que necesita GReader ;)
A ver si lo he hecho bien:
- Primero me he conectado a https://www.google.com/accounts/ClientLogin con mi usuario y contraseña, y te devuelven un SID que es una cadena mu larga
- Ese SID se mete como cookie en todas las demás peticiones.
¿Me he dejado algo?
^MiSaTo^
15/02/2012, 18:32
La cookie está mal formada. Lo que no se es exáctamente qué parámetros le tienes que pasar, pero a mi mientras construía la librería de iOS me pasó varias veces ese error y era por eso.
Es posible que el token no se llame SID o algo similar, o que te falte algún parámetro en la misma.
Sorry pero no tengo el código aquí y no te se decir :(
Acabo de ver que ya no se usa más la autorización por cookies sino con la cabecera Authorization. Vamos, que el SID ya no se usa más. Aquí lo explican: http://stackoverflow.com/questions/3100078/google-reader-authentication-problem
El código queda al final así y se reciben los últimos items (aunque no he explorado mucho más):
#!/usr/bin/python
import urllib
USER=
PASSWD=
proxies = {} #{'http': 'http://127.0.0.1:8000'} # proxy para pruebas
agent = urllib.URLopener(proxies)
# Pregunta el SID, LSID y AUTH
answer=agent.open('https://www.google.com/accounts/ClientLogin', urllib.urlencode({'Email':USER, 'Passwd':PASSWD, 'service':'reader'})).readlines()
SID=answer[0][4:].strip()
LSID=answer[1][5:].strip()
AUTH=answer[2][5:]
# toma las ultimas entradas
#agent.addheader('Cookie', 'SID=%s'%SID)
agent.addheader('Authorization', 'GoogleLogin auth=%s'%AUTH)
answer=agent.open('http://www.google.com/reader/api/0/stream/contents/user/-/state/com.google/reading-list')
print answer.read()
^MiSaTo^
15/02/2012, 19:54
Como he dicho, en el proyecto de la librería de python viene explicado todo.
Y por supuesto no es documentación oficial y es muy posible que cambien la api de un día para otro (hace un año o así pasó, cambiaron todo el sistema de autenticarte, lo de la cookie y demás)
No haces más que hablar de la librería Python y yo no la encuentro :D
Solo he encontrado esto http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI que es una explicación de cómo conectar una librería Python de RSS a Google Reader. Fue el primer sitio que miré, pero la información de esa wiki está desactualizada tanto en las URLs que ponen como en el proceso de autenticación.
^MiSaTo^
15/02/2012, 20:00
No haces más que hablar de la librería Python y yo no la encuentro :D
Solo he encontrado esto http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI que es una explicación de cómo conectar una librería Python de RSS a Google Reader. Fue el primer sitio que miré, pero la información de esa wiki está desactualizada tanto en las URLs que ponen como en el proceso de autenticación.
Puede ser eso... pero juraría que habían hecho una librería en python y un port de la misma en PHP (porque lo de PHP lo he usado en algún proyecto, eso segurísimo)
He estado analizado el resultado del código anterior. Es un JSON con la información de la cuenta y los últimos items para leer. Con este código (que se añade al final del código anterior) se muestra en la consola una lista con la URL, el título y un resumen de la entrada. Con esto ya tienes suficiente para hacer tu lista, ¿no firesign? Solo falta convertir este código a java.
import json
info=json.loads(answer.read())
for item in info["items"]:
print item["alternate"][0]["href"]
if item.has_key("summary"):
print "%s (%s)\n=========================\n%s\n\n"%(item["title"], item["origin"]["title"], item["summary"]["content"])
else:
print "%s (%s)\n=========================\n%s\n\n"%(item["title"], item["origin"]["title"], item["content"]["content"])
firesign
15/02/2012, 21:04
Antes que nada, GRACIAS POR TODO!
Mañana le echo un vistazo mas en detalle. Seguramente para construir la lista de ultimas noticias si que haya teniendo titulo, URL y un resumen. Lo malo es que de esa forma no tienes ni del feed del que proviene originalmente, ni el contenido completo de la noticia, para construirtela en detalle. Porque yo la noticia en detalle no la construyo desde la URL completa de la noticia, sino del contenido del XML del feed.
A no ser que tambien venga algo que te sirva para eso o algo para acceder a lo que se necesita. Ya mañana lo mirare mejor, porque hoy ya no tengo ganas a estas horas y despues de todo el dia currando.
Si que he tenido oportunidad de echarle un vistazo a lo del Facebook y aunque ya he conseguido acceder al muro del usuario y sus contenidos, tanto con el SDK oficial como con el otro que puse antes, veo que es complejo y sobre todo parece bastante dificil acceder a las imagenes que suben los usuarios a Facebook en un tamaño decente...
Hay mucha más info que no he puesto ;) La url del feed original por ejemplo creo que sí que está, dentro de "origin"
firesign
18/02/2012, 21:01
Bueno, ya tengo funcionando las noticias no leidas y mezcladas obtenidas de Google Reader, con vuestra ayuda y con otras cosas que he estado probando, para obtenerlas directamente en XML para poder utilizar el resto de mis clases para procesarlas y no tener que hacer clases nuevas para Json.
Ahora lo que me tiene jodido es que no puedo marcar las noticias como leidas... En todos sitios pone que se hace de la misma forma, pero a mi no me funciona.
Este es el metodo que utilizo para hacerlo. Si alguno ve algo raro... :
private void markAsRead(String stream, String itemId) throws IOException {
org.jsoup.nodes.Document doc = Jsoup.connect("http://www.google.com/reader/api/0/edit-tag")
.header("Authorization", _AUTHPARAMS + authToken)
.data(
"a", "user/-/state/com.google/read",
"async", "true",
"s", stream, //feed/http://feeds.weblogssl.com/applesfera
"i", itemId, //tag:google.com,2005:reader/item/6c659ce0a6606b7f
"T", authToken
)
.userAgent("Newsboard")
.timeout(10000)
.post();
}
Lo he probado mediante Python y siempre obtengo un error 400, y con este metodo desde Java se queda muerto sin obtener respuesta nunca (incluso poniendo el timeout a 10 segundos, no se para a los 10 segundos, y nunca se obtiene nada... :loco:
Voy a estar fuera varios días. Lo digo porque sabes que me interesa, pero no puedo ayudarte :(
firesign
19/02/2012, 12:08
Voy a estar fuera varios días. Lo digo porque sabes que me interesa, pero no puedo ayudarte :(
OK, no te preocupes ;)
La verdad es que la aplicacion de esta forma gana mucho. Lo he hecho para cuando entres te muestre por defecto los ultimas noticias no leidas, de la mas reciente hacia atras. Y he puesto un boton que permite acceder a los feeds por separado, como hasta ahora.
Lo unico que me gustaria hacer es marcar como leido las noticias leidas en detalle, pero por ahora no lo consigo... :confused:
Al final os voy a tener que meter en los creditos :brindis:
Lo máximo que obtengo es un error 400, como tú, y leyendo las cabeceras de respuesta veo que la razón del error 400 es "X-Reader-Google-Bad-Token=true". Por internet he visto que esto sucede cuando el token (lo que pasamos con el parámtro T) está mal formado o caducado. Yo ese token lo obtengo llamando a http://www.google.com/reader/api/0/token y es un identificador muy corto tipo esto: "//nPSqgGnV0bAFIqnDUKfLIa"
firesign
23/02/2012, 14:00
Lo máximo que obtengo es un error 400, como tú, y leyendo las cabeceras de respuesta veo que la razón del error 400 es "X-Reader-Google-Bad-Token=true". Por internet he visto que esto sucede cuando el token (lo que pasamos con el parámtro T) está mal formado o caducado. Yo ese token lo obtengo llamando a http://www.google.com/reader/api/0/token y es un identificador muy corto tipo esto: "//nPSqgGnV0bAFIqnDUKfLIa"
Si, ese es el token que se utiliza, y asi es como se consigue. La verdad es que el token te vale para todo, asi que es bien raro que no sirva para marcar como leido...
Hace unos dias que no he podido mirar nada de la aplicacion. A ver si consigo algo de tiempo para dejar medio estable una nueva version, aunque no incluya lo de marcar como leido, o todo lo del Facebook que pretendia incluir... al menos que lleve algunas de las cosas nuevas.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.