Artikel ini membawa anda pengetahuan yang berkaitan tentang python, yang terutamanya memperkenalkan isu yang berkaitan dengan panggilan API, termasuk panggilan API dan panggilan antara muka data, kaedah permintaan dan beberapa contoh panggilan API Biasa dan kandungan lain, mari kita ambil lihat di bawah saya harap ia akan membantu semua orang.
Pembelajaran yang disyorkan: tutorial video python
Dalam kerja harian, anda mungkin perlu menggabungkan beberapa API semasa di Internet atau yang disediakan oleh antara muka Data syarikat untuk mendapatkan data yang sepadan atau melaksanakan fungsi yang sepadan.
Oleh itu, panggilan API dan akses antara muka data adalah operasi biasa untuk analisis data untuk mencapainya.
API: Ringkasnya, ia adalah satu set protokol, alat atau satu set peraturan yang mentakrifkan kaedah komunikasi antara aplikasi yang berbeza, menyembunyikan proses pelaksanaan khusus dan hanya mendedahkannya. bahagian yang mesti dipanggil adalah untuk digunakan oleh pembangun.
Definisi di atas agak rasmi Berikut adalah contoh mudah untuk menggambarkan Contohnya, restoran makanan segera seperti McDonald's di luar kini menggunakan telefon bimbit untuk membuat pesanan dalam talian dan mengambil makanan di meja depan. Dalam proses ini, pengguna biasanya memilih hidangan yang sepadan pada telefon bimbit mereka, mengklik untuk membuat pesanan dan membayar, dan kemudian menunggu meja depan menghubungi nombor untuk mengambil makanan. Kami tidak tahu dengan tepat bagaimana proses ini dilaksanakan Keseluruhan proses mempunyai aplikasi atau program kecil yang sepadan yang berkomunikasi dengan data dapur, dan kemudian tukang masak menyediakan hidangan. APP dan applet ini berfungsi sebagai fungsi API yang sepadan.
Untuk memberikan contoh mudah, platform sosial menerima ulasan dalam pelbagai bahasa setiap hari Sebagai penganalisis yang sepadan, adalah masalah besar untuk menangani data bahasa yang kompleks digunakan untuk melaksanakan fungsi integrasi terjemahan Walaupun kaedah ini kelihatan boleh dilaksanakan, kedua, untuk menyelesaikan masalah, masalah yang lebih sukar dibangunkan. Ini semakin jauh daripada matlamat asal Pada masa ini, kami boleh menggunakan API platform terjemahan domestik yang agak matang untuk memproses data sedia ada secara langsung. Ini agak murah, lebih mudah dan boleh mencapai matlamat sedia ada dengan cepat. Tidak ada keraguan tentang peranan API di sini.
Antara muka data: Ringkasnya, ia ialah satu set kata laluan set data terkapsul, yang bermaksud menghantar parameter yang sepadan mengikut peraturan yang sepadan, dan kemudian mengembalikan maklumat data berkaitan yang sepadan. Panggilan API dan antara muka data sangat serupa dalam panggilan harian Secara relatifnya, API mempunyai skop yang lebih luas dan melaksanakan lebih banyak fungsi, manakala antara muka data lebih berfungsi sebagai alat pemerolehan data.
Sebagai contoh, syarikat e-dagang besar biasanya menggunakan SKU bersatu untuk mengurus produk Contohnya, sebagai pemilik jenama, syarikat ini akan menjual pada platform yang berbeza, dan pada platform ini ID pengenalan produk yang dipetakan adalah berbeza daripada. SKU syarikat. Kerana SKU syarikat bukan sahaja berdasarkan produk tetapi juga mempertimbangkan pelbagai gudang tempatan dan pelbagai model produk, dan pemetaan ini agak kompleks.
Orang yang berurusan dengan data pada platform yang berbeza secara amnya tidak boleh terus menggunakan pangkalan data syarikat untuk menganalisis produk, kerana butirannya terlalu halus, menjadikan analisis lebih rumit dan sukar Pada masa ini, pembangunan boleh dijalankan mengikut keperluan fungsi yang sepadan Sesetengah sistem membangunkan antara muka data yang berasingan untuk menyediakan syarikat yang sepadan untuk mengelakkan meminta maklumat yang sepadan secara langsung seperti proses pangkalan data yang kompleks. Walau bagaimanapun, terdapat kelewatan tertentu dalam antara muka data berbanding pangkalan data masa nyata.
API dan antara muka data secara amnya mudah difahami melalui contoh sebelumnya Cara melaksanakan panggilan API dan panggilan antara muka data ada di sini Pengenalan ringkas.
Ringkasnya, panggilan API dan panggilan antara muka adalah serupa dengan permintaan HTTP Perkara utama untuk dipanggil ialah merangkum kaedah permintaan, pengepala permintaan, URL dan isi permintaan mengikut peraturan yang sepadan dan kemudian menghantar permintaan. . Ini boleh dicapai Panggilan sewajarnya.
Walau bagaimanapun, berbanding dengan panggilan antara muka data dan API, antara muka data umum adalah agak mudah Dalam kebanyakan kes, antara muka data digunakan untuk akses data pada intranet syarikat, jadi meminta maklumat adalah agak mudah. manakala API kebanyakannya adalah yang pertama Perkhidmatan luaran yang dibangunkan oleh perusahaan pihak ketiga adalah perkhidmatan komersial Secara relatifnya, untuk memastikan keselamatan permintaan, pertimbangan yang lebih komprehensif diambil, dan penambahan AK, SK, tandatangan, cap waktu. dan maklumat lain adalah lebih rumit.
Dua panggilan untuk menjejak kembali ke sumber adalah serupa dengan permintaan HTTP, dan panggilan khusus adalah lebih kurang sama Perkara utama ialah maklumat parameter permintaan yang terkandung dalam panggilan API adalah lebih banyak. Pelaksanaan khusus akan diperkenalkan secara ringkas di bawah.
Secara amnya, terdapat banyak kaedah panggilan permintaan HTTP yang biasa terdapat di kawasan ini. Anda boleh menyemaknya secara dalam talian yang biasa.
GET request hanya mendapatkan sumber daripada pelayan dan boleh dimuatkan ke dalam cache penyemak imbas.
Permintaan POST biasanya menghantar permintaan kepada pelayan dalam bentuk borang Parameter permintaan yang disertakan dalam badan permintaan boleh membawa kepada penciptaan dan perubahan sumber . Maklumat daripada permintaan POST tidak boleh dicache dalam penyemak imbas.
Kedua-dua kaedah permintaan ini sangat mudah untuk dikatakan, tetapi perkara yang paling penting ialah memahami perbezaan antara kedua-dua permintaan ini, supaya menjadi lebih biasa dengan reka bentuk antara muka dan penggunaan API.
1 Panjang permintaan maksimum permintaan GET ialah 1024kb, dan POST tiada had pada data permintaan. Sebab untuk ini adalah bahawa banyak kali permintaan GET meletakkan maklumat yang sepadan dalam URL, dan panjang URL adalah terhad, menyebabkan had tertentu pada panjang permintaan GET. Maklumat parameter yang sepadan untuk permintaan POST diletakkan dalam badan permintaan, jadi ia biasanya tidak tertakluk kepada sekatan panjang.
2. Permintaan POST lebih selamat daripada GET, kerana URL dalam permintaan GET mengandungi maklumat yang sepadan, halaman akan dicache oleh penyemak imbas, dan orang lain boleh melihat maklumat yang sepadan.
3.GET menjana satu paket data TCP, dan POST menjana dua paket data TCP.
Apabila membuat permintaan GET, pengepala dan data dihantar bersama, dan kemudian pelayan bertindak balas dengan 200. POST mula-mula menghantar pengepala, menunggu pelayan membalas dengan 100, kemudian menghantar data, dan akhirnya pelayan bertindak balas dengan 200. Tetapi ambil perhatian di sini bahawa permintaan POST dibahagikan kepada dua kali, tetapi badan permintaan dihantar serta-merta selepas pengepala , jadi ini Masa di antara boleh diabaikan.
4. Permintaan GET hanya menyokong pengekodan URL, manakala POST mempunyai pelbagai kaedah pengekodan.
5. Parameter permintaan GET dihantar melalui URL, berbilang parameter disambungkan dengan &, dan permintaan POST diletakkan dalam badan permintaan.
6. Permintaan GET hanya menyokong aksara ASCII, manakala POST tidak mempunyai sekatan.
Secara umumnya, permintaan GET boleh diakses terus dengan memasukkan URL dalam penyemak imbas.
Di atas memperkenalkan beberapa antara muka data, pengetahuan berkaitan API dan kaedah permintaan dalam jumlah masa yang banyak gunakan. Perkara berikut boleh diringkaskan Biasakan dengan kaedah permintaan yang sepadan. Secara amnya, anda boleh menggunakan perpustakaan permintaan Python secara langsung.
import request # GET请求发送的参数一定要是字典的形式,可以发送多个参数。 # 发送格式:{'key1':value1', 'key2':'value2', 'key3', 'value3'} # 样例不能运行 url ='http://www.xxxxx.com' params = {'user':'lixue','password':111112333} requests.get(url,data = parms)
Permintaan POS biasanya mempunyai tiga borang penyerahan: permohonan/x-www -form-urlencoded, multipart/form-data, application/json.
Semak secara khusus yang mana antara tiga kaedah permintaan ialah: Semakan Google Chrome → Rangkaian → Pilih untuk memuatkan fail → Pengepala → Pengepala Reuqest → Jenis Kandungan
Kaedah pengekodan khusus ialah tiga berikut Anda boleh memahami pelaksanaan permintaan khusus Secara amnya, antara muka data dalaman syarikat disediakan dengan rangkaian kawasan setempat, jadi sesetengahnya tidak perlu menambah pengepala.
1 Data penyerahan jawatan yang paling biasa ialah borang: 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)
data = {'user':'lixue','password':12233} data_json = json.dumps(params) requests.post(url,headers = headers,data = data_json)
files = {'files':open('c://xxx.txt','rb')} requests.post(url = url,headers = headers,files = files)
Contoh kecil ini menggunakan antara muka API cuaca untuk mendapatkan cuaca dalam tempoh 15 hari yang lalu. Ingat untuk mendapatkan apiKey yang sepadan dan semak dokumentasi penggunaan khusus sebelum menggunakan API ini. Laman web API ini secara amnya menyediakan bilangan masa lapang tertentu untuk API yang sepadan, yang boleh digunakan untuk pembelajaran dan menyokong permintaan GET dan POST. Tepat untuk berlatih.
params = { "apiKey":'换成你的apikey', "area":'武汉市', } url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea' response = requests.get(url,params) print(response.text)
url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea' params = { "apiKey":'换成你的apikey', "area":'武汉市武昌区', } response = requests.post(url,params) print(response.text)
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)
import requestsimport pandas as pd import numpy as npimport jsondef 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 responsedef 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_dataif __name__ == '__main__': print("请输入对应的城市") web_data = get_url(input()) weather_data = extract_data(web_data)
# 销售状态查询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
### 库存数据查询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是市面上面比较成熟的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当时为了设计一个推荐体系引入经纬度换算地址,这样为数据计算带来极大的方便,而且对于一般人来说文本地址相比经纬度信息更加直观,然后结合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,它的安全性以及具体的实现都相对复杂,但是更适合商用。下面可以简单看看。
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[: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是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。使用UUID的一个好处是可以为新的服务创建新的标识符。是一种独特的唯一标识符,python 第三方库uuid 提供对应的uuid生成方式,有以下的几种 uuid1(),uuid3(),uuid4(),uuid5()上面采用的是uuid1()生成,还可以使用uuid4()生成。
sign:一般为了防止被恶意抓包,通过数字签名等保证API接口的安全性。为了防止发送的信息被串改,发送方通过将一些字段要素按一定的规则排序后,在转化成密钥,通过加密机制发送,当接收方接受到请求后需要验证该信息是否被篡改过,也需要将对应的字段按照同样的规则生成验签sign,然后在于后台接收到的进行比对,可以发现信息是否被串改过。在上面的例子利用hashlib.sha256()来进行随机产生一段密钥,最后使用.hexdigest()返回最终的密钥。
curtime:引入一个时间戳参数,保证接口仅在一分钟内有效,需要和客户端时间保持一致。避免重复访问。
推荐学习:python视频教程
Atas ialah kandungan terperinci Penjelasan terperinci dan contoh panggilan API dalam python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!