2011-10-29 12 views
9

que estoy tratando de conseguir todos los mensajes de correos utilizando restfb, mi código es el siguiente¿Cómo se ha podido recuperar más de 25 mensajes de correos

public Connection<Post> publicSearchMessages(Date fromDate, Date toDate) { 
    Connection<Post> messages = publicFbClient.fetchConnection("search", 
      Post.class, 
      Parameter.with("q", "Watermelon"), 
      Parameter.with("since", fromDate), 
      Parameter.with("until", toDate), 
      Parameter.with("type", "post")); 

    return messages; 
} 

Esto sólo da últimos mensajes de correos 25.

Parameter.with ("límite", 100)

si fijo parámetro de límite, da 100 mensajes pero no quieren limitar a ir a buscar los mensajes de correo. Entonces,

¿De todos modos puedo obtener una lista completa de los mensajes de publicación que coinciden con los criterios de búsqueda sin establecer el parámetro de límite?

+0

El conjunto predeterminado se devuelve 25 para todas las consultas. Deberá usar el parámetro de límite para ir más allá. –

+0

Creo que tiene que lidiar con 'limit' porque FB no le permitirá aumentar la carga de sus máquinas al limitar el tamaño del resultado. – micfra

+0

sí, hay una manera ... – beinghuman

Respuesta

2

No hay forma de obtener resultados ilimitados de FB. El límite predeterminado está establecido en 25. Como sabe, puede cambiar esto usando el parámetro limit. No he encontrado un límite superior para buscar límites en la web. Tal vez, puede establecerlo en una cantidad muy alta.

5

Quizás puedas intentar usar un bucle. FB no puede obtener más de 1000 cada vez, por lo que puede usar el ciclo para obtener los feeds completos. Utilice el desplazamiento de la siguiente manera:

Parameter.with("limit", 1000)); 
Parameter.with("offset", offset)); 

Offset será una variable y su valor será 1000,2000,3000 ...

0

Como he comprobado recientemente, usted no tiene que especificar nada. clase de conexión implementa Iterable de esta manera:

  • fetch 25 resultados
  • verificación hasNext si hay siguiente elemento a procesar
  • si no, va a recuperar la página siguiente de 25 resultados

Así básicamente todo lo que necesita hacer es esto:

Connection<Post> messages = publicFbClient.fetchConnection("search", 
     Post.class, 
     Parameter.with("q", "Watermelon"), 
     Parameter.with("since", fromDate), 
     Parameter.with("until", toDate), 
     Parameter.with("type", "post")); 

for (List<Post> feedConnectionPage : messages) { 
     for (Post post : myFeedConnectionPage) { 
       // do stuff with post 
     } 
} 

Si desea tener algún tipo de método que devuelva Es muy cuidadoso, porque puede devolver miles de resultados y rastrearlos puede llevar algo de tiempo (de segundos a minutos o incluso horas) y la matriz de objetos resultantes será muy grande. La mejor idea es usar alguna llamada asincrónica y verificar los resultados del método periódicamente.

Aunque parece que el parámetro "desde" se ignora. Las publicaciones se obtienen de la más reciente a la más antigua y creo que de alguna manera se omite este parámetro cuando se hace la búsqueda.

esperanza I hecho que sea más claro para ti :)

0

Tenemos un objeto iterador en Post. Entonces podemos hacerlo así:

Connection<Post> messages = publicFbClient.fetchConnection(...) ; 
someMethodUsingPage(messages); 
    while (messages.hasNext()) { 
     messages = facebookClient.fetchConnectionPage(messages.getNextPageUrl(), Post.class); 
     someMethodUsingPage(messages); 
    } 

Luego en cada mensaje tendremos los próximos 25 mensajes.

Cuestiones relacionadas