1

ミートアップの API からイベントのリストを取得しようとしています。1回しかリクエストできず、200回のリクエストに制限されているため、複数回リクエストするとクラッシュします。グループを取得してから、「urlName」API 呼び出しを使用して、そのグループのイベントを取得しています。その結果、多数のミートアップ グループからの一連のイベントが作成されます。これが私のコードです。

func getEventsFromMeetup(complete: (groups: [Meetup], succes: Bool) -> Void) {

    var currentUserInterests = [String]()
    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: config)
    let recommendedBaseUrl = "https://api.meetup.com/recommended/groups?key=\(meetupAPIKey)"
    let url = NSURL(string: recommendedBaseUrl)
    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "GET"
    session.dataTaskWithRequest(request) { (data, response, error) in

        guard error == nil else {
            print(error)
            complete(groups: [Meetup](), succes: false)
            return
        }

        guard let data = data else {
            print("Error with data")
            complete(groups: [Meetup](), succes: false)
            return
        }

        do {
           let json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as! [NSDictionary]
            var groups = [Meetup]()
            CurrentUserFM.sharedInstance.getCurrentUserInterests { (interests) in
                currentUserInterests = interests
                var ints = [String]()
                print(json.count)
                for j in json {
                    let m = Meetup(data: j)
                    ints.append(m.name!)
                    if let i = m.interestName {
                        if currentUserInterests.contains(i) {
                            groups.append(m)
                        }
                    }
                    print("ints: \(ints.count)")
                    print("json: \(json.count)")
                    if Int(ints.count) >= Int(json.count) {
                        dispatch_async(dispatch_get_main_queue(), { 
                            complete(groups: groups, succes: true)
                            return
                        })
                    }
                }
            }
        }catch {
            print(error)
        }
    }.resume()
}

func getEventsForGroups(completionHandler: (meetupEvents: [MeetupEvent]) -> ()) {
    self.getEventsFromMeetup { (groups, success) in
        var meetupEvents1 = [MeetupEvent]()
        var ints = [String]()
        for group in groups {
            let eventBaseUrl = "https://api.meetup.com/\(group.urlname!)?key=\(meetupAPIKey)"
            let url = NSURL(string: eventBaseUrl)
            let request = NSMutableURLRequest(URL: url!)
            let config = NSURLSessionConfiguration.defaultSessionConfiguration()
            let session = NSURLSession(configuration: config)

            session.dataTaskWithRequest(request, completionHandler: { (data, reponse, error) in
                guard error == nil else {
                    print(error)
                    return
                }

                guard let data = data else {
                    print("Error with data")
                    return
                }

                do {
                    let json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)
                    let m = MeetupEvent()
                    if let name = json["name"] as? String {
                        m.name = name
                    }
                    if let link = json["link"] as? String {
                        m.link = link
                    }
                    if let interestName = group.name {
                        m.interestName = interestName
                    }
                    if let image = json["key_photo"]??["thumb_link"] as? String {
                        m.image = image
                    }

                    meetupEvents1.append(m)
                    ints.append("1")
                    if Int(ints.count) >= Int(groups.count) {
                        dispatch_async(dispatch_get_main_queue(), {
                            completionHandler(meetupEvents: meetupEvents1)
                            return
                        })
                    }
                }catch {
                    print(error)
                }
            }).resume()
        }
    }
}

アプリがミートアップ コールでクラッシュしないように、グループからイベントを取得する方法について何か提案はありますか?

4

0 に答える 0