使用Swift-perfect开发一个网站抓取程序
创建新文件夹并进入
1 2
| ~ mkdir Literary_Crawler ~ cd Literary_Crawler
|
创建Package.swift文件
这个文件是SPM(Swift软件包管理器)编译项目时必须要用到的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ~ vim Package.swift
import PackageDescription let package = Package( name: "LiteraryCrawler", targets: [], dependencies: [ .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2), .Package(url:"https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 2), .Package(url: "https://github.com/PerfectlySoft/Perfect-CURL.git", majorVersion: 2) ] )
|
创建Sources文件夹保存源程序及其main.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| ~ mkdir Sources ~ cd Sources ~ vim main.swift main.swift import PerfectLib import PerfectHTTP import PerfectHTTPServer import PerfectCURL
import MySQL let testHost = "127.0.0.1" let testUser = "root" let testPassword = "123456" let testDB = "LiteraryDB"
func fetchData(response:HTTPResponse) { let mysql = MySQL() let connected = mysql.connect(host: testHost, user: testUser, password: testPassword) guard connected else { print(mysql.errorMessage()) return } defer { mysql.close() } guard mysql.selectDatabase(named: testDB) else { Log.info(message: "数据库选择失败。错误代码:\(mysql.errorCode()) 错误解释:\(mysql.errorMessage())") return } let querySuccess = mysql.query(statement: "SELECT * FROM tb_user") guard querySuccess else { return } let results = mysql.storeResults()! results.forEachRow { row in Log.info(message: "\(row)") } Log.info(message: "连接成功") response.appendBody(string: "mysql连接成功") response.completed() }
let server = HTTPServer()
var routes = Routes()
routes.add(method: .get, uri: "/login") { (request, response) in }
server.addRoutes(routes)
server.serverPort = 8181 func request() { let url = CURL.init(url: "http://www.jianshu.com/p/457922e0676c") let (_, _, bytes) = url.performFully() guard let html = String.init(bytes: bytes, encoding: .utf8) else { return } print(html) }
do { try server.start() request() } catch PerfectError.networkError(let err, let msg) { print("网络出现错误:\(err) \(msg)") }
|
生成xcodeproj
1 2 3
| "__TFE10FoundationSSCuRxs8SequenceWx8Iterator7Element_zVs5UInt8rfT5bytesx8encodingVES_SS8Encoding_GSqSS_", referenced from:
"__TFVE10FoundationSS8Encodingau4utf8S0_", referenced from:
|