如何在 python3 请求模块中仅获取 json 文件的一部分
How to fetch only parts of json file in python3 requests module
所以,我正在 Python 中编写一个程序,使用请求模块从 google 教室 API 获取数据。我从课堂上得到了完整的 json 回复,如下所示:
{'announcements': [{'courseId': '#############', 'id': '###########', 'text': 'This is a test','state': 'PUBLISHED', 'alternateLink': 'https://classroom.google.com/c/##########/p/###########', 'creationTime': '2021-04-11T10:25:54.135Z', 'updateTime': '2021-04-11T10:25:53.029Z', 'creatorUserId': '###############'}, {'courseId': '############', 'id': '#############', 'text': 'Hello everyone', 'state': 'PUBLISHED', 'alternateLink': 'https://classroom.google.com/c/#############/p/##################', 'creationTime': '2021-04-11T10:24:30.952Z', 'updateTime': '2021-04-11T10:24:48.880Z', 'creatorUserId': '##############'}, {'courseId': '##################', 'id': '############', 'text': 'Hello everyone', 'state': 'PUBLISHED', 'alternateLink': 'https://classroom.google.com/c/##############/p/################', 'creationTime': '2021-04-11T10:23:42.977Z', 'updateTime': '2021-04-11T10:23:42.920Z', 'creatorUserId': '##############'}]}
我实际上无法将它转换成漂亮的格式,所以只是粘贴它,因为我从 http 请求中得到它。我真正想做的只是从服务中请求前几个公告(例如 1、2、3,具体取决于要求),而我得到的是所有公告(如示例 3 公告中所示)自从创建教室以来就制作了。现在,我相信获取所有公告可能会使程序变慢,所以我更愿意只获取所需的公告。有没有办法通过传递一些参数或其他东西来做到这一点? google classroom 提供了一些直接功能,但是我稍后遇到了这些功能,并且已经使用请求模块编写了所有内容,这需要更改很多我想避免的东西。但是,如果不可避免的话,我也会走那条路。
答案:
使用 pageSize
字段来限制 announcements: list
请求中您想要的响应数量,orderBy
参数为 updateTime asc
。
更多信息:
根据 documentation:
orderBy
: string
Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported field is updateTime
. Supported direction keywords are asc
and desc
. If not specified, updateTime desc
is the default behavior. Examples: updateTime asc
, updateTime
和:
pageSize
: integer
Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum.
因此,假设您想要一门课程的前 3 个公告,您可以使用 3
的 pageSize
和 updateTime asc
的 orderBy
:
# Copyright 2021 Google LLC.
# SPDX-License-Identifier: Apache-2.0
service = build('classroom', 'v1', credentials=creds)
asc = "updateTime asc"
pageSize = 3
# Call the Classroom API
results = service.courses().announcements().list(pageSize=3, orderBy=asc ).execute()
或 HTTP 请求示例:
GET https://classroom.googleapis.com/v1/courses/[COURSE_ID]/announcements
?orderBy=updateTime%20asc
&pageSize=2
&key=[YOUR_API_KEY] HTTP/1.1
Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json
参考文献:
所以,我正在 Python 中编写一个程序,使用请求模块从 google 教室 API 获取数据。我从课堂上得到了完整的 json 回复,如下所示:
{'announcements': [{'courseId': '#############', 'id': '###########', 'text': 'This is a test','state': 'PUBLISHED', 'alternateLink': 'https://classroom.google.com/c/##########/p/###########', 'creationTime': '2021-04-11T10:25:54.135Z', 'updateTime': '2021-04-11T10:25:53.029Z', 'creatorUserId': '###############'}, {'courseId': '############', 'id': '#############', 'text': 'Hello everyone', 'state': 'PUBLISHED', 'alternateLink': 'https://classroom.google.com/c/#############/p/##################', 'creationTime': '2021-04-11T10:24:30.952Z', 'updateTime': '2021-04-11T10:24:48.880Z', 'creatorUserId': '##############'}, {'courseId': '##################', 'id': '############', 'text': 'Hello everyone', 'state': 'PUBLISHED', 'alternateLink': 'https://classroom.google.com/c/##############/p/################', 'creationTime': '2021-04-11T10:23:42.977Z', 'updateTime': '2021-04-11T10:23:42.920Z', 'creatorUserId': '##############'}]}
我实际上无法将它转换成漂亮的格式,所以只是粘贴它,因为我从 http 请求中得到它。我真正想做的只是从服务中请求前几个公告(例如 1、2、3,具体取决于要求),而我得到的是所有公告(如示例 3 公告中所示)自从创建教室以来就制作了。现在,我相信获取所有公告可能会使程序变慢,所以我更愿意只获取所需的公告。有没有办法通过传递一些参数或其他东西来做到这一点? google classroom 提供了一些直接功能,但是我稍后遇到了这些功能,并且已经使用请求模块编写了所有内容,这需要更改很多我想避免的东西。但是,如果不可避免的话,我也会走那条路。
答案:
使用 pageSize
字段来限制 announcements: list
请求中您想要的响应数量,orderBy
参数为 updateTime asc
。
更多信息:
根据 documentation:
orderBy
:string
Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported field is
updateTime
. Supported direction keywords areasc
anddesc
. If not specified,updateTime desc
is the default behavior. Examples:updateTime asc
,updateTime
和:
pageSize
:integer
Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum.
因此,假设您想要一门课程的前 3 个公告,您可以使用 3
的 pageSize
和 updateTime asc
的 orderBy
:
# Copyright 2021 Google LLC.
# SPDX-License-Identifier: Apache-2.0
service = build('classroom', 'v1', credentials=creds)
asc = "updateTime asc"
pageSize = 3
# Call the Classroom API
results = service.courses().announcements().list(pageSize=3, orderBy=asc ).execute()
或 HTTP 请求示例:
GET https://classroom.googleapis.com/v1/courses/[COURSE_ID]/announcements
?orderBy=updateTime%20asc
&pageSize=2
&key=[YOUR_API_KEY] HTTP/1.1
Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json