Python实战 | 如何使用 Python 调用 API

news2024/11/15 9:11:01

**本文目录
**

一、前言

二、调用浙江·数据开放平台API获取数据

(一)API获取数据的流程

(二)HTTP请求

(三)API的参数

(四)使用request库获取API数据

三、调用百度通用翻译API

**四、**总结

本文共8914个字,阅读大约需要23分钟,欢迎指正!

Part1引言

API 的全称为"Application Programming Interface",即“应用程序编程接口”,是一组定义了不同软件组件之间如何相互通信的规则和协议,不同的软件系统可以通过 API 来交换数据和功能,以实现特定的任务目标。通过 API,我们就可以利用其他软件系统的功能,而不需要详细了解其内部是如何实现的。

在如下两篇文章中,我们介绍了如何使用 Python 来调用高德公司提供的地理服务 API 以及百度公司提供的图像识别 OCR API,从而可以借助地理编码和逆地理编码来自由地转换文本地址和经纬度,并且也能够通过 OCR 技术将不可读取的 PDF 或图片中的表格读到 Excel 中。

数据治理 | 根据地址获取经纬度及行政区划——API的妙用

数据治理 | 还在人工识别表格呢?Python 调用百度 OCR API 又快又准

那么为什么再次介绍 API 呢?我们的目的是向大家介绍 API 的相关概念,以及如何使用 Python 中的requests包来调用 API 以获得数据或实现相应功能,更具有普适性,下面我们将通过两个例子展开介绍本文内容。

本教程基于 pandas 1.5.3 版本书写。

本文中所有 Python 代码均在集成开发环境 Visual Studio Code (VScode) 中使用交互式开发环境 Jupyter Notebook 中编写。

Part2调用浙江·数据开放平台 API 获取数据

我们首先介绍如何调用 API 来获取数据,浙江·数据开放平台是一个免费向用户提供数据接口服务、通过接口对接实现数据获取和开发利用的政府平台,平台对每项数据都提供 3 个接口,包括总数接口、分页接口和更新时间查询接口,分别用于查询数据集包含的数据总条数、分页调取数据,以及判断当前数据是否已更新。在本例中我们使用浙江·数据开放平台提供的“浙江省粮食企业信用评价结果信息接口获取浙江省粮食企业信用评价数据,该接口由浙江省粮食物资局发布,我们使用其中的分页接口。

💡 需要说明一点,实际中我们在使用一个 API 之前,第一步,也是最重要的一步,就是需要仔细阅读 API 的相关文档,了解其功能、参数等重要信息,然后才是后面的流程。

1API 获取数据的流程

上文提到,API 是一组定义了不同软件组件之间交互的规范,交互过程中 API 可以使用不同的通信协议,其中最常用的是 HTTP。HTTP (“Hypertext Transfer Protocol”,超文本传输协议) 是一种用于在网络上发送和接收超文本的协议,它提供了一种可靠的方式来发送请求和接收响应,想象一下你使用浏览器访问一个网站,当在浏览器中输入网址并按下回车键时,浏览器会向服务器发送一个 HTTP 请求,这个请求会告诉服务器你想要浏览哪个网页或资源;当服务器接收这个请求后,会处理请求并生成一个响应,响应包含请求的内容,例如网页的 HTML 代码、图像等其他资源,服务器将响应发送回浏览器,浏览器解析响应并将内容显示在屏幕上,这种通信协议具有广泛的支持和易用性。

下面是调用 API 获取数据的流程:

GET 请求和 POST 请求是 HTTP 协议中最常见的两种请求方法,用于客户端与服务器之间的数据交互,两者的区别主要在传输安全性、传输方式、数据长度和数据缓存几个方面(由于篇幅原因,我们在这里不详细展开介绍)。

我们在调用 API 时应该根据具体的需求和安全性考虑,来选择使用 GET 请求还是 POST 请求。一般情况下如果只是获取少量数据且不涉及敏感信息,可以使用 GET 请求,如果需要向服务器提交数据,或者数据量较大,可以使用 POST 请求。

2HTTP 请求

