python如何实现API的调用详解

目录
  • 前言
  • API
  • 数据接口
  • API的调用和数据接口的调用
  • 调用的基础-请求方法
  • 几种常见API调用实例
    • 百度AI相关API
    • 百度地图API
    • 有道API
    • uuid
    • sign
  • 常用API分享
  • 总结

前言

在日常工作中,可能需要结合网上现在的一些API或者公司提供的数据接口来得到相应的数据或者实现对应的功能。

因此API的调用和数据接口的访问都是做数据分析的一个常用操作,如何快速实现API和数据接口的调用,网上一般提供很多语言版本,但追根溯源采取的方式都是利用HTTP请求的方式来进行实现的。由于本人常用Python,本篇文章也主要采用Python来作为工具来进行介绍如何操作。

API

API:简单来说就是一组协议、一个工具或者一组规则,定义不同应用程序之间的通信方法,把具体实现的过程隐藏起来,只暴露必须调用的部分给开发者使用。

上面的定义比较官方,这里简单举个例子来说明一下,比如在现在外面的麦当劳等快餐店都采取手机线上下单,前台拿餐的过程。而在这个过程,作为消费者通常在手机上选好对应的餐品然后点击下单付款,然后等待前台叫号拿餐即可。而这个过程具体怎么实现的我们并不知道,整个过程有对应的app或者小程序通信到厨房数据,然后厨师制作出餐。而这个APP和小程序就充当对应的API功能。

举一个简单的例子,一个社交平台它每天收到各种语言的评论信息,而作为对应的分析人员面对复杂的语言数据处理,是一个大难题,有人可能说开发一个模型来实现翻译整合功能,这个方法虽然听起来可行但是成本代价高,其次为了解决一个问题,而又去开发一个比较困难的问题。这个与原本的目标偏离越来越远,这个时候就可以借助国内比较成熟的翻译平台API,直接处理现有的数据。这样相对而言成本代价小,更便捷也更能快速实现现有的目标。而API的作用在这里就毋庸置疑了。

数据接口

数据接口: 简单来说就是一组封装的数据集口令,就是按照对应的规则发送相应的参数,然后返回对应的相关数据信息。API的调用和数据接口的这两个在日常调用时很类似的,相对而言API的范围更宽广,实现的功能也比较多,而数据接口日常充当的就是一个取数工具比较多。

就比如说大型电商公司公司一般用统一的SKU来对商品进行管理,而比如这家公司是作为一个品牌商,它会在不同平台上面进行售卖,而在这些平台上面映射的商品标识ID就不同于公司的SKU。因为公司的SKU不仅基于商品而且还考虑各个地方仓库以及产品的各个型号,而这个映射相对而言就比较复杂。

而在处理不同平台的数据人员一般也不能直接使用公司的数据库来对商品进行分析,因为颗粒度太细,分析起来比较复杂困难,这个时候就可以根据对应功能的要求让开发在现有系统是开发一个单独的数据接口提供相应的公司,避免直接请求数据库过程复杂等相应信息。但数据接口相对实时的数据库存在一定的延迟。

API的调用和数据接口的调用

API和数据接口通过前面的举例论述,大致理解起来也比较简单,而具体怎么实现API的调用和数据接口的调用这里简单介绍一下。

简单来说API的调用和接口的调用都是类似一个HTTP请求,而调用最主要就是根据相应的规则将请求方式、请求头、URL、以及请求体封装好然后发送请求,就可以实现相应的调用。

但数据接口和API两个的调用相比较而言来,一般数据接口比较简单,很多情况下数据接口是在公司内网数据访问所以请求信息比较简单,而API大多是第三方企业开发对外的服务属于一种商业服务,相对而言为了保证请求的安全,考虑的更为全面,加入了AK、SK、签名、时间戳等信息比较复杂。

而追本溯源这两个调用都是类似HTTP请求,具体调用大致差不多,主要就是API调用中包含的请求参数的信息更多。而具体怎么实现下面将简单的介绍一下。

调用的基础-请求方法

一般而言,常见的HTTP请求调用方式有很多,这方面的资源比较多,可以网上自己查阅,这里就简单说说常见的两种请求方法。

GET 请求

GET请求简单来说就是从服务器上获取资源,可以载入到浏览器的缓存中。

POST 请求

