import UIKit
import AFNetworking
class NetworkTools: AFHTTPSessionManager {
// static let WB_App_Key = "861417731"
// static let WB_App_Secret = "891b8e2950f0daaca048c9fc6c46a535"
// static let WB_Redirect_URI = "http://www.520it.com"
static let WB_App_Key = "2507721026"
static let WB_App_Secret = "dd92b400310fa5eb9e2fe5bc9c1caa6c"
static let WB_Redirect_URI = "http://my.oschina.net/u/2333251"
static let shareInstance: NetworkTools = {
let url = NSURL(string: "https://api.weibo.com/")!
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let instance = NetworkTools(baseURL: url, sessionConfiguration: configuration)
instance.responseSerializer.acceptableContentTypes = NSSet(objects: "application/json", "text/json", "text/javascript", "text/plain") as Set<NSObject>
return instance
}()
// MARK: - 外部控制器方法
/**
获取授权信息
- parameter code: 已经授权的RequestToken
- parameter finfished: 回调
- parameter error: 错误信息
*/
func loadAccessToken(code: String, finfished: (objc: [String: AnyObject]?, error: NSError?)->())
{
let path = "oauth2/access_token"
// 1.拼接参数
let parameters = ["client_id": NetworkTools.WB_App_Key, "client_secret": NetworkTools.WB_App_Secret, "grant_type": "authorization_code", "code": code, "redirect_uri": NetworkTools.WB_Redirect_URI]
// 2.访问网络
POST(path, parameters: parameters, success: { (_, JSON) -> Void in
guard let dict = JSON as? [String: AnyObject] else
{
finfished(objc: nil, error: NSError(domain: "com.520it.lnj", code: 998, userInfo: ["message": "获取到的授权信息是nil"]))
return
}
finfished(objc: dict, error: nil)
}) { (_, error) -> Void in
finfished(objc: nil, error: error)
}
}
/**
获取用户信息
- parameter userAccount: 授权模型
- parameter finfished: 回调
- parameter error: 错误信息
*/
func loadUserInfo(userAccount: UserAccountModel, finfished: (objc: [String: AnyObject]?, error: NSError?)->())
{
let path = "2/users/show.json"
// 1.封装参数
let parameters = ["access_token": userAccount.access_token!, "uid": userAccount.uid!]
// 2.发送请求
NetworkTools.shareInstance.GET(path, parameters: parameters, success: { (_, JSON) -> Void in
// 2.1进行安全校验
guard let dict = JSON as? [String: AnyObject] else
{
finfished(objc: nil, error: NSError(domain: "com.520it.lnj", code: 999, userInfo: ["message": "获取到的用户信息是nil"]))
return
}
finfished(objc: dict, error: nil)
}) { (_, error) -> Void in
finfished(objc: nil, error: error)
}
}
/**
获取微博数据
- parameter since_id 用于下拉刷新, 返回比指定微博ID大的微博
- parameter finfished: 回调
- parameter error: 错误信息
*/
func loadStauts(since_id: String, max_id: String, finfished: (objc: [[String: AnyObject]]?, error: NSError?)->())
{
let path = "2/statuses/home_timeline.json"
/*
since_id: 返回比指定的since_id大的微博(获取最新的微博数据)
max_id: 返回小于等于max_id的微博(获取以前的微博数据)
特点: 如果since_id或者max_id等于0, 那么无效
*/
// 1.封装请求参数
let parameters = ["access_token": UserAccountViewModel.shareInstance.userAccountModel!.access_token!, "since_id": since_id, "max_id": max_id]
// 2.发送请求
GET(path, parameters: parameters, success: { (_, JSON) -> Void in
/*
服务器返回的数据格式:
字典
|--statuses(key) 字典数组
|-- 字典(一条微博数据)
*/
guard let arr = JSON["statuses"] as? [[String: AnyObject]] else
{
finfished(objc: nil, error: NSError(domain: "com.520it.lnj", code: 997, userInfo: ["message": "获取微博数组出错"]))
return
}
// 返回数据
finfished(objc: arr, error: nil)
}) { (_, error) -> Void in
finfished(objc: nil, error: error)
}
}
/**
发送微博
- parameter status: 微博正文
- parameter image: 微博配图
- parameter finfished: 回调
- parameter error: 失败信息
*/
func postStatus(status: String, image: UIImage?, finfished: (objc: [String: AnyObject]?, error: NSError?)->())
{
var path = "2/statuses/"
// 1.封装请求参数
let parameters = ["access_token": UserAccountViewModel.shareInstance.userAccountModel!.access_token!, "status": status]
if image == nil
{
// 发送微博微博
path += "update.json"
// 2.发送请求
POST(path, parameters: parameters, success: { (_, JSON) -> Void in
guard let dict = JSON as? [String: AnyObject] else
{
finfished(objc: nil, error: NSError(domain: "com.520it.lnj", code: 250, userInfo: ["message": "服务器没有返回已经发送的微博"]))
return
}
finfished(objc: dict, error: nil)
}) { (_, error) -> Void in
finfished(objc: nil, error: error)
}
}else
{
// 发送图片微博
path += "upload.json"
// 2.发送请求
POST(path, parameters: parameters, constructingBodyWithBlock: { (formData) -> Void in
let data = UIImagePNGRepresentation(image!)!
formData.appendPartWithFileData(data, name:"pic",fileName:"abc123", mimeType:"application/octet-stream")
}, success: { (_, JSON) -> Void in
guard let dict = JSON as? [String: AnyObject] else
{
finfished(objc: nil, error: NSError(domain: "com.520it.lnj", code: 250, userInfo: ["message": "服务器没有返回已经发送的微博"]))
return
}
finfished(objc: dict, error: nil)
}) { (_, error) -> Void in
finfished(objc: nil, error: error)
}
}
}
}
swift AFNetworking
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在学习Swift中想使用AFN ,第一次使用,遇到了Swift和OC 混编,我的项目使用cocoapods 导入的...
- 公司项目需要,不得不硬着头皮用swift3.0了,之前都是用swift2.3的,网络请求有的用afn,有的用Ala...
- 我们通常见到的是OC版本的,今天给大家一份swift版本的,思想和OC版本的一样,写法不一样而已。