ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] GitHub : Rate Limit Exceeded 해결하기
    Swift 2022. 11. 22. 06:02

    프로젝트에서 깃헙에 요청 보내서 유저의 팔로워 정보를 받는 걸 하고 싶다 

    하지만 1시간에 60번의 요청만 보낼 수 있단다

    그래서 토큰을 넣어서 요청을 보내줘야한다

     

    토큰 발급 받는 방법 👇

    settings 클릭

    Developer settings 클릭

    fine-grained tokens 클릭

    Followers 에서 read-only 클릭

    이후에는 발급 받고 발급 받은 토큰 키값 잘 저장해두자

    프로젝트 코드 👇

    class NetworkManager {
        static let shared = NetworkManager()
        let baseURL = "https://api.github.com/users/"
    
        private init() {}
    
        func getFollowers(for username: String, page: Int, completion: @escaping (Result<[Follower], GFError>) -> Void) {
    
            let username = 깃헙토큰발급받은아이디
            let token = 깃헙에서받은토큰값
            let loginString = String(format: "%@:%@", username, token)
            let loginData = loginString.data(using: String.Encoding.utf8)!
            let base64LoginString = loginData.base64EncodedString()
    
            let endpoint = baseURL + "\(username)/followers?per_page=100&page=\(page)"
            guard let url = URL(string: endpoint) else {
                completion(.failure(.invalidUsername))
                return
            }
    
            var request = URLRequest(url: url)
            request.addValue(base64LoginString, forHTTPHeaderField: "Authorization")
    
            let task = URLSession.shared.dataTask(with: request) { data, response, error in
                if let _ = error {
                    completion(.failure(.unableToComplete))
                }
                guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {
                    completion(.failure(.invalidResponse))
                    return
                }
                guard let data = data else {
                    completion(.failure(.invalidData))
                    return
                }
                do {
                    let decoder = JSONDecoder()
                    decoder.keyDecodingStrategy = .convertFromSnakeCase
                    let followers = try decoder.decode([Follower].self, from: data)
                    completion(.success(followers))
                } catch {
                    completion(.failure(.invalidData))
                }
            }
            task.resume()
        }
    }
Designed by Tistory.