POST请求一般而言以表单形式向服务器发送请求,请求参数包含在请求体当中可能导致资源的创建和改变。POST请求的信息不能缓存在浏览器中。
这两个请求方法说起来很简单,但最重要的一点就是了解这两种请求的区别,从而为接口的设计和API的使用更加熟悉。

GET和POST请求的区别

1.GET请求请求长度最多1024kb,POST对请求数据没有限制。这一点原因是很多时候GET请求把对应的信息放在URL中,而URL的长度有限,导致GET请求的长度也受到一定的限制。而POST请求相应的参数信息放在请求体body中所以一般不受长度限制。

2.POST请求比GET更安全一些,因为GET请求中URL包含了相应的信息,页面会被浏览器缓存,其他人可以看到相应的信息。

3.GET产生一个TCP数据包,POST产生两个TCP数据包。

GET请求的时候将header、data一起发送出去,然后服务器响应返回200。而POST则是先发送header,等待服务器响应100,然后发送data,最后服务器响应返回200.但在这里注意,POST请求分为两次,但是请求体body是紧随在header之后发送的,所以这之间时间可以微乎不计。

4.GET请求只支持URL编码,而POST相对而言有多种编码方式。

5.GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。

6.GET请求只支持ASCII字符,而POST没有限制。

一般而言浏览器输入网址可以直接访问的一般是GET请求。

Python实现GET请求和POST请求

上面大篇幅的介绍了一些数据接口、API相关知识以及请求方法,使用起来比较简单,下面可以大致熟悉一下相应的请求方式。一般直接使用Python的request库就可以。

GET请求

import request
# GET请求发送的参数一定要是字典的形式,可以发送多个参数。
# 发送格式:{'key1':value1', 'key2':'value2', 'key3', 'value3'}
# 样例不能运行
url ='http://www.xxxxx.com'
params = {'user':'lixue','password':111112333}
requests.get(url,data = parms)

POST请求

POST请求一般有三种提交形式:application/x-www-form-urlencoded、multipart/form-data、application/json.

具体查看是三种的哪一种请求方式:谷歌浏览器检查 → Network →选择加载文件 → Headers → Reuqest Headers → Content-Type

具体编码方式为下面三种,可以了解具体的请求实现,一般公司内部的数据接口设置了局域网所以有的可以不需要加header。

POST请求的三种提交形式

1.最常见的post提交数据以form表单为主:application/x-www-form-urlencoded

