2010-11-08 11 views
8

Je demande cette page pour obtenir les événements avec le mot-clérecherche événements Facebook et la pagination (API graphique)

"conference":https://graph.facebook.com/search?q=conference&type=event 

Cela fonctionne très bien.

Le problème est le retour en page:

"paging": { 
    "previous":"https://graph.facebook.com/search?q=conference&type=event&limit=25&since=2010-12-18T17%3A00%3A00%2B0000", 
    "next":"https://graph.facebook.com/search?q=conference&type=event&limit=25&until=2010-11-04T16%3A29%3A59%2B0000" 
} 

Il semble avoir plus d'événements avec « conférence », mais en demandant à ces deux déclarations paginations urls aucune donnée.

C'est bizarre parce que c'est la même chose pour n'importe quel mot-clé demandé, et les URL de pagination retournées par l'API Facebook semblent toujours retourner des données vides.

Est-ce que quelqu'un sait quel est le problème?

Merci

Répondre

1

Je pense que cela est une pratique courante dans Facebook Graph API. Je pense que si votre requête aboutit à un JSON non vide, ils vous donneront toujours la prochaine pagination, même si elle est vide. Je ne suis cependant pas sûr à 100%, parce que Facebook Graph API ne semble pas très bien documenté ... (par exemple, ils ont dit que nous pouvions modifier cette pagination mais sans expliquer clairement comment le faire).

6

J'ai rencontré une confusion similaire avec une requête sur les lieux. L'URL "suivante" s'est comportée exactement comme vous l'avez décrite.

Je pourrais demander des informations de localisation en utilisant une URL comme ceci:

https://graph.facebook.com/search?access_token=INSERT_TOKEN&type=place&center=55.8660,-4.2715&distance=150&limit=10 

Et rentrer JSON avec les 10 premières places, plus le fragment suivant ce qui laisse supposer l'existence d'params d'appel:

"paging": { 
     "next": "https://graph.facebook.com/search?access_token=INSERT_TOKEN&type=place&center=55.8660\u00252C-4.2715&distance=150&limit=10&offset=10" 

Frapper cette URL ne fonctionne pas. Mais j'ai trouvé une combinaison de paramètres de limite et de décalage qui m'a donné une radiomessagerie efficace.

limit=10 & offset not defined => first 10 results 
limit=20 & offset=10 => next 10 results 
limit=30 & offset=20 => next 10 results 
limit=40 & offset=30 => last 8 results (can stop here because less than 10 back) 
limit=50 & offset=40 => confirmation that there are no more results 

Je me rends compte que j'ai « limite » et « OFFSET » plutôt que la « limite » et « jusqu'à ce que » params que vous obtenez, mais vous pourriez nous l'espérons appliquer la même technique à savoir maintenir la limite incrémenter et inc la date/heure à celle de votre dernier résultat?

+1

Je l'ai utilisé cette méthode avec succès dans mon application pour quelques mois. Puis, au mois d'avril, j'ai commencé à recevoir des plaintes de clients que l'application ne fonctionnait pas. Il s'avère que vous ne pouvez plus compter sur le nombre limite de résultats que vous demandez, même s'il peut y avoir plus de résultats que la limite. Avez-vous rencontré ce problème? Je fais mes recherches de lieux. – Tenfour04

+0

Je n'ai rien fait de l'API FB depuis un moment donc je ne suis pas sûr, désolé. – stephen

+0

@ TenFour04 s'il vous plaît ma réponse ici pour une solution sur la façon d'obtenir la limite complète sur chaque requête: http://stackoverflow.com/questions/5023757/how-does-paging-in-facebook-javascript-api-works –

0

Semble facebook l'a changé récemment. est ici le correctif:

Pour un datetime retourné dans suivant et précédent comme "2011-01-18T08 \ u00253A42 \ u00253A35 \ u00252B0000", remplacer toutes les occurrences de "\ u0025" avec "%" et il devrait fonctionner bien.

Si vous remarquez le format datetime facebook, il est 2011-01-18T08: 42: 35 + 0000 (date acceptée par la fonction strtotime C)