1

使用 iPhone 应用程序从网络上获取报纸文章。

出于性能目的,仅发送最后 10 篇文章request

一切都按预期工作,但是当用户向下滚动并想要阅读更多内容时,我如何获得接下来的 10 篇文章?

  • 工作:首先request给我文章:1 - 10
  • 不工作Request再次发送应该给我文章:11-20(通过设置offset

(当我阅读 API 文档时,我应该设置一个offset来获取下一篇文章,但它不起作用,我总是根据我的搜索查询得到相同的前 10 篇文章。)

以下request搜索包含keyword frankfurt的最后 10 篇文章,并设置offset10 篇,当我request再次发送时,它应该向我发送接下来的 10 篇文章。

http://api.zeit.de/content?q=frankfurt&limit=10&offset=10&api_key=MY_API_KEY

来自 API 文档:默认情况下,搜索结果限制为 10 个匹配项。您可以使用 limit 参数增加此值。要遍历结果集,请重复您的请求,并将 offset 参数设置为限制的倍数。

更新:

- (IBAction)runBtnTapped:(id)sender
{
    NSError *error;

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://api.zeit.de/content?q=frankfurt&fields=teaser_title%20AND%20release_date&limit=5&offset=5&sort=release_date%20desc&api_key=123456789"]];

    NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

    NSArray *array = dictFromData[@"matches"];
    NSLog(@"%@", array);
}

控制台输出:

2013-01-10 17:21:39.261 ZEITreisen[94644:c07] (
        {
        "release_date" = "2013-01-03T06:00:00Z";
        "teaser_title" = "Im Stich gelassen";
    },
        {
        "release_date" = "2012-12-28T13:18:58Z";
        "teaser_title" = "Serbiens Nachwuchs baut den Weg nach Europa";
    },
        {
        "release_date" = "2012-12-27T10:18:07Z";
        "teaser_title" = "Das Fu\U00dfballgott bestrafte Hoffenheim";
    },
        {
        "release_date" = "2012-12-27T06:00:00Z";
        "teaser_title" = "Sind Fitschen und Jain die Richtigen f\U00fcr 2013?";
    },
        {
        "release_date" = "2012-12-27T06:00:00Z";
        "teaser_title" = Sparen;
    }
)
2013-01-10 17:21:43.447 ZEITreisen[94644:c07] (
        {
        "release_date" = "2013-01-03T06:00:00Z";
        "teaser_title" = "Im Stich gelassen";
    },
        {
        "release_date" = "2012-12-28T13:18:58Z";
        "teaser_title" = "Serbiens Nachwuchs baut den Weg nach Europa";
    },
        {
        "release_date" = "2012-12-27T10:18:07Z";
        "teaser_title" = "Das Fu\U00dfballgott bestrafte Hoffenheim";
    },
        {
        "release_date" = "2012-12-27T06:00:00Z";
        "teaser_title" = "Sind Fitschen und Jain die Richtigen f\U00fcr 2013?";
    },
        {
        "release_date" = "2012-12-27T06:00:00Z";
        "teaser_title" = Sparen;
    }
)
4

3 回答 3

1

找到了解决方案。Offset每次重新调用它时都必须增加它才能起作用。

例子:

第一次通话:(无偏移)

http://api.zeit.de/content?q=frankfurt&fields=teaser_title%20AND%20release_date&limit=5&sort=release_date%20desc&api_key=123456789

下次调用 API 时,只需将偏移量加 5 即可。

http://api.zeit.de/content?q=frankfurt&fields=teaser_title%20AND%20release_date&limit=5&offset=5&sort=release_date%20desc&api_key=123456789

注意:第二个请求会留下前 5 个搜索结果,并提供接下来的 5 个。

于 2013-01-10T16:51:45.477 回答
0

没有任何代码,很难说。但是你的想法似乎很好。

您的请求中可能有错误(您是否记录了它们以查看参数是否设置正确,没有任何拼写错误?响应如何?)或者 API 可能有错误。在这种情况下,您应该直接联系提供商。

于 2013-01-10T14:52:47.563 回答
0

您可能会遇到 API 错误地将某些参数优先于其他参数以忽略您的偏移量的实例。尝试删除限制,因为您使用的是默认值,或者尝试在限制和偏移之间使用不同的数字。可能会有一些糟糕的比较导致您的偏移量无法被接受。如果没有 API 文档,很难说可能出了什么问题。如果修改您的查询字符串不起作用,我会支持@Geraud.ch 的建议:联系 API 提供商。

编辑刚刚意识到您发布了实际的 URL。我现在正在搜索文档。

于 2013-01-10T16:50:12.293 回答