import request
data={'k1':'v1','k2':'v2'}
headers= {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
requests.post(url,headers = headers,data=data)

2.以json格式提交数据:application/json

data = {'user':'lixue','password':12233}
data_json = json.dumps(params)
requests.post(url,headers = headers,data = data_json)

3.一般用来传文件(爬虫很少用到):multipart/form-data

files = {'files':open('c://xxx.txt','rb')}
requests.post(url = url,headers = headers,files = files)

一个简单API请求的实例

通过上面简单的介绍,对于具体请求大致了解,这里搜集了一个简单的API聚合中心,提供了很多挺好用的功能。下面以这个简单API的作一个简单的示范API地址

这个小实例采取的是天气API接口获取近15天的天气。在使用这个API之前记得获取相应的apiKey和查看具体的使用文档。这个API网站一般对相应API提供一定的免费次数,可以充当学习使用,而且支持GET和POST请求。刚好可以适合练手。

GET请求

params = {
    "apiKey":'换成你的apikey',
    "area":'武汉市',
}
url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
response = requests.get(url,params)
print(response.text)

POST请求

这里的POST请求也就是对应上面的最常见的post提交数据以form表单为主:application/x-www-form-urlencoded

url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
params = {
    "apiKey":'换成你的apikey',
    "area":'武汉市武昌区',
}
response = requests.post(url,params)
print(response.text)

在调用这种API接口一般都需要进行一个状态码等返回信息测试,检查请求是否正常,可以按照下面的给出参考。

params = {
    "apiKey":'换成你的apikey,
    "area":'武汉市',
}
url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
response = requests.post(url,params)
print(response.text)
if response.status_code != 200:
    raise ConnectionError(f'{url} status code is {response.status_code}.')
response = json.loads(response.content)
if 'desc' not in response.keys():
    raise ValueError(f'{url} miss key msg.')
if response['desc'] != '请求成功':
    print(11)

数据提取

其实API的调用很简单,但其中最核心的其实是返回信息中数据的抽取,一般而言返回的信息都是json形式,需要从中用字典键值对方式提取数据,下面这块根据请求的数据返回相应的信息并提取出来,获取信息后面将会展示。

import requests
import pandas as pd
import numpy as np
import json
def get_url(area):
    url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
    params = {
        "apiKey":'换成你的apikey',
        "area":area,
    }
    response = requests.get(url,params)
    if response.status_code != 200:
        raise ConnectionError(f'{url} status code is {response.status_code}.')
    response = json.loads(response.content)
    if 'desc' not in response.keys():
        raise ValueError(f'{url} miss key msg.')
    if response['desc'] != '请求成功':
        print(11)
    return response
def  extract_data(web_data):
    data= web_data['result']['dayList']
    weather_data = pd.DataFrame(columns = ['city','daytime','day_weather','day_air_temperature','day_wind_direction','day_wind_power',                                           'night_weather','night_air_temperature','night_wind_direction','night_wind_power'])
    for i in range(len(data)):
        city = data[i]["area"]
        daytime = data[i]["daytime"]
        daytime = daytime[:4]+'-'+daytime[4:6]+'-'+daytime[-2:]
        day_weather = data[i]["day_weather"]
        day_air_temperature = data[i]['day_air_temperature']
        day_wind_direction = data[i]["day_wind_direction"]
        day_wind_power = data[i]['day_wind_power']
        night_weather = data[i]['night_weather']
        night_air_temperature = data[i]["night_air_temperature"]
        night_wind_direction = data[i]['night_wind_direction']
        night_wind_power = data[i]["night_wind_power"]
        c = {"city": city,"daytime": daytime,"day_weather":day_weather,"day_air_temperature":day_air_temperature,
             "day_wind_direction":day_wind_direction,"day_wind_power":day_wind_power,"night_weather":night_weather,
             "night_air_temperature":night_air_temperature,"night_wind_direction":night_wind_direction,
             "night_wind_power":night_wind_power}
        weather_data = weather_data.append(c,ignore_index = True)
    weather_data.to_excel(r"C:\Users\zhangfeng\Desktop\最近十五天天气.xlsx",index = None)
    return weather_data
if __name__ == '__main__':
    print("请输入对应的城市")
    web_data = get_url(input())
    weather_data = extract_data(web_data)

部分结果如下图:

数据接口实例

在日常学习中数据接口的使用可能相对较少,数据接口的应用场景大多数情况下是应用在公司内部调取数据的情况下比较多,所以一般很少见到,这里展示工作中遇到的两个数据接口的使用,由于工作考虑,展示的代码属于样例,并不能调用。可以参考一下调用实现以及规范。

POST请求调用数据接口

# 销售状态查询
def id_status(id_dir):
    id_data = pd.read_excel(id_dir,sheet_name="Sheet1")
    id_data.columns = ['shop', 'Campaign Name','Ad Group Name','Item Id']  # 方便后期处理更改列名
    id_data["Item Id"] = id_data["Item Id"].astype(str)
    id_list = list(id_data['Item Id'])
    print(len(id_list))
    id_list = ','.join(id_list)
    if isinstance(id_list, int):
        id_list = str(id_list)
    id1 = id_list.strip().replace(',', ',').replace(' ', '')
    request_url = "http://xxx.com"
    # 通过item_id查询id状态
    params = {
        "item_id":id1,
    }
    data_json = json.dumps(params) # 属于POST第二种请求方式
    response = requests.post(request_url, data = data_json)
    print(response.text)
    if response.status_code != 200:
        raise ConnectionError(f'{request_url} status code is {response.status_code}.')
    response = json.loads(response.content)
    if 'message' not in response.keys():
        raise ValueError(f'{request_url} miss key msg.')
    if response['message'] != 'ok':
        print(11)
    data= response['result']
    ad_data = pd.DataFrame(columns = ['Item Id','saleStatusName'])
    for j in range(len(data)):
        item_id =data[j]["item_id"]
        saleStatusName = data[j]['saleStatusName']
        c = {"Item Id": item_id,
         "saleStatusName": saleStatusName,
         }
        ad_data = ad_data.append(c,ignore_index = True)
    total_data = pd.merge(ad_data,id_data,on ='Item Id', how ='left')
    df_column =  ['shop', 'Campaign Name','Ad Group Name','Item Id','saleStatusName']
    total_data = total_data.reindex(columns=df_column)
    return total_data

GET请求调用数据接口

### 库存数据查询
def Smart_investment_treasure(investment_dir):
    product_data = pd.read_excel(investment_dir,sheet_name="product")
    if len(product_data)>0:
        product_data['商品ID']=product_data['商品ID'].astype(str)
        product_list=list(product_data['商品ID'])
        product_id = ','.join(product_list)
    else:
        product_id='没有数据'
    return product_id
def stock_query(investment_dir):
        product_data = pd.read_excel(investment_dir,sheet_name="product")
    if len(product_data)>0:
        product_data['商品ID']=product_data['商品ID'].astype(str)
        product_list=list(product_data['商品ID'])
        product_id = ','.join(product_list)
    else:
        product_id='没有数据'
    if isinstance(product_id, int):
        product_id = str(id)
    product_id = product_id.strip().replace(',', ',').replace(' ', '')
    request_url = "http://xxx.com"
    # 通过ali_sku查询erpsku
    params = {
        "product_id":product_id,
    }

    response = requests.get(request_url, params) #属于GET请求
    if response.status_code != 200:
        raise ConnectionError(f'{request_url} status code is {response.status_code}.')
    response = json.loads(response.content)
    if 'msg' not in response.keys():
        raise ValueError(f'{request_url} miss key msg.')
    if response['msg'] != 'success':
        print(11)
    data= response['data']['data']
    # requestProductId = id.split(',')
    id_state=[]
    overseas_stock=[]
    china_stock=[]
    id_list=[]
    for j in range(len(data)):
        inventory_data= data[j]['list']
        overseas_inventory=0
        ep_sku_list=[]
        sea_test=0
        china_inventory=0
        test="paused"
        id_test=""
        id_test=data[j]['product_id']
        for i in range(len(inventory_data)):
            if inventory_data[i]["simple_code"] in ["FR","DE","PL","CZ","RU"] and inventory_data[i]["erp_sku"] not in ep_sku_list:
                overseas_inventory+=inventory_data[i]["ipm_sku_stock"]
                ep_sku_list.append(inventory_data[i]["erp_sku"])
                sea_test=1
            elif inventory_data[i]["simple_code"] == 'CN':
                china_inventory+=int(inventory_data[i]["ipm_sku_stock"])
        if overseas_inventory>30:
            test="open"
        elif overseas_inventory==0 and china_inventory>100:
            test="open"
        id_list.append(id_test)
        overseas_stock.append(overseas_inventory)
        china_stock.append(china_inventory)
        id_state.append(test)
    c={"id":id_list,
       "id_state":id_state,
       "海外仓库存":overseas_stock,
       "国内大仓":china_stock
       }
    ad_data=pd.DataFrame(c)
    return ad_data

几种常见API调用实例

百度AI相关API

百度API是市面上面比较成熟的API服务,在大二期间由于需要使用一些文本打标签和图像标注工作了解了百度API,避免了重复造轮子,当时百度API的使用比较复杂,参考文档很多不规范,之前也写过类似的百度API调用极其不稳定,但最近查阅了百度API参考文档,发现目前的调用非常简单。

通过安装百度开发的API第三方包,直接利用Python调包传参即可使用非常简单。这里展示一个具体使用,相应安装第三方库官方文档查阅。

'''
第三方包名称:baidu-aip
百度API
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
参考文档:https://ai.baidu.com/ai-doc/NLP/tk6z52b9z
'''
from aip import AipNlp
APP_ID = 'xxxxxx'
API_KEY = '换成你的apikey'
SECRET_KEY = '换成你的SECRET_KEY'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
text = "我还没饭吃"
# 调用文本纠错
client.ecnet(text)

百度地图API

这个API当时为了设计一个推荐体系引入经纬度换算地址,这样为数据计算带来极大的方便,而且对于一般人来说文本地址相比经纬度信息更加直观,然后结合Python一个第三方包实现两个地址之间经纬度计算得出相对的距离。

# https://lbsyun.baidu.com/
# 计算校验SN(百度API文档说明需要此步骤)
import pandas as pd
import numpy as np
import warnings
import requests
import urllib
import hashlib
import json
from geopy.distance import geodesic
location = input("输入所在的位置\n")  # "广州市天河区"
ak = "ak1111" # 参照自己的应用
sk = "sk111111" # 参照自己的应用
url = "http://api.map.baidu.com"
query = "/geocoding/v3/?address={0}&output=json&ak={1}&callback=showLocation".format(location, ak)
encodedStr = urllib.parse.quote(query, safe="/:=&?#+!$,;'@()*[]")
sn = hashlib.md5(urllib.parse.quote_plus(encodedStr + sk).encode()).hexdigest()
# 使用requests获取返回的json
response = requests.get("{0}{1}&sn={2}".format(url, query, sn))
data1=response.text.replace("showLocation&&showLocation(","").replace(")","")
data = json.loads(data1)
print(data)
lat = data["result"]["location"]["lat"]
lon = data["result"]["location"]["lng"]
print("纬度: ", lat, " 经度: ", lon)
distance=geodesic((lat,lon), (39.98028,116.30495))
print("距离{0}这个位置大概{1}".format(location, distance))

有道API

在网上查阅了很多API,前面介绍的几种API,他们携带的请求参数信息相对比较简单,调用实现和基础请求没啥区别,这里找了一个相对而言比较多的请求参数的API,相对而言这种API数据付费API,它的安全性以及具体的实现都相对复杂,但是更适合商用。下面可以简单看看。

import requests
import time
import hashlib
import uuid
youdao_url = 'https://openapi.youdao.com/api'   # 有道api地址
translate_text = "how are you!"
input_text = ""
# 当文本长度小于等于20时,取文本
if(len(translate_text) <= 20):
    input_text = translate_text
# 当文本长度大于20时,进行特殊处理
elif(len(translate_text) > 20):
    input_text = translate_text[:10] + str(len(translate_text)) + translate_text[-10:]

uu_id = uuid.uuid1()
now_time = int(time.time())
app_id = '1111111'
app_key = '11111111111'
sign = hashlib.sha256((app_id + input_text + str(uu_id) + str(now_time) + app_key).encode('utf-8')).hexdigest()   # sign生成
data = {
    'q':translate_text,   # 翻译文本
    'from':"en",   # 源语言
    'to':"zh-CHS",   # 翻译语言
    'appKey':app_id,   # 应用id
    'salt':uu_id,   # 随机生产的uuid码
    'sign':sign,   # 签名
    'signType':"v3",   # 签名类型,固定值
    'curtime':now_time,   # 秒级时间戳
}
r = requests.get(youdao_url, params = data).json()   # 获取返回的json()内容
print("翻译后的结果:" + r["translation"][0])   # 获取翻译内容

翻译后的结果:你好!

这个API调用中引用了几个真正商用中的一些为了安全性等设置的验证信息,比如uuid、sign、timestamp,这几个在API调用中也是老生常谈的几个概念,是比较全面的。下面简单介绍一下。

uuid

uuid码:UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。使用UUID的一个好处是可以为新的服务创建新的标识符。是一种独特的唯一标识符,python 第三方库uuid 提供对应的uuid生成方式,有以下的几种 uuid1(),uuid3(),uuid4(),uuid5()上面采用的是uuid1()生成,还可以使用uuid4()生成。具体的使用方法 可以参考这篇博客。

sign

sign:一般为了防止被恶意抓包,通过数字签名等保证API接口的安全性。为了防止发送的信息被串改,发送方通过将一些字段要素按一定的规则排序后,在转化成密钥,通过加密机制发送,当接收方接受到请求后需要验证该信息是否被篡改过,也需要将对应的字段按照同样的规则生成验签sign,然后在于后台接收到的进行比对,可以发现信息是否被串改过。在上面的例子利用hashlib.sha256()来进行随机产生一段密钥,最后使用.hexdigest()返回最终的密钥。

curtime:引入一个时间戳参数,保证接口仅在一分钟内有效,需要和客户端时间保持一致。避免重复访问。

有道API的sign构造可以到对应的官方文档查看一下。因为每种API的签名构造大体都有很多不是相同的。所以一般以官方文档为主,这里对于签名的一些原理,个人只是大致了解,有想详细了解,可以自己查阅资料学习。

常用API分享

上面大致介绍了几种API的使用,但各有不同,但都是基于构造HTTP请求按照一定规则来实现的,下面补充一些可以练手也比较好用的API地址,大家可以用来平常数据获取以及学习参考。网上的API特别多,这里只是几个,有兴趣自己可以去了解,然后比较好用可以留言评论区分享出来。

1.聚合数据

2.百度大脑

3.apishop

4.百度地图

5.腾讯地图

6.有道翻译

总结

其实最近发现博客很久没更新,可能还是因为自己懒以及能力有限不知道该写什么,但上半年工作以及生活中发现,写作其实是一个很好的东西,可以把自己的想法记录下来,虽然可能很不成熟,但是其实对于自己的成长是很有帮助,写多了也就熟了,而且现在快餐式的互联网,让我们中断了很多思考,尤其是工作后发现,平常还是要多思考,多写作,也可以沉淀自己,后续会慢慢更新博客,但是频率可能不是很高,但是会慢慢多加入自己的思考和逻辑以及一些归纳,因为发现之前的博客太不成熟了哈哈哈。次也是一次成长吧,然后本人是在学数据分析数据挖掘的一个菜鸟,博客中可能出现的问题,希望大家积极指出,然后相互学习。

(0)

相关推荐

  • python调用百度语音识别api

    最近在处理语音检索相关的事. 其中用到语音识别,调用的是讯飞与百度的api,前者使用js是实现,后者用python3实现(因为自己使用python) 环境: python3.5 centos 7 流程 整个百度语音识别rest api 使用分为三部分: 1 (申请操作)创建应用,获取应用的 API Key 以及 Secret Key. 2 (程序实现)通过已知的 应用的 API Key 以及 Secret Key, 发送post 请求到 https://openapi.baidu.com/oau

  • Python 调用 zabbix api的方法示例

    前提准备: 1.使用python requests模块 2.了解json 3.zabbix api的具体调用建议先浏览一下官网 先上代码: import requests,json # #url一定要正确,IP地址换成自己zabbix服务器的 zbx_url = "http://192.168.60.130:3080/zabbix/api_jsonrpc.php" #在post请求头部必须要有 'Content-Type': 'application/json-rpc' headers

  • python调用新浪微博API项目实践

    因为最近接触到调用新浪微博开放接口的项目,所以就想试试用python调用微博API. SDK下载地址:http://open.weibo.com/wiki/SDK 代码不多十几K,完全可以看懂. 有微博账号可以新建一个APP,然后就可以得到app key和app secret,这个是APP获得OAuth2.0授权所必须的. 了解OAuth2可以查看链接新浪微博的说明. OAuth2授权参数除了需要app key和app secret还需要网站回调地址redirect_uri,并且这个回调地址不允

  • python 调用有道api接口的方法

    初学python ,研究了几天,写了一个python 调用 有道api接口程序 效果看下图: 申明:代码仅供和我一样的初学者学习交流 有道api申请地址http://fanyi.youdao.com/openapi?path=data-mode 申请很简单的 ps:审核不用花时间的,请勿滥用!! #-*- coding: UTF-8 -*- import urllib import urllib2 import requests import json import sys reload(sys

  • python调用百度API实现人脸识别

    1.代码 from aip import AipFace import cv2 import time import base64 from PIL import Image from io import BytesIO import pyttsx3 # """ 你的 APPID AK SK """ APP_ID = '1965####' API_KEY = 'YXL65ekIloykyjrT4kzc####' SECRET_KEY = 'lFi

  • python3调用百度翻译API实现实时翻译

    今天需要做一个翻译的工具,找到之前写过的有道翻译,已经不能用了,最后看到百度翻译还不错,不过官方版本是Python2,我需要Python3,就自己写了一个: # coding: utf8 ''' @Author: LCY @Contact: lchuanyong@126.com @blog: http://http://blog.csdn.net/lcyong_ @Date: 2018-01-15 @Time: 19:19 说明: appid和secretKey为百度翻译文档中自带的,需要切换为

  • python爬虫之百度API调用方法

    调用百度API获取经纬度信息. import requests import json address = input('请输入地点:') par = {'address': address, 'key': 'cb649a25c1f81c1451adbeca73623251'} url = 'http://restapi.amap.com/v3/geocode/geo' res = requests.get(url, par) json_data = json.loads(res.text) g

  • python调用api实例讲解

    我们在做自动化运维的时候,经常需要调用api中的接口,不过很多人不知道具体的调用方法,在学习python中的requests库后,我们就可以很轻松的实现了. 1.说明 api接口调用是指使用python的requests库进行访问,基本上是get或post请求,有些接口会加密,然后必须使用对方提供给我们的公钥加密或解密,配上相应的参数进行访问,我们所需要的数据在请求后的返回结果中,所看到的基本上都是json格式的解析,所以请求后可以使用requests自带的json函数进行解析,然后提取所需的数

  • python如何实现API的调用详解

    目录 前言 API 数据接口 API的调用和数据接口的调用 调用的基础-请求方法 几种常见API调用实例 百度AI相关API 百度地图API 有道API uuid sign 常用API分享 总结 前言 在日常工作中,可能需要结合网上现在的一些API或者公司提供的数据接口来得到相应的数据或者实现对应的功能. 因此API的调用和数据接口的访问都是做数据分析的一个常用操作,如何快速实现API和数据接口的调用,网上一般提供很多语言版本,但追根溯源采取的方式都是利用HTTP请求的方式来进行实现的.由于本人

  • python+requests+unittest API接口测试实例(详解)

    我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例, 问题: 测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)这些情况,其中一种情况就是一条用例,同时要保证b,c的正确,确保a的测试不受b,c参数的错误影响 解决思路: 符合接口规范的参数可以手动去填写,或者准备在代码库中.那些不符合规范的参数(不传,为空,整形,浮点,字符串,object,过短,超长,

  • Python进行Restful API开发实例详解

    目录 1. Flask-RESTful 2. fastapi + nacos服务注册 2.1 post 2.2 get请求接收list参数 2.3 请求URL进行文件下载 2.4 获取Request Headers的Authorization,并使用JWT解析 1. Flask-RESTful 1.安装pip依赖 [root@bigdata001 ~]# [root@bigdata001 ~]# pip3 install flask [root@bigdata001 ~]# [root@bigd

  • Python调用百度api实现语音识别详解

    最近在学习python,做一些python练习题 github上几年前的练习题 有一题是这样的: 使用 Python 实现:对着电脑吼一声,自动打开浏览器中的默认网站. 例如,对着笔记本电脑吼一声"百度",浏览器自动打开百度首页. 然后开始search相应的功能需要的模块(windows10),理一下思路: 本地录音 上传录音,获得返回结果 组一个map,根据结果打开相应的网页 所需模块: PyAudio:录音接口 wave:打开录音文件并设置音频参数 requests:GET/POS

  • Python API 自动化实战详解(纯代码)

    主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 common: 公共方法层 runCase :需要运行的测试用例 noRunCase :不需要运行的测试用例 testReport :这里存放生成的测试报告 2.编写common: 公共方法层 2.1 getTimestamp.py 我们在common文件夹下新建一个getTimestamp.py. 因

  • 对python中不同模块(函数、类、变量)的调用详解

    首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 需要从某个文件中引入多个函数或变量时,用逗号隔开即可 from 文件名 import 函数名,类名,变量名 接下来,通过一个具体的例子说明引入 模块的具体方法: 假设新建一个python包test2,里边有一个名为run.py的python文件,run.py文件里有一个名为running()的函数

  • python 中不同包 类 方法 之间的调用详解

    目录结构如下: 在hello.py中导入ORM.py这个文件的时候,采用 import ORMPackage.ORM 或者 import ORM u = User(id = 123, name='codiy', email='codiy_huang@163.com', password='123456') 两种方式均报错 错误提示: name '***' is not defined 或者 No module named ORM 解决办法: 方法一 将包所在的目录添加到sys.path路径 im

  • Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pass def test(func): def wrapper(self, *args, **kwargs): print(self.xx) return func(self, *args, **kwargs) return wrapper @test def test_a(self,a,b): pr

  • Python中协程用法代码详解

    本文研究的主要是python中协程的相关问题,具体介绍如下. Num01–>协程的定义 协程,又称微线程,纤程.英文名Coroutine. 首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元. 为啥说他是一个执行单元,因为他自带CPU上下文.这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程. 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的. Num02–>协程和线程的差异 那么这个过程看起来和线程差不多.其实不然, 线程切换从系统层面远不止保存和恢复 CP

  • 在Django下测试与调试REST API的方法详解

    对于大多数研发人员来说,都期望能找到一个良好的测试/调试方法,来提高工作效率和快速解决问题.所谓调试,偏重于对某个bug的查找.定位.修复:所谓测试,是检验某个功能是否达到预期效果.测试发现问题后进行调试,从而解决问题. 对于后台研发来说,往往没有客户端研发(Windows/Android等等)那样简单有效的DEBUG方法,比如Step by Step.虽然目前有很多IDE可以实现本地调试,但是因为后台研发的环境复杂,你很难在一台机器上模拟所有的环境,比如线上的数据库只能在内网访问等等,所以很多

随机推荐