ios - ट्विटर मित्र सूची प्राप्त करें?




swift twitter (2)

क्योंकि इस मित्र / सूची एपीआई को मित्रों की सूची लाने के लिए प्रमाणीकरण की आवश्यकता होती है।

मुझे ट्विटर मित्रों / सूची एपीआई में Bad Authentication data प्रतिक्रिया मिल रही है। लॉगिन करते समय मुझे उपयोगकर्ता नाम, स्क्रीन का नाम, ओटोटोकैन और ओर्डोटोकैनसेरेट मिल रहा है।

func loadFollowers(userid:String) {

    //let twapi = "https://api.twitter.com/1.1/followers/list.json?cursor=-1&user_id=\(session)&count=5000"
    let twapi = "https://api.twitter.com/1.1/friends/list.json?cursor=-1&user_id=\(userid)&count=10"
    let url2 = URL(string: twapi)!
    print(url2)
    URLSession.shared.dataTask(with: url2, completionHandler: { (data, response, error) in

    //UIApplication.shared.isNetworkActivityIndicatorVisible = false
        do {
            let userData = try JSONSerialization.jsonObject(with: data!, options:[])
            print(userData)
        } catch {
            NSLog("Account Information could not be loaded \(error)")
        }
    }).resume()
}

आउटपुट:

{
"errors": [
    {
        "code": 215,
        "message": "Bad Authentication data."
    }
]
}

friends/list.json API में भेजने के लिए आवश्यक पैरामीटर क्या हैं। इस दस्तावेज़ में उन्होंने दिए गए सभी पैरामीटर वैकल्पिक हैं। https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list


स्विफ्ट 4.2 में, Xcode 10.1 और iOS 12.1 है

अंत में मुझे इसके लिए समाधान मिल गया। यहां पहले हमें प्राधिकरण की आवश्यकता है फिर दोस्तों की सूची एपीआई को लागू करने की आवश्यकता है।

शुद्ध स्विफ्ट कोड उपलब्ध नहीं है। लेकिन मैंने शुद्ध स्विफ्ट में लागू किया।

यदि आप ट्विटर से दोस्त / सूची डेटा प्राप्त करना चाहते हैं तो आपको दो एपीआई का उपयोग करने की आवश्यकता है।

1) oauth2 / टोकन एपीआई

2) दोस्तों / सूची एपीआई

Oauth2 / token api में आप टोकन एक्सेस कर सकते हैं, क्योंकि आपको दोस्तों की सूची के लिए एक्सेस टोकन की आवश्यकता है। और आपको यूजर आईडी, स्क्रीन नाम चाहिए

लेकिन यहां आपको एक महत्वपूर्ण बिंदु याद रखना चाहिए

1) पहले टोकन एक्सेस के लिए oauth2 / token api का उपयोग करें।

2) एक्सेस आईडी पाने के बाद यूजर आईडी और स्क्रीन नाम के लिए ट्विटर लॉगइन एप का उपयोग करें।

3) अब दोस्तों / सूची एपीआई का उपयोग करें

यहां पहले अगर आप ट्विटर लॉगिन का उपयोग करते हैं तो oauth2 / टोकन एक्सेस के लिए टोकन एपि , आप खराब प्रमाणीकरण डेटा त्रुटि की तरह प्राप्त कर सकते हैं। तो आप कृपया क्रम में 3 चरणों से ऊपर का पालन करें।

1) टोकन कोड प्राप्त करें (oauth2 / टोकन एपीआई):