HTTP 请求是在 HTTP 协议下的一种数据格式,用于向服务器发送请求,其通常由请求行、请求头和请求体三部分构成,请求头和请求体之间用空行隔开,其中各部分包含的信息如下:

  1. 请求行 (Request Line):包括请求方法 (GET请求、POST请求等)、请求的 URL 和协议版本。

  2. 请求头 (Request Headers):包括一些关于请求的附加信息,如 User-Agent(用户代理,标识请求的客户端类型等)、Content-Type(指定请求体中发送的数据的类型)等。

  3. 请求体 (Request Body):HTTP 请求中可选的组成部分,用于向服务器传递请求所需的参数或数据,如表单数据、JSON 数据等。

GET 请求通过 URL 的查询字符串将参数传递给服务器,也就是说参数会附加在 URL 的末尾,而 POST 请求将参数放在请求体中传递给服务器,所以通常情况下 GET 请求的请求体为空,POST 请求的请求体不为空。

3API 的参数

通常在调用 API 时需要关注公共参数、请求参数和响应参数这三种参数,其中各部分包含的信息如下:

  1. 公共参数:调用 API 时经常使用的通用参数,用于标识请求的身份、版本、签名等信息,这些参数在调用不同 API 时不会随着 API 的变化而变化。

  2. 请求参数:调用具体的 API 时需要提供的参数,用于描述请求的具体内容(如传递查询条件、分页信息等),这些参数是必需的还是可选的需要根据具体 API 的设计而定。

  3. 响应参数:API 调用成功后返回的信息,通常包括 API 调用结果的状态码、错误信息、返回的数据等。根据 API 的设计,响应参数的内容和格式可能会有不同。

公共参数和请求参数是用于发起 API 请求的,而响应参数是 API 返回的结果,需要注意一点,不同的 API 可能有不同的参数要求。

本例中需要获取浙江省粮食企业信用评价数据,根据分页数据获取接口的介绍,该 API 设计的参数如下:

参数名称类型说明
appsecretString用户应用识别码,通过申请获得
pageNumInt页数
pageSizeInt每页个数(不超过200)

上表中的参数appsecret为公共参数,pageNumpageSize为请求参数。

参数名称类型说明
statusInt0代表失败,1代表成功
msgString返回信息
dataJSON返回数据

上表中的三个参数为响应参数,用于返回请求的结果,我们只需要根据参数的名称就可以在返回的响应信息中提取相应的内容。当然在使用浙江省数据开放平台接口前,需要先完成用户注册并登录平台创建数据应用、完善应用信息,应用信息保存后即可进行接口申请,在接口申请审核通过后,就可以进行数据接口对接工作,操作流程见下图:更加详细的注册和申请流程见官方提供的接口服务使用手册,本文不再赘述。

4使用 requests 库获取 API 数据

如果你了解过网页爬取或 API 交互,那么你应该对 requests 库并不陌生,requests 是一个常用于发送 HTTP 请求并处理响应的 Python 库,其中requests.get()requests.post()是常用的两个函数,它们分别用于发送 GET 请求和 POST 请求。

函数requests.get()的基本用法如下:

import requests   response = requests.get(url='https://api.example.com/data')   

上述代码会发送一个 GET 请求到https://api.example.com/data(即参数 url),并且将响应结果保存在变量response中。此外该函数还有一个常用的可选参数params用于传递查询参数,其中的参数会自动添加到 URL 中,代码如下:

params_value = {'key1':'value1', 'key2':'value2'}   response = requests.get('https://api.example.com/data', params=params_value)   

上述代码将发送 GET 请求到https://api.example.com/data?key1=value1&key2=value2。除了参数urlparams,函数requests.get()还有一些其他的可选参数,比如参数headers用于设置请求头、timeout用于设置请求超时时间、cookies用于设置请求的 Cookie 值等等。

函数requests.post()的基本用法类似,除了参数url,该函数的可选参数data用于传递请求数据,代码如下:

import requests   params_value = {'key1':'value1', 'key2':'value2'}   response = requests.post('https://api.example.com/data', data=params_value)   

