天天速讯:【数据分析】如何快速实现API和数据接口的调用?
在日常工作中,可能需要结合网上现在的一些API或者公司提供的数据接口来得到相应的数据或者实现对应的功能。 因此API的调用和数据接口的访问都是做数据分析的一个常用操作,如何快速实现API和数据接口的调用,网上一般提供很多语言版本,但追根溯源采取的方式都是利用HTTP请求的方式来进行实现的。由于本人常用Python,本篇文章也主要采用Python来作为工具来进行介绍如何操作。
文章目录
API数据接口API的调用和数据接口的调用调用的基础-请求方法 GET 请求POST 请求GET和POST请求的区别Python实现GET请求和POST请求 GET请求POST请求 POST请求的三种提交形式 一个简单API请求的实例 GET请求POST请求数据提取 数据接口实例 POST请求调用数据接口GET请求调用数据接口 几种常见API调用实例 百度AI相关API百度地图API有道API uuidsign 常用API分享总结
【资料图】
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 requestdata={"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 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:UserszhangfengDesktop最近十五天天气.xlsx",index = None) return weather_dataif __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 AipNlpAPP_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 pdimport numpy as npimport warningsimport requestsimport urllibimport hashlibimport jsonfrom geopy.distance import geodesiclocation = input("输入所在的位置") # "广州市天河区"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获取返回的jsonresponse = 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 requestsimport timeimport hashlibimport uuidyoudao_url = "https://openapi.youdao.com/api" # 有道api地址translate_text = "how are you!"input_text = ""# 当文本长度小于等于20时,取文本if(len(translate_text) <= :="" input_text="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.有道翻译
总结
其实最近发现博客很久没更新,可能还是因为自己懒以及能力有限不知道该写什么,但上半年工作以及生活中发现,写作其实是一个很好的东西,可以把自己的想法记录下来,虽然可能很不成熟,但是其实对于自己的成长是很有帮助,写多了也就熟了,而且现在快餐式的互联网,让我们中断了很多思考,尤其是工作后发现,平常还是要多思考,多写作,也可以沉淀自己,后续会慢慢更新博客,但是频率可能不是很高,但是会慢慢多加入自己的思考和逻辑以及一些归纳,因为发现之前的博客太不成熟了哈哈哈。次也是一次成长吧,然后本人是在学数据分析数据挖掘的一个菜鸟,博客中可能出现的问题,希望大家积极指出,然后相互学习。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
标签:
相关推荐:
最新新闻:
- 如何成为一名优秀的产品经理?这四步很重要
- 天天简讯:userdata.dll丢失怎么办?解决方法来了
- 怎么设置excel2007冻结窗口?excel2007冻结窗口设置方法:环球热消息
- 天天快资讯丨欧几里德几何的多目标优化自适应进化算法——AGE-II
- 天天速讯:【数据分析】如何快速实现API和数据接口的调用?
- 永恒之塔无法连接到认证服务器怎么办?解决方法步骤
- 科技创新赋能美好出行 雅迪助力电动车行业高质量发展
- 天涯明月刀:1月第1批天涯合璧-数据互通(合服)即将启动-环球新资讯
- SIS与ESD、DCS、PLC,四者之间有什么关系?一文读懂SIS与DCS的关系:新动态
- 如何发布一个BT种子文件?2个步骤搞定
- 泛海微无线电动牙刷怎么样?无线充电电动牙刷技术介绍 天天讯息
- 《魔兽世界》所改编的网络游戏单机版 你玩过吗?
- 冬季家用洗碗机怎么样?家用洗碗机使用特点
- 徕卡镜头有哪些型号?徕卡镜头大全以及报价镜头 每日看点
- 世界速讯:java中的TCP是什么?如何进行通讯?
- 求生之路2怎么局域网联机?局域网联机方法详解
- 三星S5660手机配置怎么样?三星S5660如何设置时间和日期?
- 当前热门:多普达手机如何鉴别?多普达手机行货验证介绍
- 世界今亮点!QQ网络硬盘在哪?如何添加QQ界面?
- 对象优先在eden区分配内存吗?堆中分配内存的对象有哪些?
- 每日视讯:Sora套装 迪卡侬入门公路3949元
- 当前报道:如何设置默认浏览器?谷歌浏览器设置默认Tip流程
- 焦点速递!什么是SEM?SEM和SEM有什么区别?
- 世界短讯!【pycharm】1.8.0+cuda111的运行环境
- 599美元香吗?RTX4070价格泄露
- 今日热搜:华为g525可以刷鸿蒙系统吗?华为g525强刷官方rom系统的教程
- 戴尔笔记本电脑多少钱?戴尔笔记本电脑价格大全 热消息
- 环球快资讯:网站服务器如何防御ddos攻击?教你一招
- ChatGPT对手 Bard将大幅度升级_环球热点评
- 焦点快看:CSS文件中的中文字体名称怎么写?CSS常用的中文字体名称对照表
- 天天简讯:联想ThinkPad有哪些型号?联想ThinkPad各系列型号介绍
- 时讯:ppt中的控件工具箱——ShockwaveFlash
- 热推荐:动态语言:C、PHP、Perl、Ruby哪个更适合你?
- 安卓设备的USB周边和安卓USB配件如何调试?具体操作方法
- 每日短讯:什么是视频会议系统?视频会议的发展及标准有哪些?
- qq字体怎么设置?qq聊天字体设置教程-天天热议
- CCFL是什么?CCFL背光屏有哪些优缺点?|当前视讯
- 焦点热讯:iPhone5怎么升级ios7?8款苹果设备升级更新
- IUNI U3的手机系统是什么?IUNI U3能升级安卓4.3吗?
- 专业数字录音机价格是多少钱?买哪种品牌?|每日速读
- 驱动到底是什么?我们应该如何安装和更新驱动?
- 破发了!RTX 3060Ti史低价2899元-环球快播报
- 回南天除湿机12L只要479元-全球速看料
- 摄像机的焦距是什么意思?摄像机焦距对应距离介绍_微动态
- 互联网广告表现形式有哪些?一文读懂互联网广告分类及收费方式-焦点快看
- 笔记本电脑电池如何校准电量?教你一招
- 华为光纤猫指示灯有什么用?华为光纤猫指示灯功能介绍:全球新资讯
- 每日动态!解析ElasticSearch ElasticSearch字段类型解析
- 每日看点!CentOS怎么升级Proftpd?CentOS升级Proftpd教程
- 无线数字电视怎么搜台?无线数字电视搜台步骤介绍
- 焦点快看:CSS文件中的中文字体名称怎么写?CSS常用的中文字体名称对照表
- SEO优化中如何利用爱站工具去分析搜索引擎蜘蛛?
- 焦点简讯:【技术】空间光调制器与激光加工技术的应用介绍
- 【世界新视野】Windows生态系统:限制用户的应用程序
- 世界要闻:三极管进入截止区与饱和区的条件及制作方法
- 每日看点!CentOS怎么升级Proftpd?CentOS升级Proftpd教程
- 安卓设备的USB周边和安卓USB配件如何调试?具体操作方法
- ClamAV病毒扫描工具怎么安装?ClamAV3.扫描工具安装使用教程
- 每日动态!解析ElasticSearch ElasticSearch字段类型解析
- 世界短讯!【pycharm】1.8.0+cuda111的运行环境
- 索尼新蓝牙耳机曝光!售价120欧 满电续航20小时 环球观点
- 全球新消息丨愚人节整活:卡普空推出猫猫专用《街霸6》对战设备
- PS开始在家电领域与Xbox竞争 PS愚人节视频公开 环球头条
- 《原神》公布3.6版本「盛典与慧业」4月12日上线 看点
- 全球快看:凶不露齿!美国新研究显示霸王龙也有嘴唇
- 性能稳了!曝三星Galaxy S24系列存储将从256GB起步,内存从8GB提升至12GB|当前动态
- HyperX全新推出Cloud2O Hydration耳机 帮助玩家“随时补充水分”
- 极氪 009 迎来首次 OTA 升级,ZEEKR OS 3.6 更新来袭
- 每日快看:《师父》登Steam四天销量破5万份 好评率高达94%
- 【环球热闻】卡普空猫猫专用设备发布!速同猫猫在《街霸6》中PK
- Epic老板蒂姆·斯威尼:我讨厌游戏中的广告|世界热议
- 欲购从速!PlayStation次世代智能家电公布 当前头条
- 吉田修平:很想看到独立开发者对于生成AI技术的应用|天天热闻
- 最新:Xbox高管认为Game Pass业务不会颠覆行业模式
- 环球快看:《辐射4》高清材质包 提升画质的同时保留原版速度
- 《半条命:艾利克斯》无VR MOD最新版本发布-当前速讯
- 地板下面有水怎么处理:新要闻
- WWDC 2023定档:iPhone X惨被抛弃!_天天热文
- iPhone15 Pro颠覆了17年的设计
- 苹果MR头显无码组件曝光
- 原厂颗粒内存新低价99元!
- 贵州茅台日赚1.72亿元:超额完成任务 业绩增速创三年来新高:环球最资讯
- 全球微头条丨漫威《秘密入侵》新剧照:龙妈搭档妈惹法克侠
- 每日快报!旭辉控股:收到匿名信称对总额18亿元交易提出质疑,延期发布2022年业绩
- 没人来!主办方谈E3取消:厂商退出的挑战难以克服-时讯