func getAccessToken() {

    //RFC encoding of ConsumerKey and ConsumerSecretKey
    let encodedConsumerKeyString:String = "sx5r...S9QRw".addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)!
    let encodedConsumerSecretKeyString:String = "KpaSpSt.....tZVGhY".addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)!
    print(encodedConsumerKeyString)
    print(encodedConsumerSecretKeyString)
    //Combine both encodedConsumerKeyString & encodedConsumerSecretKeyString with " : "
    let combinedString = encodedConsumerKeyString+":"+encodedConsumerSecretKeyString
    print(combinedString)
    //Base64 encoding
    let data = combinedString.data(using: .utf8)
    let encodingString = "Basic "+(data?.base64EncodedString())!
    print(encodingString)
    //Create URL request
    var request = URLRequest(url: URL(string: "https://api.twitter.com/oauth2/token")!)
    request.httpMethod = "POST"
    request.setValue(encodingString, forHTTPHeaderField: "Authorization")
    request.setValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type")
    let bodyData = "grant_type=client_credentials".data(using: .utf8)!
    request.setValue("\(bodyData.count)", forHTTPHeaderField: "Content-Length")
    request.httpBody = bodyData

    let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error
        print("error=\(String(describing: error))")
        return
        }

        let responseString = String(data: data, encoding: .utf8)
        let dictionary = data
        print("dictionary = \(dictionary)")
        print("responseString = \(String(describing: responseString!))")

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(String(describing: response))")
        }

        do {
            let response = try JSONSerialization.jsonObject(with: data, options: []) as! Dictionary<String, Any>
            print("Access Token response : \(response)")
            print(response["access_token"]!)
            self.accessToken = response["access_token"] as! String

            self.getStatusesUserTimeline(accessToken:self.accessToken)

        } catch let error as NSError {
            print(error)
        }
    }

    task.resume()
}

आउटपुट:

{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAA............xqT3t8T"}

2) ट्विटर कोड के साथ लॉगिन करें

@IBAction func onClickTwitterSignin(_ sender: UIButton) {

    //Login and get session
    TWTRTwitter.sharedInstance().logIn { (session, error) in

        if (session != nil) {
            //Read data
            let name = session?.userName ?? ""
            print(name)
            print(session?.userID  ?? "")
            print(session?.authToken  ?? "")
            print(session?.authTokenSecret  ?? "")

             // self.loadFollowers(userid: session?.userID ?? "")

            //Get user email id
            let client = TWTRAPIClient.withCurrentUser()
            client.requestEmail { email, error in
                if (email != nil) {
                    let recivedEmailID = email ?? ""
                    print(recivedEmailID)
                } else {
                    print("error--: \(String(describing: error?.localizedDescription))");
                }
            }
            //Get user profile image url's and screen name
            let twitterClient = TWTRAPIClient(userID: session?.userID)
            twitterClient.loadUser(withID: session?.userID ?? "") { (user, error) in
                print(user?.profileImageURL ?? "")
                print(user?.profileImageLargeURL ?? "")
                print(user?.screenName ?? "")
            }



            let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "SVC") as! SecondViewController
            self.navigationController?.pushViewController(storyboard, animated: true)
        } else {
            print("error: \(String(describing: error?.localizedDescription))");
        }
    }

}

आउटपुट:

यहां आपको userName, userId, Corttoken, CortTokenSecret, स्क्रीन का नाम और ईमेल आदि मिलेगा।

3) अब फ्रेंड्स लिस्ट फ्रेंड्स फ्रॉम लिस्ट / लिस्ट एपीआई । यहां आप दोस्तों / सूची, उपयोगकर्ताओं / देखने, अनुयायियों / आईडी, अनुयायियों / सूची एपीआई के डेटा आदि प्राप्त कर सकते हैं ...

func getStatusesUserTimeline(accessToken:String) {

    let userId = "109....456"
    let twitterClient = TWTRAPIClient(userID: userId)
    twitterClient.loadUser(withID: userId) { (user, error) in
        if user != nil {
            //Get users timeline tweets
            var request = URLRequest(url: URL(string: "https://api.twitter.com/1.1/friends/list.json?screen_name=KS....80&count=10")!) //users/lookup, followers/ids, followers/list 
            request.httpMethod = "GET"
            request.setValue("Bearer "+accessToken, forHTTPHeaderField: "Authorization")

            let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error
                print("error=\(String(describing: error))")
                return
                }

      //                    let responseString = String(data: data, encoding: .utf8)
      //                    let dictionary = data
      //                    print("dictionary = \(dictionary)")
      //                    print("responseString = \(String(describing: responseString!))")

                if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
                    print("statusCode should be 200, but is \(httpStatus.statusCode)")
                    print("response = \(String(describing: response))")
                }

                do {
                    let response = try JSONSerialization.jsonObject(with: data, options: [])
                    print(response)

                } catch let error as NSError {
                    print(error)
                }
            }

            task.resume()

        }
    }

}

यह कोड किसी भी स्थान पर उपलब्ध नहीं है। मैंने इस कोड के लिए बहुत कोशिश की और मैंने इसके लिए बहुत समय दिया। धन्यवाद।





twitter-oauth