2012-06-05 2 views
1

Si je fais une requête pour quelque chose qui a un grand nombre d'objets (comme si vous aviez 10000 amis ou 10000 photos dans un album), le SDK C# Facebook suit-il automatiquement le "Paging: Next "Liens pour moi, ou y at-il quelque chose que je dois faire? J'ai regardé leur code et je ne vois aucune mention de pagination, mais je l'aurais raté.C# Facebook SDK et pagination automatique

Notez que je ne parle pas des demandes de traitement par lots; Je parle d'un simple api.Get ("/ me/friends") où Facebook décide qu'il y a trop d'objets à mettre en une seule réponse. Malheureusement je n'ai pas assez de compte pour tester les résultats ...

Répondre

1

La pagination est toujours à la portée de l'utilisateur du SDK, quel que soit le SDK pour Facebook. Je ne pense pas qu'ils aient fait preuve de créativité pour l'ajouter, ou peut-être qu'il y a des raisons juridiques pour lesquelles ils ne l'ont pas fait.

1

Merci. Au cas où cela aiderait quelqu'un d'autre, voici le code que j'ai utilisé. Depuis que je sais à partir du "compte" de l'album combien d'images à attendre, je les demande juste par lots jusqu'à ce compte. Ce serait plus compliqué pour les scénaristes où vous ne savez pas à l'avance combien d'objets vous récupérerez, mais je n'en ai pas encore eu besoin.

const long maxBatchSize = 50; 
for (long q = 0; q < album.Count; q += maxBatchSize) 
{ 
    var facebook = new FacebookClient(FacebookSession.AccessToken); 
    facebook.GetCompleted += new EventHandler<FacebookApiEventArgs>(GetPhotosCallback); 

    long take = album.Count - q; 
    if (take > maxBatchSize) 
     take = maxBatchSize; 

    dynamic parameters = new ExpandoObject(); 
    parameters.limit = take; 
    parameters.offset = q; 

    facebook.GetAsync("/" + album.Id + "/photos", parameters, null); 
} 
0

Si vous regardez les données Facebook retourne il y a élément généralement la pagination dans les résultats. L'élément de recherche contient les URL suivantes et précédentes. Ces URL sont créées par Facebook et le "suivant" peut être utilisé pour récupérer plus d'informations. Ci-dessous un exemple des jetons pour/moi/messages -request:

{ 
data: [ ... ], 
"paging": { 
    "previous": "https://graph.facebook.com/6644332211/posts?limit=25&since=1374648795", 
    "next": "https://graph.facebook.com/6644332211/posts?limit=25&until=1374219441" 
    } 
} 

Si vous souhaitez automatiser la récupération de tous les éléments, vous pouvez choisir les paramètres pertinents de l'URL « suivant » et de les transmettre le Facebook SDK obtenir la méthode.

Les paramètres pertinents que vous devez sélectionner dépendent du type d'informations que vous récupérez. Dans les messages vous avez seulement le "jusqu'à", pour les checkins je peux voir aussi quelque chose appelé pagingtoken.