使用Stack Exchange API检索多个ID时出错

时间:2017-07-06 15:03:19

标签: swift stackexchange-api

使用Stack Exchange 2.2 API时,使用post_ids检索数据时遇到了障碍。我的结果不完整。

根据the online documents for the posts/{ids} interface, 我应该能够检索30个问题。 (它说高达100,但其他查询最多只有30,所以我认为这也是。)

但是,使用此查询(“查询1”):

/2.2/posts/44697152;44725527;44740511;44740358;44746963;44744722;44752663;44751224;44750591;44768116;44768073;44766268;44762034;44763620;44763575;44763124;44778755;44782321;44792568;44791709;44791955;44801095;44800945;44808174;44809993;44801579;44838390;44872388;44853254;44850293

我准确地找到了3个条目,分别为:44850293; 44872388;和44853254。

  

(lldb)po结果

     

[“items”:[

     

[“creation_date”:2017-06-30 15:41:31   + 0000,“link”:How to unwrap the content value from XML in Objective-C,“得分”: - 1,“post_type”:Wednesday.PostType.question,“last_activity_date”:   2017-07-03 13:57:21 +0000,“所有者”:[“链接”:   https://www.gravatar.com/avatar/e0616f34ea00d07842b7e7886fd7abc8?s=128&d=identicon&r=PG&f=1,   “user_type”:Wednesday.User.UserType.registered,“user_id”:7707593,   “display_name”:“史蒂文”,“声誉”:18,“accept_rate”:75],   “last_edit_date”:2017-07-03 07:41:31 +0000],

     

[ “CREATION_DATE”:   2017-07-02 15:25:37 +0000,“链接”:   How to collect the return value of a function (Swift 3),“得分”:-4,“post_type”:   Wednesday.PostType.question,“last_activity_date”:2017-07-02 15:43:58   +0000,“所有者”:[“链接”:https://lh6.googleusercontent.com/-NIYQgyduM8w/AAAAAAAAAAI/AAAAAAAAAaQ/e0IACRo6xbI/photo.jpg?sz=128,   “user_type”:Wednesday.User.UserType.registered,“user_id”:6298390,   “display_name”:“Dorian Brown”,“声望”:18,“accept_rate”:100],   “last_edit_date”:2017-07-02 15:43:58 +0000],

     

[ “CREATION_DATE”:   2017-06-30 19:02:07 +0000,“链接”:   swift - approach for tangled/cross-cutting code (logging, analytics, etc.),“得分”:0,“post_type”:   Wednesday.PostType.question,“last_activity_date”:2017-07-01 01:26:24   +0000,“所有者”:[“链接”:https://www.gravatar.com/avatar/e819b2408e9528b895dc192aee309912?s=128&d=identicon&r=PG&f=1,   “user_type”:Wednesday.User.UserType.registered,“user_id”:108546,   “display_name”:“ravun”,“reputation”:743,“accept_rate”:86],   “last_edit_date”:2017-07-01 01:26:24 +0000]

     

],

     

“quota_remaining”:221,

     

“quota_max”:300,“has_more”:false]

注意“has_more”:false - 因此API认为它已提供了所有信息。

使用此查询(“查询2”):

/2.2/posts/44218623;44217105;44262473;44272520;44309003;44305981;44319988;44318730;44330107;44329638;44334480;44350820;44354106;44358187;44374565;44374073;44365138;44377970;44388874;44395390;44397545;44401141;44399160;44408394;44454372;44446876;44458876;44461402;44468764;44650412

我找回0个条目。 这些都是有效的ID

  

(lldb)po结果

     

[“quota_max”:300,   “quota_remaining”:224,   “has_more”:false]

以下是一些用于调用的Swift 3.2代码的示例(我不相信swift代码是问题):

let response: String = try get(url)
guard let json = try parseJSON(response) as? [String:Any] else {
    throw APIError.notDictionary(response: response)
}

open func get(_ url: String) throws -> (Data, HTTPURLResponse) {
    guard let nsUrl = URL(string: url) else {
        throw RequestError.invalidURL(url: url)
    }
    var request = URLRequest(url: nsUrl)
    request.setValue(String(request.httpBody?.count ?? 0), forHTTPHeaderField: "Content-Length")
    return try performRequest(request)
}

如何使用2.2 API检索30个帖子的列表? 有没有更新的API?

1 个答案:

答案 0 :(得分:1)

最重要的是 API不会返回已删除的帖子。有a feature request for this,您可能想要提升它。

然而deleted posts return in the API is buggy,因此您可能会暂时查看一些已删除的帖子,以及deleted posts that you're not supposed to be able to

另请注意,作为小于10K的用户,理论上除非您是作者,否则您永远不应该看到已删除的帖子。

your doc link中,您有3个ID(3743,327738和339426):

这可能是一个严重的错误。

在“查询1”中,除了最后3个帖子之外的所有帖子都已删除,因此 API会返回正确的条目。

在“查询2”中,所有30个帖子都会被删除,因此 API无效,无法返回任何内容。

Re:“有没有更新的API?”

没有。不正式。
非正式地,工作似乎已经从3.0版本开始,但它还没有准备好使用。