Closed GReaper closed 10 years ago
Actualizo - IMPORTANTE
He finalizado el Servlet
de actualización de datos y ya puedo decir cómo se envían los datos. Lo que voy a explicar corresponde al punto 2 del comienzo de la issue, donde se pone que falta por determinar cómo se enviará el parámetro tipo
y datos
.
I.- Parámetro tipo
Este parámetro es muy simple. Sus valores serán Strings
e indicarán la operación de actualización actual. Los valores aceptados son:
Ejemplo: conexion.agregarParametro("tipo", "etiquetas");
II.- Parámetro datos
Este parámetro será un String
. Concretamente, será el JSON que se haya generado al procesar los datos de Facebook pasado a String
(no será el mismo JSON que el recibido de Facebook).
Por supuesto, cada tipo de conexión sincronizará unos datos concretos y tendrá su propio formato interno de JSON a enviar.
Ejemplo para fijar el campo datos
: conexion.agregarParametro("datos", stringDatos);
Ahora bien, ¿Cómo se forma ese campo de datos?
Todos los JSON generados tendrán un campo único y común denominado listadatos
, que será una lista de JSOn que contendrá toda la información a sincronizar - una lista de elementos -.
Esto es, por ejemplo:
{ listadatos : [ ] }
Lo que cambiará en cada conexión es el contenido de esta lista. Para poner un formato común se hará lo siguiente:
String
a pesar de los tipos que haya declarados en las tablas de MySQLString
(es el único campo que no irá como String
)commentdata.commenttype
y likedata.liketype
). El servidor admitirá todos los Strings
pasados, pero, para que todo funcione, los únicos valores permitidos son los mencionados en los documentos del trust. Es decir:
commentdata.commenttype
: "photo" o "post"likedata.liketype
: "photo", "post", "page" o "comment"Por último, por sencillez, los JSON se generarán usando objetos JSONObject
, JSONArray
y demás elementos de la librería org.json
al igual que se hace al tomar las respuestas de servidor.
Para poner todo esto en conjunto, este sería un ejemplo de JSON inventado para sincronizar mensajes - por ejemplo -:
{ "listadatos" :
[
{ "id" : "abc" , "createdtime" : 12234 , "fromid" : "daf" , "toid" : "okams"},
{ "id" : "rtw" , "createdtime" : 12764 , "fromid" : "okf" , "toid" : "mfdoas"},
{ "id" : "sdfg6" , "createdtime" : 12454 , "fromid" : "adsf" , "toid" : "rtye"}
]
}
Como se puede ver, hay una lista general llamada "listadatos" que tiene una serie de JSON que son los recuperados de Facebook (corresponderían a cada conjunto de datos recuperado de FQL). Cada uno de estos grupos tiene la información de ese tipo de datos.
Otro ejemplo, esta vez para sincronizar amigos:
{ "listadatos" :
[
{ "userid" : "abc" , "friendid" : "def"},
{ "userid" : "abc" , "friendid" : "ghi"},
{ "userid" : "abc" , "friendid" : "jkl"}
]
}
Estos JSON son los que se generarán a partir de la respuesta de Facebook en la clase ParserRespuestasFacebook
.
Actualizo Podéis usar el código completado en #104 como modelo. Tened cuidado y no copiéis todo porque habrá cosas que cambien como los enumerados, fechas, etc.
Todos los puntos finalizados, cierro issue
Para el cálculo del trust es necesario disponer de bastante información de la red social. En esta issue se explicará el funcionamiento de la parte de obtención de dicha información y guardado en servidor. El cálculo del trust se abordará en otra diferente.
Servlet
de sincronización Para mantener los datos actualizados se creará un nuevoServlet
que permitirá a los clientes sincronizar los datos de los usuarios. EsteServlet
atenderá peticiones porPOST
en la URL<ssii_base>/sincronizar.do
y tendrá como parámetros:tipo
: será unenum
con valores aún por determinar y que indicará el tipo de datos que se están actualizando (amigos, mensajes, etc.).datos
: será unJSON
enviado comoString
que contendrá todos los datos a sincronizar. El formato dependerá del tipo de datos a sincronizar y aún está pendiente de decisión.ConectorRedSocial
denominadasincronizarDatosRedSocial
que se encargará de lanzar todas las peticiones a la red social concreta y la sincronización con servidor. Todo el proceso se realizará en segundo plano, en paralelo y de forma transparente al usuario.ConectorFacebook.sincronizarDatosRedSocial()
. Como se puede ver, lo que ocurre en ese caso es que se ha dividido la llamada en 9 subllamadas a las diferentes sincronizaciones.*
que se usaba en losSELECT
de SQL. La información a recuperar será exactamente la misma que se guardará en las bases de datos del servidor y que se corresponderá con la mencionada en la documentación sobre el trust proporcionada.onCompleted
). En este fragmento se tomará elJSON
de la respuesta (por supuesto, previa comprobación de los datos).com.ssii.clases.ParserRespuestasFacebook
. Aquí se definirán todas las funciones auxiliares (estáticas) como la que hay de ejemplo que recibirán losJSONObject
recuperados de las respuestas y devolverán unString
con la cadena exacta que se enviará al servidor en el campodatos
. Cada función de sincronización tendrá su propia función de parse enParserRespuestasFacebook
.ConectorFacebook.sincronizarAmigos
para que sirva de guía para comprender todo lo que he mencionado en los puntos anteriores y he generado el esqueleto de la funciónParserRespuestasFacebook.parseRespuestaAmigos
. También he creado la clase de conexión que se usará en todas las sincronizaciones de datos (ConectorFacebook.ConexionSincronizacionDatos
).