9x
005597
2024-08-22

网页查询 (API) 荷载查询工具: 使用 Python 实现自动化

如何使用 Python 自动发送对荷载查询工具的 Web 请求 (API)?


回复:

这很容易。 Im Folgenden wird dies an einem Beispiel gezeigt.

准备

要使用 Python 向荷载查询工具发送网络请求,您需要:

  1. 用于编写脚本的编辑器或 IDE(集成开发环境)
  2. Python - python.org
  3. Python 库请求
  4. Python 库 Pandas (选填)

在对 Geo-Zone Tool 进行网页请求时,您需要提供有关 Geo-Zone Tool 的信息。 在以下文章中以查询 URL 结构为例进行说明:
控制网络服务(API)

在本示例中使用以下信息,您必须在脚本中替换您的信息:

  1. 语言: en(德语)
  2. 登录: john [email protected]
  3. 散列线: 123456ABCD
  4. 地图: wind-DIN-EN-1991-1-4(按照附录 EC1 的风荷载)
  5. 培训地点: Dlubal, Tiefenbach(Dlubal GmbH 总部)
  6. 位置: 49.4353975, 12.5894907 (纬度、经度)

进行网络请求并读取数据

以下脚本查询 Geo-Zone Tool 的网络服务,并记录所需的时间和内容。


...
#%% 进口
# 用于读取时间标记的库(标准库,可选) 
将日期时间导入为 dt
# 通过网络请求执行库
导入申请

#%% 设置参数
# URL 网络服务荷载查询工具 
https://external-crm.dlubal.com/loadzones/data.aspx'

# 查询参数(替换为您自己的值)
parz = {
        '语言': 'zh'
        '登录': '[email protected]',
        ' 散列': '123456ABCD',
        '地图': 'wind-DIN-EN-1991-1-4'
        '地点': 'Dlubal 蒂芬巴赫',
        '项目': '49.4353975,12.5894907'
        }
# 设置取消请求的时间
reto=10 #p

执行 #%% 查询
# 检索前的时间戳
cdt1 = dt.日期时间.现在 ()
# 使用Requests进行网络查询
rgz = requests.get(URLGZ, params=pargz, timeout=reto)
# 检索后的时间戳
cdt2 = dt.日期时间.现在 ()
# 查询持续时间(秒)
dur=(cdt2-cdt1).total_seconds()
# 请求的 HTTP 状态代码
sgz=rgz.status_code
# 查询内容
hgz=rgz.headers['Content-Type']
# 文本形式的网页请求内容
tgz = rgz.文本

#%% Web请求的控制台输出
txt=[]
txt.append(f"时间: {cdt1}") #时间 YYYY-MM-DD HH:MM:SS.SSSSSS
txt.append(f"运行时长: {dur} s") #查询持续时间
txt.append(f"状态码: {rgz.status_code}")), #HTTP 状态码(正常: 200)
txt.append(f"文件标题: {hgz}"), #内容说明(正常: text/html;字符集= utf-8的)
txt.append(f"Text output of request:\n{tgz}") #Geo-Zone Tool 的输出
打印('\n'.join(txt))
...

例如,


时间: 2024-08-22 13:24:32.727006
时长: 2,214527
状态代码: 200
页眉: text/html; charset=utf-8
授权文本: 
结果 1、结果 2、分区、纬度、经度、海拔、街道、邮政编码、城市、规范、Annex、备注、法律声明
22.5 m/s,0.32 kN/m2,1,49.4353975,12.5894907,520.69384765625,Am Zellweg 2,93464,Tiefenbach,EN 1991-1-4,DIN EN 1991-1-4

增加:准备网络请求内容

以下脚本将从 Geo-Zone Tool 网络服务获得的文本转换为表格形式。 此外,结果数值与其单位分开,并分别保存为 CSV 和 Excel 文件。


...
#%% 进口
# 用于导入和导出的标准库中的字符串函数
来自 io import Stringio
# 数据处理库
将 pandas 导入为 pd

#%% 函数
的 rsep_val_unit(indf, cnstart='结果',):
    ''
    单独的 Dlubal 荷载查询工具请求 Dataframe 列,结果按值和单位排列。

    参数
    ----------
    indf pandas.DataFrame
        输入数据。
    开始: 字符串,可选
        结果所在列名称开头的标识符

    退货
    -------
    outdf: pandas.DataFrame
        输出数据。

    ''
    tmp2 = indf.loc(axis=1)[indf.columns.str.startswith(cnstart)]
    tmp3 = pd.DataFrame()
    对于 tmp2.columns 中的 i:
        tmp3{%|(i, 'value'), (i, 'unit')]] = tmp2[i].str.split(
            ' ',n=1,展开=真)
    outdf = pd.concat(
        [tmp3, indf.loc(axis=1)[~indf.columns.str.startswith(cnstart)]], axis=1)
    返回outdf

#%% 转换
# 将 Geo-Zone Tool 的输出转换为 "表格" 数据框
dfgz=pd.read_csv(String10(rgz.text))
# 结果按值和单位分隔的DataFrame
dfgz_rs=rsep_val_unit(dfgz)

#%% 节省
# CSV 文件
dfgz_rs.to_csv("Dlubal_ULS_request.csv")
# Excel 文件格式
dfgz_rs.to_excel("Dlubal_ULS_request.xlsx")

#%% 转换的控制台输出
Print(f"原始Dataframe:\n{dfgz.to_string()}")
Print(f"操作的数据框:\n{dfgz_rs.to_string()}")
Print("示例输出:\n"
      + f"第一个结果的值为 {dfgz_rs.iloc[0,0]}。"
      + f" (in {dfgz_rs.iloc[0,1]})")
...

例如得出以下结果:


原始数据框:
   结果 1、结果 2、分区、纬度、经度、海拔、街道、邮政编码、城市 Standard Annex 备注
0 22.5 m/s 0.32 kN/m2 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN
操作数据框:
  (结果 1,值) (结果 1,单位) (结果 2,值) (结果 2,单位) 分区 纬度 经度 海拔 街道 邮政编码 城市标准附录备注
0 22.5 m/s 0.32 kN/m2 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN
输出示例:
   第一个结果的值为 22.5。 (米/秒)

作者

GBhardt 先生为 Dlubal 软件公司的客户提供技术支持。

链接


您有什么问题想问的吗?