编辑代码

refresh token": "25.b55feld287227ca97aab219bb249b8ab.315360000.1798
284651.282335-8574074",
"expires in": 2592000,
"scope": "public wise_adapt",
"session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNEzyzcpQ5EnbxbF+
hfG9DQkpUVQdh4p6HbQcAiz5RmuBAjalJJGgIdJI",
"access token":"24.6c5elff107f0e8bcef8c46d3424a0e78.2592000.1485516651.
282335-8574074",
"session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"
"error": "invalid_client",

reque
"error description": "unknown client id"
car"
# 二进
在获得access token 后,可以调用相关功能的 API 来完成该功能,如车型识别能力。
# encoding:utf-8 f= 
img
import requests

# client id 为官网获取的AK, client secret 为官网获取的 SK
pari
host ='https://aip.baidubce.com/oauth/2.0/token?grant_type=client
acc
credentials&client id=【官网获取的AK】&client_secret=【官网获取的 SK】'
rec
response -requests.get(host) he 
if response: re 
print(response,json())
i"error": "invalid_client",

reque
"error description": "unknown client id"
car"
# 二进
在获得access token 后,可以调用相关功能的 API 来完成该功能,如车型识别能力。
# encoding:utf-8 f= 
img
import requests

# client id 为官网获取的AK, client secret 为官网获取的 SK
pari
host ='https://aip.baidubce.com/oauth/2.0/token?grant_type=client
acc
credentials&client id=【官网获取的AK】&client_secret=【官网获取的 SK】'
rec
response -requests.get(host) he 
if response: re 
print(response,json())
i
import requests import base64
车型识别
request_url - "https://aip.baidubce.com/rest/2.0/image-classify/o/ car"
#二进制方式打开图片文件
f= open('【本地文件]','rb')
img = base64.b64encode(f.read(())
params = {"image":img,"top num":5}
access token - '[调用鉴权接口获取的 token]"
request_url = request_url + "?access_token=” + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request url, data-params, headers headers) if response:
print (response.json())返回的 JSON 数据:
"log id": 4086212218842203806,"location_result": {"width": 447,"top":226,"height": 209,"left":188},
"result": [{
"baike info": {
"baike url":"http://baike.baidu.com/item/1E58B81831E518AIA08E88BFAAChi
ron/20419512",
"description":"布加迪Chiron是法国跑车品牌布加迪出品的豪华超跑车。配置四满轮
增压发动机,420 公里每小时,有 23 种颜色的选择,售价高达 260 万美元。"
"score": 0.98793351650238,"name":"布加迪 Chiron","year":"无年份信息"},{
"score": 0.0021970034576952,"name":"奥迪RS5","year":"2011-2017"},{
"score": 0.0021096928976476,
"name":"奥迪RS4","year":"无年份信息"},{
"score": 0.0015581247862428,"name":"奥迪RS7","year":"2014-2016"},
"score": 0.00082337751518935,"name":"布加迪威航 ","year":"2004-2015"}],
"color result":"颜色无法识别"
}"coord":("lon":-0.13,"lat":51.51},
"weather”:[("id":300,"main":"Drizzle","description": light
intensity drizzle","icon":"09d")],
"base":"stations","main":{
"temp”:280.32,"pressure":1012,"humidity":81,
"temp_min":279.15,"temp_max":281.15},
"visibility":10000,
"wind":{"speed":4.1,"deg":80},"clouds":{"all":90},"dt":1485789600,"sys":{"type":1,"id":5091,
"message":0.0103,"country" : "GB",
"sunrise":1485762037,“sunset":1485794875},
"id":2643743,
"name" ;"London","cod";200}
import Foundation

