如何通过Python把TeamUp API返回的title、start_dt、end_dt赋值给变量
提取TeamUp API事件字段并用于Kivy展示
步骤1:解析API返回的JSON数据
先把http.client获取到的响应内容转换成Python可操作的列表/字典,用json.loads()处理:
import http.client import json # 完成API调用并获取响应 conn = http.client.HTTPSConnection("api.teamup.com") conn.request("GET", "/your-calendar-id/events", headers={"Teamup-Token": "your-api-token"}) res = conn.getresponse() data = res.read() # 解析JSON为Python事件列表 events_list = json.loads(data)
步骤2:提取目标字段到变量
遍历事件列表,把每个事件的title、start_dt、end_dt提取出来,存成字典列表,方便后续Kivy调用:
processed_events = [] for event in events_list: # 用get()避免字段缺失时抛出异常 event_info = { "title": event.get("title"), "start_dt": event.get("start_dt"), "end_dt": event.get("end_dt") } processed_events.append(event_info)
步骤3:在Kivy中展示日程列表
用Kivy的RecycleView实现列表展示(适合多数据场景),示例代码如下:
Python代码
from kivy.app import App from kivy.uix.recycleview import RecycleView from kivy.uix.recycleview.views import RecycleDataViewBehavior from kivy.uix.label import Label from kivy.properties import StringProperty class EventItem(RecycleDataViewBehavior, Label): title = StringProperty("") start_dt = StringProperty("") end_dt = StringProperty("") def refresh_view_attrs(self, rv, index, data): self.title = data["title"] self.start_dt = data["start_dt"] self.end_dt = data["end_dt"] return super().refresh_view_attrs(rv, index, data) class EventRecycleView(RecycleView): def __init__(self, **kwargs): super().__init__(**kwargs) self.data = processed_events class CalendarApp(App): def build(self): return EventRecycleView() if __name__ == "__main__": CalendarApp().run()
对应KV文件(命名为calendar.kv)
<EventItem>: text: f"{self.title}\n开始: {self.start_dt}\n结束: {self.end_dt}" size_hint_y: None height: 80 padding: 10 color: 0,0,0,1 <EventRecycleView>: viewclass: 'EventItem' RecycleBoxLayout: default_size: None, dp(80) default_size_hint: 1, None size_hint_y: None height: self.minimum_height orientation: 'vertical'
额外提示
- 若需要格式化日期时间,可用
datetime模块处理API返回的start_dt/end_dt:
from datetime import datetime formatted_start = datetime.fromisoformat(event["start_dt"]).strftime("%Y-%m-%d %H:%M")
- 第三方包用不了就直接用原生库调用API,没必要强行依赖,
requests库比http.client更简洁,也可以尝试替换。
内容的提问来源于stack exchange,提问作者VinceT
相关产品推荐
相关产品推荐

