通过 JSON 从报纸 API 获取最后 10 篇文章是可行的,但如何加载接下来的 10 篇文章?

问题描述 投票:0回答:3

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

出于性能目的,每个

request
仅发送最后 10 篇文章。

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

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

(当我阅读 API 文档时,我应该设置

offset
来获取下一篇文章,但它不起作用,我总是根据我的搜索查询得到相同的前 10 篇文章。)

按照

request
搜索最近 10 篇包含
keyword
frankfurt 的文章 并将
offset
设置为 10,当我再次发送
request
时,应该会向我发送接下来的 10 篇文章。

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

来自 API 文档:

默认搜索结果限制为 10 个匹配项。您可以使用 limit 参数增加该值。要迭代结果集,请重复您的请求,并将偏移参数设置为限制的倍数。

更新:

- (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;
    }
)
ios json offset
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 个结果。


0
投票

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

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


0
投票

没有任何代码,很难说。不过你的想法似乎不错。

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

© www.soinside.com 2019 - 2024. All rights reserved.