上述代码将发送 POST 请求到https://api.example.com/data,并将params_value作为请求数据发送到服务器,当然也可以使用参数json来发送 JSON 数据,若设置参数json=params_value会自动将数据转换为 JSON 格式并发送到服务器,此外,函数requests.post()还有其他的可选参数,这里就不多介绍了。

下面我们将分别使用 requests 库中的函数requests.get()requests.post()来获取浙江省粮食企业信用评价数据,以下是 Python 代码:

import requests   import pandas as pd      # GET 请求   def data_get(pageNum, pageSize, appsecret, url):       '''       pageNum: 页数       pageSize: 每页个数(不超过200)       appsecret: 应用识别码(申请获得)       url: api 接口       '''       # 以字典形式编辑查询参数       parameters = {'pageNum':pageNum, 'pageSize':pageSize, 'appsecret':appsecret}          # 发送 GET 请求,返回一个包含服务器响应信息的 response 对象       response = requests.get(url = url, params = parameters)              # HTTP 响应状态码为 200 表示请求成功,服务器成功处理了请求       if response.status_code == 200:           # 响应信息中status为 1,表示成功获取数据           if response.json()['status'] == 1:               ## 提取响应结果中返回的数据data,并转换为dataframe               data = pd.DataFrame(response.json()['data'])           else:               # 响应信息中status不为 1,表示获取数据失败,需进一步检查原因               print(response.json())       else:           # HTTP 响应状态码不为 200 时,提示“URL未正常响应请求”           raise Exception('URL未正常响应请求')       return data      data = data_get(pageNum = 1,                    pageSize = 200,                     appsecret = '申请的 APP 识别码',                     url = 'http://data.zjzwfw.gov.cn/jdop_front/interfaces/cata_18444/get_data.do')   data   
# POST 请求   def data_post(pageNum, pageSize, appsecret, url):       # 以字典形式编辑请求体       data_value = {'pageNum':pageNum, 'pageSize':pageSize, 'appsecret':appsecret}       # 发送 POST 请求,返回一个包含服务器响应信息的 response 对象       response = requests.post(url = url, data = data_value)              if response.status_code == 200:           # 响应信息中status为1,表示成功获取数据           if response.json()['status'] == 1:               data = pd.DataFrame(response.json()['data'])           else:               print(response.json())       else:           raise Exception('URL未正常响应请求')       return data      data = data_post(pageNum = 1,                     pageSize = 200,                     appsecret = '申请的 APP 识别码',                     url = 'http://data.zjzwfw.gov.cn/jdop_front/interfaces/cata_18444/get_data.do')   data # 结果同上   

使用函数requests.get()requests.post()这两种请求方式得到的结果相同,该数据包含企业名称、统一社会信用代码、得分和等级四个字段,共107条数据,如下:

Part3调用百度通用翻译 API

百度翻译开放平台是百度翻译面向广大开发者提供开放服务的平台,通用翻译 API 是该平台提供的服务之一。通用翻译 API 通过 HTTP 接口对外提供多语种互译服务,我们只需传入待翻译的内容,并指定要翻译的源语言和目标语言种类,即可想要的翻译结果,下面我们就来介绍如何调用此API。

根据官方提供的通用翻译 API 接入文档,调用此 API 支持 GET 或 POST 方式,如果需要使用 POST 方式,需要指定 Content-Type 为 application/x-www-form-urlencoded。首先我们先来看通用翻译 API 需要的输入参数,如下表所示:

参数名称说明
q待翻译内容,UTF-8 编码,长度不超过 6000 bytes
from翻译源语言
to翻译目标语言
appid平台分配的应用程序的标识符
salt随机数(盐值)
signappid+q+salt+密钥做 MD5 后得到的 32 位小写签名

为了确保调用 API 的安全性,通用翻译 API 要求使用参数sign对请求进行签名,签名由平台分配的 appid、待翻译内容 q、随机值 salt 和密钥四部分构成,其生成方法为:将 appid、q、salt、密钥按顺序连接成一个字符串,再对该字符串做 MD5 计算,就可以获得 32 位小写的 sign。

成功调用 API 后返回 JSON 格式的响应结果,其中包含以下输出参数:

官方对输入参数和输出参数有更详细的说明,可自行进一步了解

