gpt4 book ai didi

ios - 一次解析两个 (YouTube) JSON 链接

转载 作者:行者123 更新时间:2023-12-03 06:23:51 26 4
gpt4 key购买 nike

我在一次解析两个 JSON url 时遇到问题。 YouTube 每个请求只允许 50 个结果,所以我想添加一个起始索引为 51 的第二个,以继续请求。

NSString *urlAsString  = @"https://gdata.youtube.com/feeds/api/playlists/PLgw1uRYia2CRvuF4Y3KLuvFSWY6lmuY8T?v=2&alt=json&max-results=50&orderby=published";
NSString *urlAsString2 = @"https://gdata.youtube.com/feeds/api/playlists/PLgw1uRYia2CTSBBNrTDjdEcswVFjPkCr9?v=2&alt=json&max-results=50&orderby=published";

结合其中两个,我尝试了这个:
NSString *finallink = [NSString stringWithFormat:@"%@,%@", urlAsString, urlAsString2];

然后使用 Afnetworking 发出实际请求,我补充说:
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:finallink parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

NSDictionary *feed = [[NSDictionary alloc] initWithDictionary:[responseObject valueForKey:@"feed"]];
videoArray = [NSMutableArray arrayWithArray:[feed valueForKey:@"entry"]];
[self.videoMetaData addObjectsFromArray:[videoArray valueForKeyPath:@"title.$t"]];

operation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

[self.videolist reloadData];
[self->activityind startAnimating];



NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Videos"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
NSLog(@"Error: %@", error);
}];

由于某种原因,这不起作用。我收到此错误:
Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" 

可能有什么问题?!

最佳答案

如评论中所述,此代码失败,因为您试图检索两个相互连接的 URL 的结果。现在设置的方式相当于尝试访问http://google.com,http://google.com在网络浏览器中,这当然会失败。

相反,解决方案是分批检索结果,一个接一个。这是一种方法:

  • 编写一个在给定偏移量处检索 YouTube 结果的方法。如果要检索从 51 开始的所有链接,那么一个好主意是有一个方法,该方法采用偏移量并在完成 block 中返回结果。
  • 编写另一种方法,该方法可以使用前一种方法来检索整个结果列表。这需要向 YouTube 发送多个网络请求,每批 50 个请求一个,然后在某处收集结果。

  • 我在您的代码示例中注意到了其他几个问题。一个是您在网络请求的成功 block 中设置了一个新的请求和响应序列化程序——相反,您应该在应用程序的某个地方设置一次,因为在每个请求之后重新分配它们效率低下。 AFHTTPRequestOperationManager确实会创建这些的默认实例,因此您可以完全不设置它们。

    另一个潜在问题是您在失败 block 中显示警报 View 。因为 AFNetworking 默认在后台线程上执行网络请求(据我记忆),您可能会遇到一些奇怪的问题(通常的症状是您的 UI 将在几秒钟内不显示)。 Apple 要求在主线程上调用 UI 相关的方法。

    关于ios - 一次解析两个 (YouTube) JSON 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29977328/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com