【问题标题】:Beginner Python and API - How to read data?初学者 Python 和 API - 如何读取数据?
【发布时间】:2020-08-18 20:23:03
【问题描述】:

我是 Python 和 API 的新手。我有一个 API 在工作中,我可以访问并获取有关计算机的详细信息。
此时我只想尝试一个非常基本的东西来练习并打印计算机名称和IP地址。
使用我的 Python 书籍,其中有一章是关于 API 的,我正在尝试以下内容作为测试并获得 200 响应,长度结果 = 10。所以初始连接正常工作。

import requests

# Make an API call and store response
url = 'https://removed.jamfcloud.com/JSSResource/advancedcomputersearches/id/8'

headers = {
    'accept': 'application/json',
}

r = requests.get(url, headers=headers, auth=('Username','Password'))
print(f"Status code: {r.status_code}")

#Store API response in a variable
response_dict = r.json()

#Process Results
print(response_dict.keys())

repo_dicts = response_dict['advanced_computer_search']
print(f"Length of repo_dicts is: {len(repo_dicts)}")

此时我只想从结果中获取 1 条记录并显示计算机名称和 IP。
值得一提的是,这本书使用了一些 GitHub API 作为他们的示例,但我正在修改它以使用我自己的。
书中说要添加以下代码:

#Examine the first repository
repo_dict = repo_dicts[0]
print(f"Computer Name: {repo_dict['Computer Name']}")

失败并说:
回溯(最近一次通话最后一次):
文件“...\API_Test_Jamf_1.py”,第 22 行,在
repo_dict = repo_dicts[0]
密钥错误:0

这可能是有史以来最基本的事情,但我被卡住了。
Web 浏览器中的 API 结果如下所示:

<advanced_computer_search>
<id>8</id>
<name>Test Pull</name>
<view_as>Standard Web Page</view_as>
<sort_1/>
<sort_2/>
<sort_3/>
<criteria>
<size>0</size>
</criteria>
<display_fields>
<size>102</size>
<display_field>
<name>Last Check-in</name>
</display_field>
<display_field>
<name>JSS Computer ID</name>
</display_field>
<display_field>
<name>Computer Name</name>
</display_field>
<display_field>
<name>IP Addresses</name>
</display_field>

接下来我需要做什么才能获得:

  1. 首先记录并显示计算机名称和 IP
  2. 所有记录都显示相同的 2 个字段?

这是一个 sn-p(开始)的结果:

print(response_dict)

