当前位置: 首页 > 面试题库 >

获取推特朋友列表?

景阳平
2023-03-14
问题内容

Bad Authentication data在Twitter好友/列表API中得到
响应。登录时获取用户ID,屏幕名称,authToken和authTokenSecret。

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.jsonAPI 所需的参数是什么?在本文档中,给定的所有参数都是可选的。
https://developer.twitter.com/zh-CN/docs/accounts-and-users/follow-search-
get-users/api-reference/get-friends-
list


问题答案:

在Swift 4.2,Xcode 10.1和iOS 12.1中

终于我得到了解决方案。首先,我们需要授权,然后需要实现好友列表api。

纯Swift代码不可用。但是我完全是迅速实施的。

如果要从Twitter 获取 朋友/列表 数据,则需要使用 两个API

1)oauth2 / token API

2)朋友/列表API

oauth2 / token api中,您可以获取访问令牌,因为您需要好友列表的访问令牌。并且您需要 用户标识,屏幕名称

但是在这里,您 必须记住 一个要点。

1)首先使用 oauth2 / token api作为访问令牌。

2)获取访问令牌后,使用 twitter登录 api输入 用户ID和屏幕名称。

3)现在使用 好友/列表 API。

在这里,首先,如果您使用 Twitter登录,然后 使用 oauth2 / token api作为访问令牌 ,则可能会收到“
身份验证 错误” 数据 错误。因此,请按以下3个步骤进行操作。

1)获取访问令牌代码(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()
}

输出:

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

2)使用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))");
        }
    }

}

输出:

在这里,您将获得userName,userId,authtoken,authTokenSecret,屏幕名称和电子邮件等。

3)现在从friends / list api获取朋友列表 。在这里您可以获取朋友/列表,用户/查找,关注者/
id,关注者/列表api的数据等…

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

        }
    }

}

此代码在任何地方都不可用。我为此代码做了很多尝试,为此花了很多时间。谢谢。



 类似资料:
  • 当您参加[仅限被邀请的玩家]的派对时,轻触(邀请)即可推荐自己的朋友。主人承认后,会寄出邀请给获推荐的朋友,该朋友即可参加派对。在您想邀请的朋友方格上轻触打勾后,再轻触[推荐]。 承认被推荐的人 派对的主人可承认被推荐的人。参加派对的成员若推荐朋友给您,会通过(新的聊天信息)收到通知。 1. 轻触(邀请)图标。 显示被推荐的人。 2. 在您想邀请的人方格上轻触打勾后,再轻触[邀请]。邀请会寄给获推

  • 问题内容: 我正在研究“可能的朋友”功能。在这里,我需要向不是我的朋友的所有朋友显示所有朋友,也不要发送给我或没有我的待处理请求 对于每一次友谊,我都会做两个记录。假设用户1和2成为朋友…我要在表中做一个记录,再做一个。 当第一个用户发送请求时,将状态设置为0,而当朋友接受请求时,我将两行都更新为1 如何根据朋友的朋友进行建议“可能的朋友”的sql查询? 问题答案: 在这里,您…简单加入

  • 问题内容: 如何使用Twitter4J获取朋友或关注者的朋友列表? 使用,我只能检索已通过身份验证的当前用户的朋友/关注者列表。我想要的是获取关注者的朋友列表或经过身份验证的用户的朋友列表。 问题答案:

  • 为了了解在朋友关系中使用Neo4J的优势,我在MySQL数据库上创建了一个Persons表(“Persons”,20900个数据集): 和一张关系表(“友谊”,每个人有50到100个朋友): 因此,大约有120万人的关系。 现在我想查看id=1的人的朋友的朋友的朋友的朋友,因此我创建了一个如下查询: 用户ID 1的查询用了大约30秒 在Neo4J中,我为每个人创建了一个节点(20900个节点)和一

  • 可通过PlayStation®Network与远方的用户成为朋友,或查看朋友状态的应用程序。能在(派对)或(群信息)等应用程序中,与朋友尽情交流。在个人信息画面或游戏的交流区中亦可查看朋友的活动或撰写留言。 朋友的LiveArea™ 成为朋友 查看个人信息

  • 问题内容: 我有一个类似于myspace / facebook的社交网络。在我的代码中,您不是一个人的朋友,还是不是一个朋友,因此,我显示了您与之成为朋友的人的所有操作(在此帖子中,我将这些操作单独称为公告帖子,以使其更易于可视化。 因此,您每当有人发布公告时,都会向在那里的任何朋友显示。 在mysql中,您可以通过执行以下操作来获得个人朋友列表, 我想知道像facebook之类的网站如何显示您的