【问题标题】:Get the last 10 articles via JSON from newspaper API works but how to load the next 10?通过 JSON 从报纸 API 作品中获取最后 10 篇文章,但如何加载下 10 篇?
【发布时间】:2013-01-10 14:18:58
【问题描述】:

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

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

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

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

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

request 之后搜索包含keyword frankfurt 的最后10 篇文章 并将offset 设置为 10,当我再次发送 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;
    }
)

【问题讨论】:

    标签: iphone json api offset


    【解决方案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 个。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 在我回答了我的问题后看到了这篇文章。你说的对。我必须为偏移量使用不同的数字才能使其正常工作。 (具体来说,第一次调用limit=10 offset=10,第二次调用:limit=10 offset=20等等......)
      • 这是一个幸运的猜测。真的,您应该接受自己的答案。我不需要那么严重的互联网点;)
      【解决方案3】:

      没有任何代码,很难说。但是您的想法似乎不错。

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

      【讨论】:

      • 嗨 Geraud,刚刚用codeconsole output 更新了我的原始帖子。尽管如此,我设置了一个offset 我总是得到相同的JSON 响应。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2018-09-07
      • 1970-01-01
      • 2015-10-12
      • 2019-11-12
      • 1970-01-01
      相关资源
      最近更新 更多