{'advanced_computer_search': {'id': 8, 'name': 'InfraMI Pull', 'view_as': '标准网页', 'sort_1': '', 'sort_2': '', 'sort_3 ': '', 'criteria': [], 'display_fields': [{'name': 'Last Check-in'}, {'name': 'JSS 计算机 ID'}, {'name': '计算机名'}, {'name': 'IP Addresses'}, {'name': 'Local Admins'}, {'name': 'FileVault 2 Eligibility'}, {'name': 'Managed'}, {'name ': '禁用自动登录'}, {'name': '支持引导令牌'}, {'name': 'Build Sequence'}, {'name': 'Build'}, {'name': '磁盘加密Configuration'}, {'name': 'Bar Code'}, {'name': 'Active Directory Status'}, {'name': 'AD Cert Expiration'}, {'name': 'AD Status'}, {'name': '通过自动设备注册'}, {'name': '电子邮件地址'}, {'name': 'MAC 地址'}, {'name': '磁盘格式'}, {'name ': 'IP 地址'}, {'name': 'MDM Capability'}, {'name': 'XProtect 定义版本'}, {'name': '安全令牌用户'}, {'name': '外部引导级别'}, {'name': 'SMC 版本'}, {'name': '处理器数量'}, {'n ame': 'Boot Drive Available MB'}, {'name': 'Required Passcode Length'}, {'name': 'UDID'}, {'name': 'Computer Azure Active Directory ID'}, {'name ': 'Gatekeeper'}, {'name': 'Supervised'}, {'name': 'Root Account'}, {'name': 'Asset Tag'}, {'name': 'Conditional Access Inventory State' }, {'name': 'S.M.A.R.T.状态'}, {'name': 'Watermark'}, {'name': '激活锁可管理'}, {'name': '总核数'}, {'name': '操作系统版本'} , {'name': 'Username'}, {'name': 'FileVault 2 Status'}, {'name': 'User Approved MDM'}, {'name': 'Platform'}, {'name': '序列号'}, {'name': 'Operating System'}, {'name': 'Operating System Build'}, {'name': 'FileVault 2 机构密钥'}, {'name': '处理器类型'}, {'name': 'Firmware Password Set'}, {'name': 'Last Enrollment'}, {'name': 'Boot Drive Percentage Full'}, {'name': 'Maximum Passcode Age'} , {'name': 'Office License'}, {'name': 'Password History'}, {'name': 'Boot ROM'}, {'name': 'Drive Capacity MB'}, {'name' : '密码类型'}, {'name': 'Bootstrap Token Escrowed'}, {'name': 'User Azure Active Directory ID'}, {'name': 'FileVault 2 Recovery Key Type'}, {'name ': '屏幕锁定'}, {'name': '电池容量'}, {'name': 'Make'}, {'name': '系统完整性保护'}, {'name': '可用数量更新'}, {'name': 'JAMF 二进制版本on'}, {'name': 'Last Inventory Update'}, {'name': 'Bluetooth Low Energy Capability'}, {'name': 'Managed By'}, {'name': '激活锁已启用' }, {'name': 'Last iCloud Backup'}, {'name': 'Available RAM Slots'}, {'name': 'NIC Speed'}, {'name': 'Remote Desktop Enabled'}, { 'name': 'Optical Drive'}, {'name': 'Processor Speed MHz'}, {'name': 'Service Pack'}, {'name': 'Bus Speed MHz'}, {'name': 'Operating System Name'}, {'name': 'Master Password Set'}, {'name': 'Secure Boot Level'}, {'name': '最小复杂字符数'}, {'name': 'FileVault 2 个人密钥验证'}, {'name': 'FileVault Status'}, {'name': 'Total RAM MB'}, {'name': 'Architecture Type'}, {'name': 'iTunes Store Account'}, {'name': 'Full Name'}, {'name': 'Core Storage Partition Scheme on Boot Partition'}, {'name': 'Model Identifier'}, {'name': 'Model '}, {'name': 'Last Reported IP Address'}, {'name': 'FileVault 2 User'}, {'name': 'Applications'}, {'name': 'Cached Packages'}, { 'name': '可用的 SWU'}, {'name': 'E注册方法:PreStage 注册'}, {'name': 'Plug-ins'}, {'name': 'Local User Accounts'}, {'name': 'Mapped Printers'}], 'computers': [{ '名称':'HYDM002543514','udid':'A082964F-EA4E-56BA-BD79-34554F542F58','id':89,'Computer_Name':'HYDM002543514','Last_Check_in':'2019-11-18 13: 25:24', 'JSS_Computer_ID': '89', 'IP_Addresses': ''等等......

谢谢

【问题讨论】:

  • 这能回答你的问题吗? Accessing JSON elements
  • 打印出response_dict并将其添加到您的问题中。
  • 响应是 XML,不是 JSON
  • 将 Print(response_dict) 的部分输出添加到问题中

标签: python api


【解决方案1】:

查看您发布的response_dict 的结构(也许您应该尝试放入一个可以很好地格式化它以帮助您解析它的编辑器),您正在寻找的信息(计算机名称和 IP)在“计算机”下的列表中,这是您回复中“高级计算机搜索”下的一个键。在此之前的所有内容(这是您在此处粘贴的大部分内容)我认为是对您正在查询的对象的描述。

要访问该列表,您可以致电response_dict["advanced_computer_search"]["computers"]

打印第一条记录的信息:

name = response_dict["advanced_computer_search"]["computers"][0]["Computer_Name"]
ip = response_dict["advanced_computer_search"]["computers"][0]["IP_Addresses"]
print(f"Computer Name: {name}, IP: {ip}")

对所有记录执行相同操作:

for computer in response_dict["advanced_computer_search"]["computers"]:
    name = computer["Computer_Name"]
    ip = computer["IP_Addresses"]
    print(f"Computer Name: {name}, IP: {ip}")

【讨论】:

  • 完美。这就是我试图做的并获得理想的结果。
猜你喜欢
  • 2013-01-24
  • 2012-12-25
  • 2019-04-23
  • 2020-12-19
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多