我正在创建一个RESTful API,其中的一些endpoint必须使用YouTube API来获取所需的用户数据,而我已经为其中的一个特性纠结了好几天了。
其中一个功能涉及YouTube订阅,允许用户将自己的数据分配给他们。 然后,订阅数据将存储在API数据库中。 我面临的问题是,我想要检索尚未分配(意思是:尚未由API返回)给用户的订阅列表。 未分配订阅的endpoint必须进行分页,因为我无法使用可能很大的对象进行响应。 所以我想让用户指定参数,例如page
,per_page
。
YouTube API也会用分页的订阅列表来响应。
请求get https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&mine=true&key=[YOUR_API_KEY]
会给我一个响应,其中包括诸如NextPageToken
,PrevPageToken
等字段,订阅对象列表,其中每个对象都包含Publishedat
字段。
我正在考虑的解决方案如下:
为了跟踪返回的订阅,我将在API数据库中创建以下字段:
LastSubscriptionDate:datetime
-我的API缓存的最早订阅日期
firstSubscriptionDate:datetime
-我的API缓存的最近订阅日期
LastPageToken:string
-请求数据并保存LastSubscriptionDate
的最后一个页面
流程:
获取/订阅?filter=未分配&PAGE=[PAGE]&PER_PAGE=[PER_PAGE]
我检查LastSubscriptionDate
是否等于LastPageToken
页面上最后一个结果的Publishedat
,
如果为真=>; 返回NextPageToken
的页面(如果存在)并更新我的“跟踪”数据。
else=>;
a)页面上最后一个结果的publishedat
早于缓存的lastsubscriptiondate
<=>用户删除了一些订阅。
b)页面上最后一个结果的publishedat
比缓存的lastsubscriptiondate
<=>订阅某些新YouTube频道的用户更新
在a)和b)选项中,最好的方法是只检索n
(其中n
等于per_page参数)在lastsubscriptiondate
之后或firstsubscriptiondate
之前的订阅,以确保在分页过程中不会跳过任何订阅,但我觉得用当前版本的YouTube API是不可能的。
我是不是漏掉了什么? 有没有其他方法可以从YouTube API中检索那些未分配的订阅,同时确保我没有跳过任何订阅?
您的报价:
因为我会按时间顺序(最近的)[...]从YouTube API请求订阅。
使用mine=true
查询的subscriptions.list
API终结点没有使您能够获取由publishedat
订购的订阅资源的参数。
我没有看到其他解决方案,但你的应用程序有一个刷新我的订阅列表功能,当用户知道他/她改变了他/她的订阅列表从YouTube Web UI。 当然,事情还可以进一步发展:例如,还可以定期调用refresh my subscriptions list,而无需任何用户干预(使用您设计的逻辑,使其适合您应用程序的一般工作方式)。
然后,刷新我的订阅列表将从YouTube数据API中获取所有的订阅资源
,并将此列表(L1
)与应用程序数据库中记录的列表(L2
)进行匹配,以获得差异:对于L1
和L2
联合中的每个条目,将(1)=
附加到两个列表中的条目,(2)-
附加到仅存在于L2
中的条目,(3)+
附加到仅存在于L1
计算出的差异将允许更新应用程序的数据库(从而使其与YouTube的遥控器同步)。