2010-11-08 3 views
2

Je joue avec le service Netflix odata pour mieux comprendre comment consommer les données d'odata.pager à travers les résultats de l'odata NetFlix

Dans VS 2010, j'ai ajouté une référence de service au service Odata NetFlix. J'ai ensuite écrit ce code qui renvoie seulement certaines des données. Je ai regardé l'uri généré pour l'appel et l'ai couru dans un navigateur. L'alimentation en atome retourne a cet élément à la fin

<link rel="next" href="http://odata.netflix.com:20000/v1/Catalog/Titles()/?$filter=ReleaseYear%20eq%202009&amp;$orderby=AverageRating%20desc&amp;$skiptoken=3.9D,'BVqRa'" /> 

Ceci est le lien qui va extraire l'ensemble suivant de données (paging effectuée par Netflix). Ma question est comment puis-je obtenir mon code pour accéder à ce lot de données suivant et le suivant?

Répondre

7

La requête peut être castée en DataServiceQuery, qui a une méthode appelée Execute qui retourne les résultats en tant que QueryOperationResponse qui a une méthode GetContinuation, qui retourne un objet continuation représentant le lien suivant. Un code difficile de passer par tous les titres pourrait ressembler à ceci:

var cat = new NetflixCatalog(new Uri("http://odata.netflix.com/v1/Catalog/")); 

var x = from t in cat.Titles 
     where t.ReleaseYear == 2009 
     select t; 
var response = (QueryOperationResponse<Title>)((DataServiceQuery<Title>)x).Execute(); 

while (true) 
{ 
    foreach (Title title in response) 
    { 
     Console.WriteLine(title.Name); 
    } 

    var continuation = response.GetContinuation(); 
    if (continuation == null) 
    { 
     break; 
    } 

    response = cat.Execute(continuation); 
} 
+0

Vitek, je suis en train de mettre en œuvre ce dans un WPF montrant le bouton suivant et précédent. Pourriez-vous s'il vous plaît me conseiller sur le même? –

+2

La pagination pilotée par le serveur est uniquement en avant. Donc, il ne peut vraiment obtenir la page suivante. Vous devriez vous souvenir de la page précédente vous-même. Peut-être que ce serait mieux si vous utilisiez une pagination pilotée par le client. Donc par exemple ~/Titles? $ Top = 10 & $ skip = 20 (ceci obtient la troisième page de taille 10). Si votre valeur supérieure est inférieure à la limite de taille de page sur le serveur, vous ne verrez pas les suites du tout. Et vous pouvez facilement calculer l'URL à frapper pour vos boutons précédents et suivants. –

Questions connexes