una son sirven sincronizar que publicas publica privadas para listas lista las importar example developer desarrollador contactos como buscar amigos agregaron ios swift twitter oauth twitter-oauth

ios - son - Obtener lista de amigos de Twitter?



twitter api example (2)

Debido a que esta lista de amigos / listas requiere autenticación para poder acceder a la lista de amigos.

Estoy obteniendo una respuesta de Bad Authentication data en la lista de amigos / listas de twitter. Estoy obteniendo ID de usuario, nombre de pantalla, authToken y authTokenSecret al iniciar sesión.

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() }

Salida:

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

¿Cuáles son los parámetros necesarios para enviar en la API friends/list.json ? En este documento se dan todos los parámetros son opcionales. https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list


En Swift 4.2, Xcode 10.1 y iOS 12.1

Finalmente tengo la solución para esto. Aquí primero necesitamos Autorización, luego necesitamos implementar la lista de amigos api.

El código Swift puro no está disponible. Pero lo implementé en puro veloz.

Si desea obtener datos de amigos / listas de Twitter, debe utilizar dos API .

1) oauth2 / token API

2) API de lista / amigos

En oauth2 / token api puede obtener token de acceso, porque necesita token de acceso para la lista de amigos. Y necesitas identificación de usuario, nombre de pantalla .

Pero aquí debes recordar un punto importante.

1) Primero use la api de oauth2 / token para el token de acceso.

2) Después de obtener el token de acceso, use la API de inicio de sesión de twitter para el ID de usuario y el nombre de pantalla.

3) Ahora usa friends / list api.

Aquí, primero, si utiliza el inicio de sesión de Twitter y luego una api de touth2 / token para el token de acceso , puede obtener un error de datos de autenticación incorrecta. Así que por favor siga los 3 pasos anteriores en orden.

1) Obtenga el código de token de acceso (oauth2 / token api):

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() }

Salida:

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

2) Entrar con el código de twitter

@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))"); } } }

Salida:

Aquí obtendrá userName, userId, authtoken, authTokenSecret, nombre de pantalla y correo electrónico, etc.

3) Ahora consigue la lista de amigos de la lista de amigos / lista . Aquí puede obtener amigos / lista, usuarios / búsqueda, seguidores / ids, seguidores / listar datos de api, etc.

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() } } }

Este código no está disponible en ningún lugar. Intenté mucho con este código y dediqué mucho tiempo a esto. Gracias.