подкачка результатов NetFlix odata - PullRequest
2 голосов
/ 08 ноября 2010

Я играю со службой оддатов Netflix, чтобы лучше понять, как использовать данные оддата.

В VS 2010 я добавил ссылку на службу для службы данных NetFlix. Затем я написал этот код, который возвращает только некоторые данные.

        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;

        foreach (Title title in x)
        {
            ProcessTitle(title);
        }

Я посмотрел на URI, сгенерированный для звонка, и запустил его в браузере. Возвращаемый фид атома имеет этот элемент в конце

  <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'" />

Это ссылка, которая будет извлекать следующий набор данных (подкачка осуществляется Netflix). У меня вопрос, как мне получить свой код для доступа к следующей партии данных, следующей и т. Д .?

1 Ответ

7 голосов
/ 08 ноября 2010

Запрос может быть приведен к DataServiceQuery, у которого есть метод Execute, который возвращает результаты в виде QueryOperationResponse, у которого есть метод GetContinuation, который возвращает объект продолжения, представляющий следующую ссылку. Примерный код для прохождения всех заголовков может выглядеть так:

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);
}
...