①默认
//url为MOCKMOCK服务器的网址
中保存的证
if let url = URL(string: "http://localhost:3004/news"){
②瞬日
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
中,当会
print ("Network errors")
③后
else{
台处理,
print(rs) let rs = String(data: data!, encoding:String.Encoding.utf8)! 第2 
if let json = try? JSONSerialization.jsonObject(with: data!, 法有以 
options:.allowFragments) {
print(json)
Cache利
func sessionUploadPhp(){
//上传地址
let url = URL(string: "http://localhost/uploadSwift.php"y//1.创建会话对象
let session =URLSession.shared//请求
var request = URLRequest(url: url!, cachePolicy:.reloadIgnoringCacheData) request.httpMethod = "POST"//上传数据流
let filelmage = Bundle.main.path(forResource: "beel", ofType: “png") let imgData = try! Data(contentsOf: URL(fileURLWithPath: fileImage!))
let uploadTask = session.uploadTask(with: request as URLRequest, from:
imgData){
(data:Data?,response:URLResponse?, error:Error?) -> Void in// 上传完毕后
if error != nil{
print(error!)}else{
let str = string(data: data!, encoding: String.Encoding.utf8) print("上传完毕:\(String(describing:str))")
)
// 使用 resume 方法启动任务 uploadTask.resume()
baike_url":"/item/8E58A54874E789149EE5/475143","image url":
"/pic/5882b2b7d0a20cf47a91d7777c094b36acaf9910”,"description":
"2014 款奇瑞 E5 是国内科技家轿的引领者,带领消费者悦享领先科技。"},
"name":"奇瑞E5"},{
"score": 0.007103727199137211,"name":"奇瑞旗云""year":"2010-2013"
},
"score": 0.003686367534101009,"name":"奇瑞艾瑞泽 7""year":"2016-2017"},
"score": 0.001757977530360222,"name":"奇瑞E3""year":"2015-2017"},{
"score": 0,001047104829922318,"name":"奇瑞A5""year":"2015"
)
],
"color result":"黑色"
// Created by zhifeng Chen on 2020/8/2. 
Copyright o 2020 2hifeng Chen. All rights reserved.11
import vikit
class ViewController: UIViewController ,UINavigationControllerDeleg,UIImagePickerControllerDelegatel
//设置图像显示用的 Outlet,就是变量 carImageView@IBOutlet weak var carImageView: UIImageView!//设置Action,由相册按钮事件触发
@IBAction func onLibrary(_ sender: UIButton) {
//设置相册拍照的控制器
let vc=UIImagePickerController()//设置为相册
vc.sourceType=photoLibrary vc.allowsEditing-true vc.delegate - self
present(vc, animated: true)
//设置Action,由拍照按钮事件触发
@IBAction func onCamera(_ sender: UIButton) {
let vc=UIImagePickerController()//设置为摄像头
vc.sourceType=.camera vc.allowsEditing=true vc.delegate = self
present(vc, animated: true)
//相册获取图片需要调用的 Delegate
func imagePickerController( picker: UIImagePickerCont
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Ar
picker,dismiss(animated: true)
guard let image = info[,editedImage] as? UIImage else
return
)
//将相册图片显示在carImageView中 carImageView.image=image
if error !- nil l
print("error")
、
elsei
if let ison -try? JSONSerialization.isonObject (withs
data!, options: .allowFragments) as? [String : Any] (
let result - json!"result"] as! Array<Dictionarys
string,Any>>
let name - result[0]["name"l as! String var description="非车类" if name!-"非车类"{
let baike info - result[0]["baike_info"] as!
Dictionary<String,String?
if let details - baike infol"description"l (
description -details
else {
description ="百度百科无此车资料"

//转入主线程
DispatchQueue.main.async {
self.carDetails.text-description self.carName.text=name

}
.resume()

1/以信号量方式等待网络结果返回 access_token,如果没有成功,则返回"" func get baidu token()->String {
let API Key="EIpAlhdD7i5152EsiNqpU0fl"
let Secret Key="p8E2Wg4agjDOxABmKvBYSNyZlYzGFqbm"
let token host-"https://aip.baidubce.com/oauth/2.0/token?grant
type=client_credentialsiclient id=\(API Key)&client_secret=\(Secret_Key)"
var access token = ""//设置信号量
let semaphore: DispatchSemaphore = DispatchSemaphore(value: 0)
if let url = URL(string; token_host) (
URLSession.shared.dataTask(with: url){ (data, response, error) in
if error !- nil {
    print ("network error")
else {
if let json = try? JSONSerialization.jsonObject(with:
data!,options:allowfragments) as? [String : Any] {
access_token mjson["access token"] as! String}}
//发出信号量
semaphore.signal()
.resume()}
else {
print("url error")
//等待信号量
semaphore.wait()
return access token