使用Stack Exchange 2.2 API时,使用post_ids
检索数据时遇到了障碍。我的结果不完整。
根据the online documents for the posts/{ids}
interface,
我应该能够检索30个问题。 (它说高达100,但其他查询最多只有30,所以我认为这也是。)
但是,使用此查询(“查询1”):
我准确地找到了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”):
我找回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?
答案 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版本开始,但它还没有准备好使用。