参数名称类型说明
fromString翻译源语言
toString翻译目标语言
trans_resultArray翻译结果,包括原始内容 (src) 和翻译结果 (dst)
error_codeInt错误码,仅在出现错误时显示,详细含义和解决方案见通用翻译 API 接入文档

下面我们就来调用通用翻译 API ,实现代码如下:

import requests   import random   from hashlib import md5      # GET 请求   def trans_Baidu_GET(query, APPID, APPKEY, fromlanguage = 'auto', tolanguage = 'en', action = 0):       '''       query: 待翻译内容       APPID: 申请的 APP ID       APPKEY: 申请的密钥       fromlanguage: 待翻译语言; 'auto' 表示自动识别       tolanguage: 翻译目标语言; 'zh' 表示中文       * 语言代码见: https://api.fanyi.baidu.com/doc/21          action: 1: 使用自定义术语干预API; 0: 不使用自定义术语干预API       '''       # 定义函数,作用是进行 MD5 并将散列值转换为 16 进制       def make_md5(s, encoding = 'utf-8'):           return md5(s.encode(encoding)).hexdigest()              # 在 32768 至 65536 的范围内取随机数       Salt = random.randint(32768, 65536)       # 使用 APPID、请求 query、随机数和密钥构成签名       Sign = make_md5(APPID + query + str(Salt) + APPKEY)          # 发送请求的 URL       url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'       # 以字典形式编辑查询参数       parameters = {'appid': APPID, 'q': query, 'from': fromlanguage, 'to': tolanguage, 'salt': Salt, 'sign': Sign}          # 返回响应信息,并提取响应中的翻译结果       response = requests.get(url, params = parameters)       result_list = response.json()['trans_result']       ## 提取翻译结果中的翻译后内容 (dst)       result = '\n'.join(item['dst'] for item in result_list)       return result         # POST 请求   def trans_Baidu_POST(query, APPID, APPKEY, fromlanguage = 'auto', tolanguage = 'zh', action = 0):       # 定义函数,作用是进行 MD5 并将散列值转换为 16 进制       def make_md5(s, encoding = 'utf-8'):           return md5(s.encode(encoding)).hexdigest()       Salt = random.randint(32768, 65536)       Sign = make_md5(APPID + query + str(Salt) + APPKEY)             # 发送通用翻译请求的 URL       url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'       # 根据 API 接入文档,指定 Content-Type 为 application/x-www-form-urlencoded       headers = {'Content-Type': 'application/x-www-form-urlencoded'}       parameters = {'appid': APPID, 'q': query, 'from': fromlanguage, 'to': tolanguage, 'salt': Salt, 'sign': Sign}          # 保存响应,并提取响应中的翻译结果       response = requests.post(url, params = parameters, headers = headers)       result_list = response.json()['trans_result']          # 提取翻译结果中的翻译后内容 (dst)       result = '\n'.join(item['dst'] for item in result_list)       return result   

在上面的代码中,我们定义了函数trans_Baidu_GET()trans_Baidu_POST(),两个函数分别使用 GET 请求和 POST 请求调用通用翻译 API。它们的功能是相同的,在调用函数时,我们只需要输入待翻译原文(默认自动识别语种)、APPID 和密钥,即可得到翻译的结果(默认英文),当然如果想要翻译其他语种或者修改翻译的目标语言,可以通过指定参数fromlanguagetolanguage来实现。

当然我们也可以实现批量翻译多条语句,只需要将各个语句用换行符\n隔开,此时翻译结果也使用换行符\n输出。现在我们来调用上述函数,代码如下:

APPID = '分配的 APPID'   APPKEY = 'APPID 对应的密钥'   # GET 请求   answer1 = trans_Baidu_GET('成为企研·社科大数据平台会员,用最独家的数据,学最实用的Python,画最酷的图!', APPID, APPKEY)   answer1     '''   Become a member of the Enterprise Research Social Science Big Data Platform, use the most exclusive data, learn the most practical Python, and draw the coolest pictures!   '''      # POST 请求   answer2 = trans_Baidu_POST('成为企研·社科大数据平台会员,\n用最独家的数据,\n学最实用的Python,\n画最酷的图!', APPID, APPKEY)   answer2    '''   Becoming a member of the Enterprise Research · Social Science Big Data Platform,   Using the most exclusive data,   Learn the most practical Python,   Draw the coolest picture!   '''   

