如何在 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 个公告,您可以使用 3pageSizeupdateTime ascorderBy

# 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

参考文献: