- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据谷歌的 YouTube v3 API reference documentation for the properties of a video resource ,有一个名为 liveStreamingDetails
的 JSON 对象其中应具有以下字段:
actualStartTime
actualEndTime
scheduledStartTime
scheduledEndTime
concurrentViewers
activeLiveChatId
snippet
时,我抛出了以下异常。来自视频 API 的响应:
JsonSerializationException: Error converting value "none" to type 'A1ITF.API+YouTube+LiveStreamDetails'. Path 'items[0].snippet.liveBroadcastContent', line 46, position 38.
ArgumentException: Could not cast or convert from System.String to A1ITF.API+YouTube+LiveStreamDetails.
{
"kind": "youtube#videoListResponse",
"etag": "MR2hZ6pif1LwlWdiOvdZ_4m7vDI",
"items": [
{
"kind": "youtube#video",
"etag": "hfbATXrQ1iQB2yrckDCv-dn0iiI",
"id": "skSK9lUvqjY",
"snippet": {
"publishedAt": "2020-08-14T19:00:15Z",
"channelId": "UCZGYJFUizSax-yElQaFDp5Q",
"title": "Leia, Princess of Alderaan | The Star Wars Show Book Club",
"description": <LONG DESCRIPTION TEXT>,
"thumbnails": {<THUMBNAIL OBJECTS>},
"channelTitle": "Star Wars",
"tags": [<SEVERAL TAGS>],
"categoryId": "24",
"liveBroadcastContent": "none",
"localized": {
"title": "Leia, Princess of Alderaan | The Star Wars Show Book Club",
"description": <LONG DESCRIPTION TEXT>
},
"defaultAudioLanguage": "en-US"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}
异常的原因很明确:
liveBroadcastContent
的值字段是单个字符串 (
"none"
)。它不是上面文档中定义的对象。根据文档,我是什么
期待
"liveBroadcastContent":
{
"actualStartTime": <ISO 8601 datetime VALUE>,
"actualEndTime": <ISO 8601 datetime VALUE>,
"scheduledStartTime": <ISO 8601 datetime VALUE>,
"scheduledEndTime": <ISO 8601 datetime VALUE>,
"concurrentViewers": <unsigned long VALUE>,
"activeLiveChatId": <string VALUE>
},
或者,如果没有任何信息可以填充
liveBroadcastContent
领域
"liveBroadcastContent":
{
"actualStartTime": null,
"actualEndTime": null,
"scheduledStartTime": null,
"scheduledEndTime": null,
"concurrentViewers": null,
"activeLiveChatId": ""
},
甚至
"liveBroadcastContent": {},
或者只是完全省略该属性与我的实际情况不符
接收
"liveBroadcastContent": "none",
我实际上一直在努力寻找一种有效的方法来有条件地反序列化这个元素,但似乎无法让它简单地返回
Nothing
对于 API 返回的内容(这是另一个问题,但我仍在研究希望实现这一目标的方法)。
liveStreamingDetails
对象(只有
"none"
的值)。认为这可能是“侥幸”,我检查了在我的 YouTube 通知中指定为实时流的其他一些视频,所有这些视频都显示了完全相同的结果。
String
,一切都无一异常(exception)地反序列化,我得到一个(大部分)完全填充的对象。但是,我实际上希望为我的应用程序提供一些此类信息 - 至少要知道视频是否是/曾经是直播 - 但是
"none"
显然不会告诉我太多。因此,虽然我正在努力使我的对象正确并有条件地反序列化该字段的值(我在键入此内容时提出了一些想法),但我想知道是否有人知道该字段实际上是否已实现?我基本上是在旋转我的轮子,试图让一些已经被弃用的东西工作,这是打算在 future 实现的东西,还是我只是完全密集而遗漏了一些明显的东西(一个明确而明显的可能性)?
liveBroadcastContent
字段(在
snippet
对象中)与
相同liveStreamingDetails
对象(
items
集合的一部分)。如果我彻底准确地阅读了文档,我会看到前者被定义为(强调我的):
string
Indicates if the video is an upcoming/active live broadcast. Or it's "none" if the video is not an upcoming/active live broadcast.
Valid values for this property are:
live
none
upcoming
"none"
的原因是直播已经结束)
object
The
liveStreamingDetails
object contains metadata about a live video broadcast. The object will only be present in avideo
resource if the video is an upcoming, live, or completed live broadcast.
liveStreamingDetails
所需的信息。目的。我只是要求
part=snippet
当我应该请求时
part=snippet,liveStreamingDetails
.
https://www.googleapis.com/youtube/v3/videos?id=skSK9lUvqjY&part=snippet,liveStreamingDetails&key={API_KEY}
退货 (为简洁起见,已编辑)
{
"kind": "youtube#videoListResponse",
"etag": "MR2hZ6pif1LwlWdiOvdZ_4m7vDI",
"items": [
{
"kind": "youtube#video",
"etag": "hfbATXrQ1iQB2yrckDCv-dn0iiI",
"id": "skSK9lUvqjY",
"snippet": {
"publishedAt": "2020-08-14T19:00:15Z",
"channelId": "UCZGYJFUizSax-yElQaFDp5Q",
"title": "Leia, Princess of Alderaan | The Star Wars Show Book Club",
"description": <LONG DESCRIPTION TEXT>,
"thumbnails": {<THUMBNAIL OBJECTS>},
"channelTitle": "Star Wars",
"tags": [<TAGS>],
"categoryId": "24",
"liveBroadcastContent": "none",
"localized": {
"title": "Leia, Princess of Alderaan | The Star Wars Show Book Club",
"description": <LONG DESCRIPTION TEXT>
},
"defaultAudioLanguage": "en-US"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}
https://www.googleapis.com/youtube/v3/videos?id=RX4vy_M-NS8&part=snippet,liveStreamingDetails&key={API_KEY}
退货 (为简洁起见,已编辑)
{
"kind": "youtube#videoListResponse",
"etag": "Aq44bdQmbZxoLEp0SOJh4xW0PSE",
"items": [
{
"kind": "youtube#video",
"etag": "9TVc3oB01vQME2QsvEJcaRueEqc",
"id": "RX4vy_M-NS8",
"snippet": {
"publishedAt": "2020-08-20T18:50:20Z",
"channelId": "UCRTQL0CmZjHlvPy5nLZ1Gfg",
"title": "Starting a new character in Star Wars: The Old Republic [Live Stream Recorded on August 20, 2020]",
"description": <LONG DESCRIPTION TEXT>,
"thumbnails": {<THUMBNAIL OBJECTS>},
"channelTitle": "HelloGreedo",
"tags": [<TAGS>],
"categoryId": "1",
"liveBroadcastContent": "none",
"localized": {
"title": "Starting a new character in Star Wars: The Old Republic [Live Stream Recorded on August 20, 2020]",
"description": <LONG DESCRIPTION TEXT>
}
},
"liveStreamingDetails": {
"actualStartTime": "2020-08-20T17:04:45Z",
"actualEndTime": "2020-08-20T18:41:23Z"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}
在更正我的 API 请求并将适当的属性添加到我准备好的代码对象后,我想要的一切都完全按预期/希望的那样完成。
最佳答案
根据您已经引用的文档:
liveStreamingDetails (object)
The
liveStreamingDetails
object contains metadata about a live video broadcast. The object will only be present in avideo
resource if the video is an upcoming, live, or completed live broadcast.
liveStreamingDetails
是非常合法的。从
Videos.list
获得的视频资源 JSON 响应中丢失API 端点。
liveStreamingDetails
对象根本没有被弃用。在以下直播中亲自查看
Deutsche Welle News Livestream :
Videos.list
以下 URL 上的端点(将
$APP_KEY
替换为您的应用程序 key ):
https://www.googleapis.com/youtube/v3/videos?key=$APP_KEY&id=NvqKZHpKs-g&part=contentDetails,id,liveStreamingDetails,player,recordingDetails,snippet,statistics,status,topicDetails
用于获取以下 JSON 响应文本:
{
"kind": "youtube#videoListResponse",
"etag": "LmFuBTaRf4C5sL3aRpTmKefaXnw",
"items": [
{
"kind": "youtube#video",
"etag": "5nm5pG-Kto-dPRTqwcnFKQxf3UU",
"id": "NvqKZHpKs-g",
"snippet": {
"publishedAt": "2019-01-21T13:21:24Z",
"channelId": "UCknLrEdhRCp1aegoMqRaCZg",
"title": "DW News Livestream | Latest news and breaking stories",
"description": "DW News goes deep beneath the surface, providing the key stories from Europe and around the world.\n\nExciting reports and interviews from the worlds of politics, business, sports, culture and social media are presented by our DW anchors in 15-, 30- and 60-minute shows.\n\nCorrespondents on the ground and experts in the studio deliver detailed insights and analysis of issues that affect our viewers around the world. We combine our expertise on Germany and Europe with a special interest in Africa and Asia while keeping track of stories from the rest of the world.\n\nInformative, entertaining and up-to-date – DW News, connecting the dots for our viewers across the globe.\n\nDeutsche Welle is Germany’s international broadcaster. We convey a comprehensive image of Germany, report events and developments, incorporate German and other perspectives in a journalistically independent manner. By doing so we promote understanding between cultures and peoples.\n\n#dwNews #LiveNews #NewsToday",
"thumbnails": {
...
},
"channelTitle": "DW News",
"tags": [
"dw news",
"live news",
"breaking news",
"news tv",
"live tv",
"news today",
"deutsche welle",
"deutsche welle news",
"nive news tv",
"tv live news",
"daily news"
],
"categoryId": "25",
"liveBroadcastContent": "live",
"localized": {
"title": "DW News Livestream | Latest news and breaking stories",
"description": "DW News goes deep beneath the surface, providing the key stories from Europe and around the world.\n\nExciting reports and interviews from the worlds of politics, business, sports, culture and social media are presented by our DW anchors in 15-, 30- and 60-minute shows.\n\nCorrespondents on the ground and experts in the studio deliver detailed insights and analysis of issues that affect our viewers around the world. We combine our expertise on Germany and Europe with a special interest in Africa and Asia while keeping track of stories from the rest of the world.\n\nInformative, entertaining and up-to-date – DW News, connecting the dots for our viewers across the globe.\n\nDeutsche Welle is Germany’s international broadcaster. We convey a comprehensive image of Germany, report events and developments, incorporate German and other perspectives in a journalistically independent manner. By doing so we promote understanding between cultures and peoples.\n\n#dwNews #LiveNews #NewsToday"
},
"defaultAudioLanguage": "en"
},
"contentDetails": {
"duration": "P0D",
"dimension": "2d",
"definition": "sd",
"caption": "false",
"licensedContent": false,
"contentRating": {
},
"projection": "rectangular"
},
"status": {
"uploadStatus": "uploaded",
"privacyStatus": "public",
"license": "youtube",
"embeddable": true,
"publicStatsViewable": true,
"madeForKids": false
},
"statistics": {
"viewCount": "17086181",
"likeCount": "49865",
"dislikeCount": "6539",
"favoriteCount": "0",
"commentCount": "0"
},
"player": {
"embedHtml": "<iframe width=\"480\" height=\"270\" src=\"//www.youtube.com/embed/NvqKZHpKs-g\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"
},
"topicDetails": {
"relevantTopicIds": [
"/m/019_rr",
"/m/07c1v",
"/m/019_rr",
"/m/07c1v"
],
"topicCategories": [
"https://en.wikipedia.org/wiki/Lifestyle_(sociology)",
"https://en.wikipedia.org/wiki/Technology"
]
},
"recordingDetails": {
},
"liveStreamingDetails": {
"actualStartTime": "2019-01-21T13:33:28Z",
"concurrentViewers": "712"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}
关于json - YouTube 视频的 liveStreamingDetails 属性是否已弃用/未实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63525784/
我找到了 this excellent question and answer它以 x/y(加上 center x/y 和 degrees/radians)开始并计算旋转- 到 x'/y'。这个计算很
全部: 我已经创建了一个 Windows 窗体和一个按钮。在另一个线程中,我试图更改按钮的文本,但它崩溃了;但是如果我尝试更改按钮的颜色,它肯定会成功。我认为如果您更改任何 Windows 窗体控件属
本网站的另一个问题已证实,C 中没有缩写的字面后缀,并且可以执行以下操作: short Number = (short)1; 但是转换它和不这样做有什么区别: short Number = 1; 您使
我有下表: ID (int) EMAIL (varchar(50)) CAMPAIGNID (int) isSubscribe (bit) isActionByUser (bit) 此表存储了用户对事
也就是说,无需触发Javascript事件即可改变的属性,如何保留我手动选中或取消选中的复选框的状态,然后复制到另一个地方? 运行下面的代码片段并选中或取消选中其中的一些,然后点击“复制”: $('#
我在网上找到的所有关于递增指针导致段错误的示例都涉及指针的取消引用 - 如果我只想递增它(例如在 for 循环的末尾)并且我不在乎它是否最终进入无效内存,因为我不会再使用它。例如,在这个程序中,每次迭
我有一个 Spring MVC REST 服务,它使用 XStream 将消息与 XML 相互转换。 有什么方法可以将请求和响应中的 xml(即正文)打印到普通的 log4j 记录器? 在 Contr
做我的任务有一个很大的挑战,那就是做相互依赖的任务我在这张照片中说的。假设我们有两个任务 A 和 B,执行子任务 A1、A2 和 B1、B2,假设任务 B 依赖于 A。 要理想地执行任务 B,您应该执
通过阅读该网站上的几个答案,我了解到 CoInitialize(Ex) should be called by the creator of a thread 。然后,在该线程中运行的任何代码都可以使
这个问题已经困扰我一段时间了。我以前从未真正使用过 ListViews,也没有使用过 FirebaseListAdapters。我想做的就是通过显示 id 和用户位置来启动列表的基础,但由于某种原因,
我很难解释这两个(看似简单)句子的含义: “受检异常由编译器在编译时检查” 这是什么意思?编译器检查是否捕获了所有已检查的异常(在代码中抛出)? “未经检查的异常在运行时检查,而不是编译时” 这句话中
我有一个包含排除子字符串的文本文件,我想迭代该文件以检查并返回不带排除子字符串的输入项。 这里我使用 python 2.4,因此下面的代码可以实现此目的,因为 with open 和 any 不起作用
Spring 的缓存框架能否了解请求上下文的身份验证状态,或者更容易推出自己的缓存解决方案? 最佳答案 尽管我发现这个用例 super 奇怪,但您可以为几乎任何与 SpEL 配合使用的内容设置缓存条件
我有以下函数模板: template HeldAs* duplicate(MostDerived *original, HeldAs *held) { // error checking omi
如果我的应用程序具有设备管理员/设备所有者权限(未获得 root 权限),我如何才能从我的应用程序中终止(或阻止启动)另一个应用程序? 最佳答案 设备所有者可以阻止应用程序: DevicePolicy
非常简单的问题,但我似乎无法让它正常工作。 我有一个组件,其中有一些 XSLT(用于导航)。它通过 XSLT TBB 使用 XSLT Mediator 发布。 发布后
我正在将一个对象拖动到一个可拖放的对象内,该对象也是可拖动的。放置对象后,它会嵌套在可放置对象内。同样,如果我将对象拖到可放置的外部,它就不再嵌套。 但是,如果我经常拖入和拖出可放置对象,则可拖动对象
我正在尝试为按钮和弹出窗口等多个指令实现“取消选择”功能。也就是说,我希望当用户单击不属于指令模板一部分的元素时触发我的函数。目前,我正在使用以下 JQuery 代码: $('body').click
我从 this question 得到了下面的代码,该脚本用于在 Google tasks 上更改 iframe[src="about:blank"] 内的 CSS使用 Chrome 扩展 Tempe
我有一些 @Mock 对象,但没有指定在该对象上调用方法的返回值。该方法返回 int (不是 Integer)。我很惊讶地发现 Mockito 没有抛出 NPE 并返回 0。这是预期的行为吗? 例如:
我是一名优秀的程序员,十分优秀!