影子yeah 2015-11-24 03:32 采纳率: 0%
浏览 1801

获取新浪微博用户昵称接口为什么总是不正确呢,这个应该怎么调啊???

NSString * path=[NSString stringWithFormat:@"https://api.weibo.com/2/users/show.json?source=%@&access_token=%@&uid=%@",kAppKey,self.wbtoken,self.wbCurrentUserID];
NSURL * url=[NSURL URLWithString:path];
ASIFormDataRequest * request=[ASIFormDataRequest requestWithURL:url];
request.requestMethod = @"GET";
request.url=url;

    NSLog(@"request.responseData>>>>>%@",request.responseData);
    NSDictionary * jsonDic=[NSJSONSerialization JSONObjectWithData:request.responseData options:kNilOptions error:nil];
    NSLog(@"jsonDic>>>>>%@",jsonDic);
    NSString * userName=jsonDic[@"screen_name"];

    [request setCompletionBlock:^{
        NSLog(@"%@",request.responseString);
    }];
    [request startAsynchronous];
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 20:46
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要使用新浪微博API获取用户的昵称(username),您需要在您的应用程序中设置正确的API密钥(key)和访问令牌(token)。以下是一个简单的示例,展示了如何实现这一目标:

    1. 获取API密钥(key): 您可以在微博的开发者中心找到并下载所需的API密钥。

    2. 获取访问令牌(token): 登录到微博后,在“应用管理”或“个人中心”页面上找到并点击“获取OAuth授权”。

    3. 在iOS项目中创建一个请求类,并添加如下代码以调用API:

    import Foundation
    
    class WeiboUser {
        
        static let shared = WeiboUser()
        
        private var key: String?
        private var token: String?
        private var appKey: String?
        private var wbtoken: String?
        private var wbCurrentUserID: Int?
        
        init(key: String?, token: String?) {
            self.key = key
            self.token = token
        }
        
        func getUsername() -> String? {
            guard let key = key, let token = token else { return nil }
            
            let urlString = "https://api.weibo.com/2/users/show.json?source=APP&access_token=\(token)&uid=\(wbCurrentUserID)"
            
            var requestURL = URL(string: urlString)!
            
            let headers = [
                "Authorization": "Bearer \(token)",
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            ]
            
            let parameters = [
                "source": "APP",
                "access_token": token,
                "uid": wbCurrentUserID
            ].map { "$1=$2" }
            
            var urlComponents = URLComponents(url: requestURL)
            urlComponents.queryItems = [
                URLQueryItem(name: "format", value: "json"),
                URLQueryItem(name: "callback", value: "function")
            ].flatMap({[weak self] (queryItems) in
                guard let self = self else { return [] }
                
                queryItems.forEach({ $0.name = nil })
                
                return queryItems
            }).flatMap({ $0.rawValue }.filter { $0 != "" })
    
            if let components = urlComponents?.absoluteString.split(separator: "&") {
                for component in components {
                    let pair = component.components(separatedBy: "=").compactMap(String.init)
                    
                    if pair.count == 2 && pair[0] == "callback" && pair[1].hasPrefix("function(") {
                        return pair[1]
                    } else if pair.count == 2 && pair[0] == "format" && pair[1] == "json" {
                        return pair[1]
                    }
                }
            }
            
            return nil
        }
    }
    

    注意:这段代码只是示例,实际使用时可能需要根据实际情况调整参数、编码方式等。此外,由于微博API的安全性要求,您需要确保在发送请求前已经设置了适当的认证信息。

    评论

报告相同问题?