Part4总结

本文介绍了 API 是如何实现访问外部数据和功能的,也对 HTTP 协议以及两个常用的请求方式——GET 请求和 POST 请求做了简单介绍,然后通过两个例子演示了如何利用 Python 中的 requests 库实现 API 的调用,并解析返回的响应结果来获得相应的内容,也向大家展示了两种请求方式的异同点,希望对大家有所帮助。

下期文章我们将以本期调用 API 的功能为基础,为大家介绍如何使用 OpenAI 公司的 API 实现 chatgpt 的连续对话功能,为我们的数据处理和分析助力!敬请期待!

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理方法论:6. 正视团队冲突——化解危机,长治久安

概念 团队冲突指的是两个或两个以上的团队在目标、利益、认识等方面互不相容或互相排斥,从而产生心理或行为上的矛盾,导致抵触、争执或攻击事件。 参考: https://baike.baidu.com/item/%E5%9B%A2%E9%98%9F%E5%86%B2%E7%AA%81/6747073 htt…

PAL/NTSC/1080I和interlaced scan(隔行扫描)

目录 1.PAL/NTSC和1080I 2.PAL/NTSC/1080I的timing 2.1 NTSC的垂直同步 2.2 PAL的垂直同步​编辑 2.3 1080i50FPS的vic20的时序 3.interlaced video timing实现说明 1.PAL/NTSC和1080I NTSC 和PAL 是两种不同视讯标准, 两种都是CRT时代遗留下的产物, 也都使用Interlace技术…

深度学习-卷积神经网络-卷积图像去噪边缘提取-图像去噪 [北邮鲁鹏]

目录标题 参考学习链接图像噪声噪声分类椒盐噪声脉冲噪声对椒盐噪声&脉冲噪声去噪使用高斯卷积核中值滤波器 高斯噪声减少高斯噪声 参考学习链接 计算机视觉与深度学习-04-图像去噪&卷积-北邮鲁鹏老师课程笔记 图像噪声 噪声点,其实在视觉上看上去让人感…

JAVA面向对象(OOP)总结----宏观的程序设计

