swift 网络搜索热词排行
2016-03-28 09:53
651 查看
1.使用www.showapi.com上的接口,需要注册添加一个App,这样才能获取appid和secret密钥,调用前需要订购套餐(选免费的就可以了);
2.外部库Podfile文件内容,SnapKit这里暂时不需要用到:
3.桥接头文件参考:/article/8535532.html
4.App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.参考:/article/8535552.html
5.请求url编码,request.swift
6.应答json解码,response.swift
7.数据管理,缓存,dataManage.swift
8.Objective-CBridgingHeader.h
9.扩展String,计算md5,扩展日期格式化,extension.swift
10.ViewController.swift
11.HotWordTableViewController.swift
点击热搜词可以直接打开浏览器在百度里面进行搜索。
github地址:https://github.com/tujiaw/HotSearch
截图:
2.外部库Podfile文件内容,SnapKit这里暂时不需要用到:
platform :ios, '8.0' use_frameworks! target 'WxArticle' do pod 'Alamofire', '~> 3.0' pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git' pod 'SnapKit', '~> 0.17.0' end
3.桥接头文件参考:/article/8535532.html
4.App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.参考:/article/8535552.html
5.请求url编码,request.swift
// // request.swift // HotSearch // // Created by tutujiaw on 16/3/26. // Copyright © 2016年 tujiaw. All rights reserved. // import Foundation class Request { var appId: Int var timestamp: String { return NSDate.currentDate("yyyyMMddHHmmss") } var signMethod = "md5" var resGzip = 0 var allParams = [(String, String)]() init(appId: Int) { self.appId = appId } func sign(appParams: [(String, String)], secret: String) -> String { self.allParams = appParams self.allParams.append(("showapi_appid", String(self.appId))) self.allParams.append(("showapi_timestamp", self.timestamp)) let sortedParams = allParams.sort{$0.0 < $1.0} var str = "" for item in sortedParams { str += (item.0 + item.1) } str += secret.lowercaseString return str.md5() } func url(mainUrl: String, sign: String) -> String { var url = mainUrl + "?" for param in self.allParams { url += "\(param.0)=\(param.1)&" } url += "showapi_sign=\(sign)" return url } } class HotWordCategoryRequest: Request { init () { super.init(appId: 17262) } func url() -> String { let sign = self.sign([(String, String)](), secret: "21b693f98bd64e71a9bdbb5f7c76659c") return super.url("http://route.showapi.com/313-1", sign: sign) } } class HotWordRequest: Request { var typeId = 1 init(typeId: Int) { super.init(appId: 17262) self.typeId = typeId } func url() -> String { let sign = self.sign([("typeId", "\(self.typeId)")], secret: "21b693f98bd64e71a9bdbb5f7c76659c") return super.url("http://route.showapi.com/313-2", sign: sign) } }
6.应答json解码,response.swift
// // response.swift // HotSearch // // Created by tutujiaw on 16/3/26. // Copyright © 2016年 tujiaw. All rights reserved. // import Foundation import SwiftyJSON class Response { var showapi_res_code = -1 var showapi_res_error = "" } struct CategoryChildItem { var id = 0 var name = "" } struct CategoryItem { var name = "" var childList = [CategoryChildItem]() } class HotWordCategoryResponse: Response { var list = [CategoryItem]() func setData(data: AnyObject) { let json = JSON(data) super.showapi_res_code = json["showapi_res_code"].int ?? -1 super.showapi_res_error = json["showapi_res_error"].string ?? "" if let list = json["showapi_res_body"]["list"].array { for item in list { var categoryItem = CategoryItem() guard let name = item["name"].string, let childList = item["childList"].array else { continue } categoryItem.name = name for child in childList { guard let id = child["id"].string, let name = child["name"].string else { continue } categoryItem.childList.append(CategoryChildItem(id: Int(id)!, name: name)) } self.list.append(categoryItem) } } } } struct HotWordInfo { var level = -1 var name = "" var num = -1 var trend = "" } class HotWordResponse: Response { var list = [HotWordInfo]() func setData(data: AnyObject) { let json = JSON(data) super.showapi_res_code = json["showapi_res_code"].int ?? -1 super.showapi_res_error = json["showapi_res_error"].string ?? "" if let list = json["showapi_res_body"]["list"].array { for item in list { guard let name = item["name"].string else { continue } var hotWordInfo = HotWordInfo() hotWordInfo.level = Int(item["level"].string ?? "-1") ?? -1 hotWordInfo.name = name hotWordInfo.num = Int(item["num"].string ?? "-1") ?? -1 hotWordInfo.trend = item["trend"].string ?? "" self.list.append(hotWordInfo) } } } func clear() { self.list.removeAll() } }
7.数据管理,缓存,dataManage.swift
// // dataManage.swift // HotSearch // // Created by tutujiaw on 16/3/26. // Copyright © 2016年 tujiaw. All rights reserved. // import Foundation class Data { static let sharedManage = Data() var hotWordCategory = HotWordCategoryResponse() var hotWord = HotWordResponse() }
8.Objective-CBridgingHeader.h
// // Objective-CBridgingHeader.h // HotSearch // // Created by tutujiaw on 16/3/26. // Copyright © 2016年 tujiaw. All rights reserved. // #ifndef QueryPhoneNumber_Objective_CBridgingHeader_h #define QueryPhoneNumber_Objective_CBridgingHeader_h #import <CommonCrypto/CommonHMAC.h> #endif
9.扩展String,计算md5,扩展日期格式化,extension.swift
// // extension.swift // HotSearch // // Created by tutujiaw on 16/3/26. // Copyright © 2016年 tujiaw. All rights reserved. // import Foundation extension String { func md5() -> String! { let str = self.cStringUsingEncoding(NSUTF8StringEncoding) let strLen = CUnsignedInt(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) let digestLen = Int(CC_MD5_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) CC_MD5(str!, strLen, result) let hash = NSMutableString() for i in 0..<digestLen { hash.appendFormat("%02x", result[i]) } result.destroy() return String(format: hash as String) } } extension NSDate { static func currentDate(dateFormat: String) -> String { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = dateFormat dateFormatter.locale = NSLocale.currentLocale() return dateFormatter.stringFromDate(NSDate()) } }
10.ViewController.swift
// // ViewController.swift // HotSearch // // Created by tutujiaw on 16/3/25. // Copyright © 2016年 tujiaw. All rights reserved. // import UIKit import Alamofire class ViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.navigationItem.title = "热搜分类" let request = HotWordCategoryRequest() Alamofire.request(.GET, request.url()).responseJSON { (response) -> Void in if response.result.isSuccess { if let value = response.result.value { Data.sharedManage.hotWordCategory.setData(value) self.tableView.reloadData() } } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section < Data.sharedManage.hotWordCategory.list.count { let item = Data.sharedManage.hotWordCategory.list[section] print("child list count:\(item.childList.count)") // return Data.sharedManage.hotWordCategory.list[section].childList.count } return 0 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let CELL_ID = "HOT_WORD_CATEGORY_CELL_ID" let cell = tableView.dequeueReusableCellWithIdentifier(CELL_ID, forIndexPath: indexPath) if indexPath.section < Data.sharedManage.hotWordCategory.list.count { var item = Data.sharedManage.hotWordCategory.list[indexPath.section] if indexPath.row < item.childList.count { cell.textLabel?.text = item.childList[indexPath.row].name } } return cell } override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return Data.sharedManage.hotWordCategory.list.count } override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { if section < Data.sharedManage.hotWordCategory.list.count { return Data.sharedManage.hotWordCategory.list[section].name } return "" } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { print("index:\(indexPath.row)") if indexPath.section < Data.sharedManage.hotWordCategory.list.count { let item = Data.sharedManage.hotWordCategory.list[indexPath.section] if indexPath.row < item.childList.count { print("\(item.childList[indexPath.row].name), \(item.childList[indexPath.row].id)") } } } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "HOT_WORD_SEGUE" { let target = segue.destinationViewController as? HotWordTableViewController let indexPath = tableView.indexPathForSelectedRow if indexPath?.section < Data.sharedManage.hotWordCategory.list.count { let item = Data.sharedManage.hotWordCategory.list[(indexPath?.section)!] if indexPath?.row < item.childList.count { target?.name = item.childList[(indexPath?.row)!].name target?.typeId = item.childList[(indexPath?.row)!].id } } } } }
11.HotWordTableViewController.swift
// // HotWordTableViewController.swift // HotSearch // // Created by tutujiaw on 16/3/26. // Copyright © 2016年 tujiaw. All rights reserved. // import UIKit import Alamofire class HotWordTableViewController: UITableViewController { var name = "" var typeId = 0 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.navigationItem.title = name let request = HotWordRequest(typeId: self.typeId) Alamofire.request(.GET, request.url()).responseJSON { (response) -> Void in if response.result.isSuccess { if let value = response.result.value { Data.sharedManage.hotWord.clear() Data.sharedManage.hotWord.setData(value) self.tableView.reloadData() } } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return Data.sharedManage.hotWord.list.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let CELL_ID = "HOT_WORD_CELL_ID" let cell = tableView.dequeueReusableCellWithIdentifier(CELL_ID, forIndexPath: indexPath) if indexPath.row < Data.sharedManage.hotWord.list.count { let item = Data.sharedManage.hotWord.list[indexPath.row] cell.textLabel?.text = item.name } return cell } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if indexPath.row < Data.sharedManage.hotWord.list.count { let keyword = Data.sharedManage.hotWord.list[indexPath.row].name if let newKeyword = keyword.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) { if let url = NSURL(string: "https://www.baidu.com/s?wd=\(newKeyword)") { UIApplication.sharedApplication().openURL(url) } } } } }
点击热搜词可以直接打开浏览器在百度里面进行搜索。
github地址:https://github.com/tujiaw/HotSearch
截图:
相关文章推荐
- NFC会员管理-转载自http://technews.cn/2014/09/13/nfc-sticker/
- 第1章 基本网络概念
- httpd服务停止自动发送告警邮件
- android-async-http开源框架【转】
- 毕业论文-学生网络考试系统 (学生在线考试系统)(共享版)
- 基于网络流量的计费系统设计与实现
- 详解HTTPS中数字证书验证系统
- HTTPS简述
- OpenCV进阶之路:神经网络识别车牌字符
- 针对TQ部分ARM开发板中QTCPServer不能接受数据的问题
- 带上下界网络流小练(Bzoj2502&&Bzoj2055&&Bzoj3698)
- tcp状态
- Linux系统/网络 笔记
- 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
- 20159313《网络攻击与防范》第四周学习总结
- [BZOJ1146][CTSC2008]网络管理Network
- HTTP请求响应协议
- MVC |Web API | HttpClent
- java发送http请求 自动预约MZD记念馆团体票 分析第一步自动登陆carles抓包
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包