类:使用关键字class,抽象的概念集合。例如人类,具有共性的产物。 对象:具有自己独立属性,具有个性的个体。 类中可以定义的内容: 成员变量(属性);成员方法(…

内网穿透:实现远程访问和测试内部网络的关键技术

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 内网穿透是一项重…

基于ssm的蛋糕预定网站

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

BLCD无刷电机三相电流采样说明与总结

最近在在搞无刷电机电流采集,查了跟多资料,做个小记录,只记录低端和高端的三电阻采集,因为双电阻和但电阻比较麻烦,脑子不够用。 一、高端电流采样 高端采样:如上图(红色波形)&…

Allure的下载和部署

介绍 Allure是一个功能强大的测试报告和测试管理框架,旨在提供清晰、易于理解的测试结果。它支持多种编程语言和测试框架,并提供了丰富的图形化报告,包括图表、图像和日志,以帮助团队更好地分析和诊断测试问题。 下载 这里提供…

老站长带你全面认识基站和天线

认识基站 作为数量最多的移动通信设备 基站几乎是随处可见 其实 基站也分为很多种 基站的天线,也分为很多种,真正都能区分清楚的人其实不多。 什么是基站 Base Station 一般特指“公用移动通信基站” 大家都知道,基站就是给手机提供信…

uni-app 实现自定义按 A~Z 排序的通讯录(字母索引导航)

创建 convertPinyin.js 文件 convertPinyin.js 将下面的内容复制粘贴到其中 const pinyin (function() {let Pinyin function(ops) {this.initialize(ops);},options {checkPolyphone: false,charcase: "default"};Pinyin.fn Pinyin.prototype {init: functi…

在IntelliJ IDEA 中安装阿里P3C以及使用指南

在IntelliJ IDEA 中安装阿里P3C以及使用指南 1.关于阿里p3c1.1说明1.2什么是P3C插件1.3p3c的作用是什么 2 如何在IDEA中安装p3c2.1 插件安装2.2 插件使用 1.关于阿里p3c 1.1说明 代码规范检查插件P3C,是根据《阿里巴巴java开发手册(黄山版)》转化而成的自动化插件…

pdf转cad怎么弄?教你这几种快速转换cad的方法

pdf转cad怎么弄?随着CAD软件的广泛应用,将PDF文件转换为CAD文件的需求也越来越大。虽然市面上有很多PDF转CAD的软件,但是很多软件操作复杂,转换效果并不理想。今天就给大家推荐几种简单方便的转换方法。 方法一:迅捷PD…

arm day2(9.15)数据操作指令,跳转指令,特殊功能寄存器指令,

作业 1.求最大公约数&#xff1a; .text .global _start _start:mov r0,#0x9mov r1,#0x15bl Loop Loop:cmp r0,r1 比较r0寄存器和r1寄存器的中的值beq stop 当两数相同时,退出程序subhi r0,r0,r1 r0>r1 r0 r0 - r1subcc r1,r1,r0 r0<r1 r1 r1 - r0mov pc,lr 恢复现…

Year 2038 problem

前情回顾 已经知道,对于int了tinyint了这些MySql类型,后面那个4或者11没啥实际意义,只是说(当位数不足时)前面填充多少个0,然后使之变为4位或者11位,对这个类型的字段实际能存的长度没啥影响. 即占据1个Byte的tinyint类型,最多就能表征256个不同值. 可以表征无符号的连续数字0-…

在工作流引擎设计领域,是否自动计算未来的处理人的设计模式有哪些?

概述 流程的第一个节点发送下去的时候&#xff0c;就要把以后所有节点的处理人计算出来,能清楚的知道每个节点都是那些人处理. 以驰骋bpm为例来说明这个设计 计算未来处理人包括抄送节点、与待办节点. 默认的模式为&#xff1a;每个节点发送的时候即使计算,就是不计算未来处理…

Linux 软件包管理器-yum使用

文章目录 前言一、yum使用1、什么是软件包2、yum源3、yum list 指令4、yum install 指令5、yum remove指令 二、git的使用1、gitee中仓库的创建2、仓库的克隆3、提交代码到远程仓库4、提交时可能遇到的问题5、.gitignore文件6、删除文件 前言 一、yum使用 1、什么是软件包 在…

发过的朋友圈怎么再快速发一次?

发过的朋友圈怎么再快速发一次&#xff1f; 大部分人第一反应都是去朋友圈 直接翻找&#xff0c;然后保存图片、文案 再重新编辑一次发布朋友圈 有没有快速一点的方法呢&#xff1f; 当然有啦&#xff01; 推荐这款工具 就可以直接把发过的朋友圈再发一次 重发朋友圈 一键…

速卖通在西班牙市场大获成功,为何西班牙成为速卖通最受欢迎的国家之一?

速卖通&#xff08;AliExpress&#xff09;是阿里巴巴旗下的跨境电商平台&#xff0c;面向国际市场&#xff0c;被誉为"国际版淘宝"。 速卖通跨境电商平台最新动态&#xff0c;近日&#xff0c;Statista发布了速卖通全球国家市场渗透率排行榜&#xff0c;该排行榜基…

第十届国家网络安全宣传周今日在全国范围内启动

十届国家网络安宣传周回望 2023年国家网络安全宣传周于9月11日至17日在全国范围内统一开展。其中&#xff0c;开幕式等重要活动在福建省福州市举行。 第一届国家网络安全宣传周活动始于2014年&#xff0c;此后将每年9月的第三周定为活动举行日。网络安全宣传周至今已经走过10个…

Python量化金融风险分析:一文全面掌握VaR计算

金融市场是一个复杂且多变的生态圈&#xff0c;涉及从经济数据到政治动态的各种影响因素。无论你身处何种角色——小投资者、企业财务&#xff0c;还是大型金融机构的资产经理&#xff0c;你都必须面对各种不确定性&#xff0c;例如股价波动、利率变动或突发事件如政治危机和自…