Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for discoveryplus.com (US) #5

Closed
Dis90 opened this issue Jan 9, 2021 · 62 comments
Closed

Add support for discoveryplus.com (US) #5

Dis90 opened this issue Jan 9, 2021 · 62 comments

Comments

@Dis90
Copy link
Owner

Dis90 commented Jan 9, 2021

Currently broken because of many differences. What I found so far is that unlike other countries US needs headers for requests. Because of geoblock and US version needing account, support for US version is probably not going to happen anytime soon.

api url: https://us1-prod-direct.discoveryplus.com
realm: go
headers: x-disco-params=realm=go,siteLookupKey=dplus_us

@yeahme49
Copy link
Contributor

yeahme49 commented Jan 9, 2021

I tested the version with .com support before you reverted and I got it load the frontpage link by adding

headers = { 'X-disco-params': 'realm=go,siteLookupKey=dplus_us' }
data = json.loads(self.make_request(url, 'get', params=params, headers=headers))

It then lists categories but nothing appears underneath those catagories. Is there any data I can collect for you to try and add .com support? I can use fiddler everywhere to capture data when browsing discoveryplus.com if that would help.

@Dis90
Copy link
Owner Author

Dis90 commented Jan 10, 2021

I can get all json listings by using VPN but most difficult part is that I can't see what actual page looks like because I don't have account. Can you take couple screenshots of homepage and other pages where shows and categories is listed?

@Dis90
Copy link
Owner Author

Dis90 commented Jan 10, 2021

I used few hours to this and conclusion is that US version does many things little bit different than other versions. Because I don't have account to US it is unfortunately impossible for me add support for discoveryplus.com

@yeahme49
Copy link
Contributor

main
browse
show

Do these screenshots help at all? Can you post an example of the json files from a different region so they can be compared to the US version?

@Dis90
Copy link
Owner Author

Dis90 commented Jan 10, 2021

Yes those help a lot. It looks much different than EU versions.

Go to browse while developer tools open and search for file https://us1-prod-direct.discoveryplus.com/cms/routes/shows
What params and headers is used? Headers are probably at least "x-disco-params: realm=go,siteLookupKey=dplus_us" is there anything else. And what about params? Those should be at least "include: default"

@yeahme49
Copy link
Contributor

x-disco-params: realm=go,siteLookupKey=dplus_us
x-disco-client: WEB:UNKNOWN:dplus_us:0.0.1
are the only headers that stand out (everything else is standard headers)

include: default
decorators: viewingHistory,isFavorite
are the params

@Dis90
Copy link
Owner Author

Dis90 commented Jan 11, 2021

Can you go to some series page, example Gold Rush and look from developer tools something similar than /cms/routes/shows
and save that .txt and paste here. What I'm looking for is file that contains details from shows. For some reason discovery+ US doesn't seem to include those on /shows

@yeahme49
Copy link
Contributor

yeahme49 commented Jan 11, 2021

https://us1-prod-direct.discoveryplus.com/cms/routes/shows?include=default&decorators=viewingHistory,isFavorite This is when clicking Browse

https://us1-prod-direct.discoveryplus.com/cms/collections/296530408644496528769435570882544597228?include=default&decorators=viewingHistory,isFavorite This is when clicking on the Food Network logo to just show Food Network shows

https://us1-prod-direct.discoveryplus.com/cms/routes/show/diners-drive-ins-and-dives?include=default&decorators=viewingHistory,isFavorite This is when choosing Diners, Drive-ins and Dives show

https://us1-prod-direct.discoveryplus.com/playback/v3/videoPlaybackInfo This is when choosing Episode 1 from Season 1 and the player loads

Hopefully these .txt files help. The URL show for each .txt is the URL that gets loaded for that JSON file

@Dis90
Copy link
Owner Author

Dis90 commented Jan 11, 2021

Thanks that helps a lot.

@Dis90
Copy link
Owner Author

Dis90 commented Jan 11, 2021

When you go to Food Network is there tabs named Trending, A-Z, Cooking competitions..? Can you click one of those and post url and content.

@yeahme49
Copy link
Contributor

There are tabs named Trending, A-Z etc but it does not load any new files while clicking on those

@Dis90
Copy link
Owner Author

Dis90 commented Jan 11, 2021

Okay that explains why I can't get those to work.

@Dis90
Copy link
Owner Author

Dis90 commented Jan 11, 2021

Actually that wasn't problem. Problem is that without login in for example Food Network listing is incomplete. All shows are missing just categories is listed. But I can use your files for testing.

When I go to address https://us1-prod-direct.discoveryplus.com/cms/routes/show/diners-drive-ins-and-dives?include=default&decorators=viewingHistory,isFavorite
I got this error. Is there some headers used?

show with id diners-drive-ins-and-dives was filtered by validator, reasonCode=10

@yeahme49
Copy link
Contributor

x-disco-params: realm=go,siteLookupKey=dplus_us
x-disco-client: WEB:UNKNOWN:dplus_us:0.0.1

those are the 2 headers, it looks like x-disco-params is not required to get that page to load but x-disco-client is required from my testing

@Dis90
Copy link
Owner Author

Dis90 commented Jan 11, 2021

Yeah some pages needs x-disco-params and some not. After adding x-disco-client to requests I now get full responses.
Can you get urls and content of search and my list?

@Dis90
Copy link
Owner Author

Dis90 commented Jan 12, 2021

I created branch dplus_us https://github.com/Dis90/plugin.video.discoveryplus/tree/dplus_us
Could you try does login and video playback work? You know that login didn't work if you find line "Error logging in. Invalid Arkose token." from debug log.

Probably not working features:

  • adding or deleting shows from my list
  • my list
  • video playback progress update to discovery+
  • some categories in search result

@yeahme49
Copy link
Contributor

Video playback is not working. I tried watching episode 1 of airplane repo and get

2021-01-12 15:28:09.863 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Request URL: https://us1-prod-direct.discoveryplus.com/playback/v2/videoPlaybackInfo/89315
2021-01-12 15:28:09.864 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Method: get
2021-01-12 15:28:09.864 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Params: {'usePreAuth': 'true'}
2021-01-12 15:28:09.864 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Payload: None
2021-01-12 15:28:09.864 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Headers: {'x-disco-params': 'realm=go,siteLookupKey=dplus_us', 'x-disco-client': 'WEB:UNKNOWN:dplus_us:0.0.1'}
2021-01-12 15:28:09.888 T:19672 DEBUG : ------ Window Init (DialogBusy.xml) ------
2021-01-12 15:28:10.058 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Response code: 404
2021-01-12 15:28:10.058 T:2724 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Response: b'{\n "errors" : [ {\n "status" : "404",\n "code" : "not.found",\n "id" : "vmHErKYwn6",\n "detail" : "No stream URL for video exists. Source: SONIC"\n } ]\n}'

No stream URL for video exists is the error I get inside Kodi as well.

@Dis90
Copy link
Owner Author

Dis90 commented Jan 12, 2021

So v2 videoPlayback doesn't exists .com. Try now.

@yeahme49
Copy link
Contributor

2021-01-12 15:57:01.979 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Request URL: https://us1-prod-direct.discoveryplus.com/playback/v3/videoPlaybackInfo/89315
2021-01-12 15:57:01.979 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Method: get
2021-01-12 15:57:01.979 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Params: {'usePreAuth': 'true'}
2021-01-12 15:57:01.979 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Payload: None
2021-01-12 15:57:01.980 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Headers: {'x-disco-params': 'realm=go,siteLookupKey=dplus_us', 'x-disco-client': 'WEB:UNKNOWN:dplus_us:0.0.1'}
2021-01-12 15:57:01.995 T:19672 DEBUG : ------ Window Init (DialogBusy.xml) ------
2021-01-12 15:57:02.160 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Response code: 404
2021-01-12 15:57:02.160 T:19252 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Response: b'{\n "errors" : [ {\n "status" : "404",\n "code" : "missing.resource",\n "id" : "pYFPFKt2wv",\n "detail" : "v3 Version not supported"\n } ]\n}'

@yeahme49
Copy link
Contributor

Testing in browser, videoPlaybackInfo is a POST request with this JSON data

{
"deviceInfo": {
"adBlocker": true,
"hdrCapabilities": [
"SDR"
],
"hwDecodingCapabilities": [],
"player": {
"width": 2630,
"height": 1826
},
"screen": {
"width": 3840,
"height": 2160
},
"soundCapabilities": [
"STEREO"
]
},
"videoId": "89315",
"wisteriaProperties": {
"advertiser": {
"adId": "|92223167458192398905978408829301668405||161048906055868be2eed88099f0d06cc1209b623385b",
"firstPlay": 0,
"fwDid": "",
"fwIsLat": 0,
"fwNielsenAppId": "P5A0FD4DE-4AE6-4B22-811B-36B9BD091980",
"gpaln": ""
},
"appBundle": "",
"device": {
"language": "en",
"make": "",
"model": "",
"name": "Chrome",
"os": "Windows",
"osVersion": "NT 10.0",
"type": "desktop",
"id": "2608fb0ce6c5d22839529b5f6019bb94"
},
"platform": "desktop",
"product": "dplus_us",
"sessionId": "e029a1a5-27ed-4856-b1ba-e0281b86ece9",
"streamProvider": {
"suspendBeaconing": 0,
"hlsVersion": 7,
"pingConfig": 0
}
}
}

@yeahme49
Copy link
Contributor

Made some changes and video playback appears to work.

get_current_episode_info needs to send headers along with request

make_request i changed
else: # post
req = self.http_session.post(url, params=params, data=payload, headers=headers, json=jsonpayload)
so that JSON can be sent with POST

this is the JSON that gets sent with the POST to get the video m3u8
{'deviceInfo': {'adBlocker': 'true'},'videoId': video_id,'wisteriaProperties':{'product':'dplus_us'}}

if self.locale_suffix == 'us':
stream['hls_url'] = data_dict['attributes']['streaming'][0]['url']
stream['drm_enabled'] = data_dict['attributes']['streaming'][0]['protection']['drmEnabled']

needed [0] added

sorry this is kind of messy, just wanted to let you see. if you want a pull request instead i can do that

@Dis90
Copy link
Owner Author

Dis90 commented Jan 13, 2021

Please do pull request :)

I'm not sure yet how I pull this changes from dplus_us branch to master and matrix after everything US related is done. I'm little bit newbie with Git.

get_current_episode_info needs to send headers along with request

I guess get_next_episode_info also needs headers.

Did update_playback_progress work? It is used when playback is stopped.

Also can you check what url and parameters is used when adding and deleting favorites. In other regions it is {api_url}/users/me/favorites/shows/{show_id}

@yeahme49
Copy link
Contributor

yeahme49 commented Jan 16, 2021

Sorry for the delay, got the pull request created.

update_playback_progress does work, when I stopped a video it updated on the discovery plus website. Resuming videos doesn't work though. If I go to play a video, it will ask if I want to start at the beginning or the time that was left off, but it always starts at the beginning.

I will check adding/deleting favorites today. Also looking into an why some shows won't work, so far it seems like shows in the magnolia preview give an error when trying to show the episodes. If i can't figure out why I'll post some logs

EDIT: endpoint for favorites is the same and its POST for adding and DELETE for deleting

@Dis90
Copy link
Owner Author

Dis90 commented Jan 16, 2021

Thanks for pull request.

update_playback_progress does work, when I stopped a video it updated on the discovery plus website. Resuming videos doesn't work though. If I go to play a video, it will ask if I want to start at the beginning or the time that was left off, but it always starts at the beginning.

Weird it should work if it suggests to resume.

Also looking into an why some shows won't work, so far it seems like shows in the magnolia preview give an error when trying to show the episodes. If i can't figure out why I'll post some logs

Can you post name of those shows?

@yeahme49
Copy link
Contributor

I tried with Magnolia Table and Super Dad.

Here is snippet of log from Super Dad. It errors when doing Browse->Magnolia Network Preview->Trending->Super Dad-Episodes

2021-01-16 12:50:21.062 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Request URL: https://us1-prod-direct.discoveryplus.com/cms/routes/show/super-dad
2021-01-16 12:50:21.062 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Method: get
2021-01-16 12:50:21.062 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Params: {'decorators': 'viewingHistory', 'include': 'default'}
2021-01-16 12:50:21.062 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Payload: None
2021-01-16 12:50:21.062 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Headers: {'x-disco-params': 'realm=go,siteLookupKey=dplus_us', 'x-disco-client': 'WEB:UNKNOWN:dplus_us:0.0.1'}
2021-01-16 12:50:21.062 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: JSON Payload: None
2021-01-16 12:50:21.308 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Response code: 200
2021-01-16 12:50:21.309 T:20088 DEBUG : [plugin.video.discoveryplus-1.3.2+matrix.1]: Response: b'{"data":{"attributes":{\n "canonical" : true,\n "url" : "/show/super-dad"\n},"id":"164679836322950197988796807764660202509","relationships":{"target":{"data":{"id":"308953312918263275172030705745619495572","type":"page"}}},"type":"route"},"included":[{"attributes":{\n "alternateId" : "magnolia-network-preview",\n "channelCode" : "MGNP",\n "contentDescriptors" : [ ],\n "contentRatings" : [ ],\n "customAttributes" : { },\n "description" : " ",\n "hasLiveStream" : false,\n "identifiers" : { },\n "longDescription" : " ",\n "name" : "Magnolia Network Preview",\n "packages" : [ ]\n},"id":"107","relationships":{"images":{"data":[{"id":"channel_107_cb45a520-64ff-340c-bc35-17b797452990_default","type":"image"},{"id":"channel_107_ae9c38dd-c8af-3b90-8b5b-c7703ab46103_cover_artwork","type":"image"},{"id":"channel_107_d3f28f6f-7991-3810-a5ea-754297661fe2_logo_attribution","type":"image"},{"id":"channel_107_4ca703eb-9090-3226-b71e-a90054014c4c_logo","type":"image"},{"id":"channel_107_3d81f079-34b5-37bd-868a-ae1e92c6ee87_logo_alternate","type":"image"},{"id":"channel_107_13782b97-97df-32fe-a533-7fc1204ed4f4_logo_grayscale","type":"image"}]},"routes":{"data":[{"id":"851e8cba41ef26e3f7d9b98e0f422a38a0315633b9a3136f8845c7a47cf6bde5","type":"route"}]}},"type":"channel"},{"attributes":{\n "alternateId" : "animal-planet",\n "channelCode" : "APL",\n "contentDescriptors" : [ ],\n "contentRatings" : [ {\n "code" : "TV-PG",\n "system" : "US-TV"\n }, {\n "code" : "TV-PG",\n "system" : "US-TV"\n } ],\n "customAttributes" : { },\n "description" : " ",\n "hasLiveStream" : true,\n "identifiers" : {\n "ssaiVideoId" : "3e844fb7bd1a46e4b5512d288ad43377"\n },\n "longDescription" : " ",\n "name" : "Animal Planet",\n "packages" : [ "AnimalPlanet" ]\n},"id":"84","relationships":{"contentPackages":{"data":[{"id":"AnimalPlanet","type":"package"}]},"images":{"data":[{"id":"channel_84_a4599a71-5c01-376b-b158-e2b2a5cd49b1_default","type":"image"},{"id":"channel_84_059e967a-a580-3564-93e1-53f1638d5feb_cover_artwork","type":"image"},{"id":"channel_84_9fb1c51d-66f4-3f99-a56c-82ff8a22950b_logo_attribution","type":"image"},{"id":"channel_84_38627fbb-c07f-3660-9a2b-cc61ff4e2ee1_logo","type":"image"},{"id":"channel_84_a288a7a5-cc4d-344d-88ec-7668d3799f80_logo_grayscale","type":"image"},{"id":"channel_84_5abbe18b-e732-341d-a715-adcfb4f62bed_logo_alternate","type":"image"}]},"routes":{"data":[{"id":"b943b4eabcf8e6d887fc2b3e4918e0d27421c36dd83e9401c795827a3f7a642c","type":"route"}]}},"type":"channel"},{"attributes":{\n "alternateId" : "diy-network",\n "channelCode" : "DIY",\n "contentDescriptors" : [ ],\n "contentRatings" : [ {\n "code" : "TV-PG",\n "system" : "US-TV"\n }, {\n "code" : "TV-PG",\n "system" : "US-TV"\n } ],\n "customAttributes" : { },\n "description" : " ",\n "hasLiveStream" : true,\n "identifiers" : {\n "ssaiVideoId" : "480d1ff42e924413990ee0eeb693ce9f"\n },\n "longDescription" : " ",\n "name" : "DIY Network",\n "packages" : [ "DiyNetwork" ]\n},"id":"88","relationships":{"contentPackages":{"data":[{"id":"DiyNetwork","type":"package"}]},"images":{"data":[{"id":"channel_88_fc939454-642b-3fb3-92f7-dabb40f33d43_cover_artwork","type":"image"},{"id":"channel_88_b86a281f-ef75-3e38-ae93-7997a52d5b3b_default","type":"image"},{"id":"channel_88_619bf98d-a938-39f5-8814-4002b4389b95_logo_attribution","type":"image"},{"id":"channel_88_e118c8c7-1f79-361e-b667-160ace6b7c9f_logo","type":"image"},{"id":"channel_88_9fc2d809-182c-3e03-a4bb-ec932f826865_logo_grayscale","type":"image"},{"id":"channel_88_9904141b-9436-35cf-9404-894e7c509b97_logo_alternate","type":"image"}]},"routes":{"data":[{"id":"6f1a2bfb9123f5fefb2d7f254063634f7b8c39cc703d9d9f10e95056fb792000","type":"route"}]}},"type":"channel"},{"attributes":{\n "alias" : "show-extras-super-dad-web",\n "component" : {\n "id" : "tabbed-content",\n "templateId" : "primary"\n },\n "kind" : "automatic",\n "name" : "show-extras-super-dad-web",\n "published" : "2020-12-29T04:33:13.830746Z",\n "revision" : 0,\n "state" : "published",\n "title" : "Extras"\n},"id":"113592752147346451705052748709207041840","meta":{\n "itemsCurrentPage" : 1,\n "itemsPageSize" : 10,\n "itemsTotalPages" : 1\n},"relationships":{"items":{"data":[{"id":"9aebf7fc794c7c06b488bcd697bee52df18ef8adebfb9e4deff06b6dd170b564","type":"collectionItem"}]}},"type":"collection"},{"attributes":{\n "alias" : "show-about-super-dad",\n "component" : {\n "id" : "tabbed-component-details",\n "templateId" : "basic"\n },\n "kind" : "manual",\n "name" : "show-about-super-dad",\n "published" : "2020-12-29T04:33:46.312209Z",\n "revision" : 0,\n "state" : "published",\n "title" : "About the Show"\n},"id":"195259463153962764250523337809700033750","meta":{\n "itemsTotalPages" : 1\n},"relationships":{"items":{"data":[{"id":"6ef2b8f1a3cddb02188fbbdaf9e856225e3d619afe9df525607414c27b0a9169","type":"collectionItem"}]}},"type":"collection"},{"attributes":{\n "alias" : "show-hero-super-dad",\n "component" : {\n "id" : "hero",\n "templateId" : "secondary"\n },\n "kind" : "manual",\n "name" : "show-hero-super-dad",\n "published" : "2020-12-29T04:28:20.993666Z",\n "revision" : 0,\n "state" : "published"\n},"id":"235849961306540820283536216748337616075","meta":{\n "itemsTotalPages" : 1\n},"relationships":{"items":{"data":[{"id":"6d02dcba813a3307430c8046c98f1d9750b14162ebc2f9f876f4ebc05751df35","type":"collectionItem"}]}},"type":"collection"},{"attributes":{\n "alias" : "show-episodes-super-dad",\n "component" : {\n "filters" : [ {\n "id" : "seasonNumber",\n "initiallySelectedOptionIds" : [ "1" ],\n "l10nkey" : "seasonNumber",\n "multiSelect" : false,\n "options" : [ {\n "id" : "1",\n "parameter" : "pf[seasonNumber]=1",\n "value" : "1"\n } ]\n } ],\n "id" : "tabbed-content",\n "templateId" : "primary"\n },\n "kind" : "automatic",\n "name" : "show-episodes-super-dad",\n "published" : "2020-12-29T04:29:02.281333Z",\n "revision" : 0,\n "state" : "published",\n "title" : "Episodes"\n},"id":"2416925543383789611504437476075883317","meta":{\n "itemsCurrentPage" : 1,\n "itemsPageSize" : 100,\n "itemsTotalPages" : 1\n},"relationships":{"items":{"data":[{"id":"608e0147b6823990e8a1e8bf3f87e215bf014fcdbb7f4ad14703813f651eecbe","type":"collectionItem"}]}},"type":"collection"},{"attributes":{\n "alias" : "show-super-dad-tabbed-component",\n "component" : {\n "id" : "tabbed-component",\n "templateId" : "standard"\n },\n "kind" : "manual",\n "name" : "show-super-dad-tabbed-component",\n "published" : "2020-12-29T04:34:19.860156Z",\n "revision" : 0,\n "state" : "published"\n},"id":"275697655720519752855610743297963739823","meta":{\n "itemsTotalPages" : 1\n},"relationships":{"items":{"data":[{"id":"c9c5654a3f98088a14c4125180a960bd000d02ec0cedd26f54ea36e36f55c163","type":"collectionItem"},{"id":"3aee0515c614137bc541833a59df512c417c8bc6e859b92bc036dc8fc8978144","type":"collectionItem"},{"id":"e00059c3d2010493e6ecc02fd9ea681fab063576ef2db0e8af459ba7f5bbddcf","type":"collectionItem"},{"id":"0b22a214f392b1879f2107eb5c9758f2b67a58356e49c74304ad55625fb8dbeb","type":"collectionItem"}]}},"type":"collection"},{"attributes":{\n "alias" : "show-ymal-super-dad",\n "component" : {\n "id" : "content-grid",\n "templateId" : "poster-primary"\n },\n "kind" : "manual",\n "name" : "show-ymal-super-dad",\n "published" : "2020-12-29T03:02:08.970637Z",\n "revision" : 0,\n "state" : "published",\n "title" : "You May Also Like"\n},"id":"46581010971092095326043100630473008869","meta":{\n "itemsTotalPages" : 1\n},"relationships":{"items":{"data":[{"id":"97b084d6e53871f8aa92c25ba7347c3411db90cc34f8dfec34ac9c4de7f2c9ef","type":"collectionItem"},{"id":"b9c0a5e1b986979fc105430b6fdf809213ebc5a5c00b1d2e909812278d01c837","type":"collectionItem"},{"id":"fbf9db275f15e4d8e6fe4656cb40af1adc0b36e81da3bada7ae31c2993fcf4e1","type":"collectionItem"},{"id":"4d723ca8174b7fe26473156f97706c47eec53299089c78b7e1fcb25e72a3dc8f","type":"collectionItem"},{"id":"150936a1ca86485ec540c124d5c52865163b44d1a17b7972424e35785066cc29","type":"collectionItem"},{"id":"a6b2e7a2ef6170eca1662b16807af288566dc696d4a94ea6a6237084121150f3","type":"collectionItem"},{"id":"0c0cf0c276ab7c13e250c4f4748a3cadc71057ef36edba1f566fe55a5babde04","type":"collectionItem"},{"id":"7874a391fbfc04c3c9a66c3fece6d9805c1e1134c368da1efa8902a5cb1e5d55","type":"collectionItem"}]}},"type":"collection"},{"attributes":{\n "hidden" : false,\n "hints" : [ "hide-for-apps" ]\n},"id":"0b22a214f392b1879f2107eb5c9758f2b67a58356e49c74304ad55625fb8dbeb","relationships":{"collection":{"data":{"id":"46581010971092095326043100630473008869","type":"collection"}}},"type":"collectionItem"},{"attributes":{ },"id":"0c0cf0c276ab7c13e250c4f4748a3cadc71057ef36edba1f566fe55a5babde04","relationships":{"show":{"data":{"id":"2422","type":"show"}}},"type":"collectionItem"},{"attributes":{ },"id":"150936a1ca86485ec540c124d5c52865163b44d1a17b7972424e35785066cc29","relationships":{"show":{"data":{"id":"1719","type":"show"}}},"type":"collectionItem"},{"attributes":{\n "hidden" : false,\n "hints" : [ "hide-for-apps" ]\n},"id":"3aee0515c614137bc541833a59df512c417c8bc6e859b92bc036dc8fc8978144","relationships":{"collection":{"data":{"id":"113592752147346451705052748709207041840","type":"collection"}}},"type":"collectionItem"},{"attributes":{ },"id":"4d723ca8174b7fe26473156f97706c47eec53299089c78b7e1fcb25e72a3dc8f","relationships":{"show":{"data":{"id":"12841","type":"show"}}},"type":"collectionItem"},{"id":"608e0147b6823990e8a1e8bf3f87e215bf014fcdbb7f4ad14703813f651eecbe","relationships":{"video":{"data":{"id":"1166418","type":"video"}}},"type":"collectionItem"},{"attributes":{ },"id":"6d02dcba813a3307430c8046c98f1d9750b14162ebc2f9f876f4ebc05751df35","relationships":{"show":{"data":{"id":"12865","type":"show"}}},"type":"collectionItem"},{"attributes":{ },"id":"6ef2b8f1a3cddb02188fbbdaf9e856225e3d619afe9df525607414c27b0a9169","relationships":{"show":{"data":{"id":"12865","type":"show"}}},"type":"collectionItem"},{"attributes":{ },"id":"7874a391fbfc04c3c9a66c3fece6d9805c1e1134c368da1efa8902a5cb1e5d55","relationships":{"show":{"data":{"id":"12272","type":"show"}}},"type":"collectionItem"},{"attributes":{ },"id":"97b084d6e53871f8aa92c25ba7347c3411db90cc34f8dfec34ac9c4de7f2c9ef","relationships":{"show":{"data":{"id":"12842","type":"show"}}},"type":"collectionItem"},{"id":"9aebf7fc794c7c06b488bcd697bee52df18ef8adebfb9e4deff06b6dd170b564","relationships":{"video":{"data":{"id":"1166347","type":"video"}}},"type":"collectionItem"},{"attributes":{ },"id":"a6b2e7a2ef6170eca1662b16807af288566dc696d4a94ea6a6237084121150f3","relationships":{"show":{"data":{"id":"12402","type":"show"}}},"type":"collectionItem"},{"attributes":{ },"id":"b9c0a5e1b986979fc105430b6fdf809213ebc5a5c00b1d2e909812278d01c837","relationships":{"show":{"data":{"id":"12940","type":"show"}}},"type":"collectionItem"},{"attributes":{ },"id":"c9c5654a3f98088a14c4125180a960bd000d02ec0cedd26f54ea36e36f55c163","relationships":{"collection":{"data":{"id":"2416925543383789611504437476075883317","type":"collection"}}},"type":"collectionItem"},{"attributes":{ },"id":"e00059c3d2010493e6ecc02fd9ea681fab063576ef2db0e8af459ba7f5bbddcf","relationships":{"collection":{"data":{"id":"195259463153962764250523337809700033750","type":"collection"}}},"type":"collectionItem"},{"attributes":{ },"id":"fbf9db275f15e4d8e6fe4656cb40af1adc0b36e81da3bada7ae31c2993fcf4e1","relationships":{"show":{"data":{"id":"12832","type":"show"}}},"type":"collectionItem"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_grayscale",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/16/13782b97-97df-32fe-a533-7fc1204ed4f4.png",\n "width" : 500\n},"id":"channel_107_13782b97-97df-32fe-a533-7fc1204ed4f4_logo_grayscale","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_alternate",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/16/3d81f079-34b5-37bd-868a-ae1e92c6ee87.png",\n "width" : 500\n},"id":"channel_107_3d81f079-34b5-37bd-868a-ae1e92c6ee87_logo_alternate","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/16/4ca703eb-9090-3226-b71e-a90054014c4c.png",\n "width" : 500\n},"id":"channel_107_4ca703eb-9090-3226-b71e-a90054014c4c_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/30/ae9c38dd-c8af-3b90-8b5b-c7703ab46103.jpeg",\n "width" : 3000\n},"id":"channel_107_ae9c38dd-c8af-3b90-8b5b-c7703ab46103_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/30/cb45a520-64ff-340c-bc35-17b797452990.jpeg",\n "width" : 3840\n},"id":"channel_107_cb45a520-64ff-340c-bc35-17b797452990_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_attribution",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/16/d3f28f6f-7991-3810-a5ea-754297661fe2.png",\n "width" : 500\n},"id":"channel_107_d3f28f6f-7991-3810-a5ea-754297661fe2_logo_attribution","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/059e967a-a580-3564-93e1-53f1638d5feb.jpeg",\n "width" : 3000\n},"id":"channel_84_059e967a-a580-3564-93e1-53f1638d5feb_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/11/04/38627fbb-c07f-3660-9a2b-cc61ff4e2ee1.png",\n "width" : 843\n},"id":"channel_84_38627fbb-c07f-3660-9a2b-cc61ff4e2ee1_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_alternate",\n "src" : "https://us1-prod-images.disco-api.com/2020/11/04/5abbe18b-e732-341d-a715-adcfb4f62bed.png",\n "width" : 500\n},"id":"channel_84_5abbe18b-e732-341d-a715-adcfb4f62bed_logo_alternate","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_attribution",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/06/9fb1c51d-66f4-3f99-a56c-82ff8a22950b.png",\n "width" : 926\n},"id":"channel_84_9fb1c51d-66f4-3f99-a56c-82ff8a22950b_logo_attribution","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_grayscale",\n "src" : "https://us1-prod-images.disco-api.com/2020/11/04/a288a7a5-cc4d-344d-88ec-7668d3799f80.png",\n "width" : 843\n},"id":"channel_84_a288a7a5-cc4d-344d-88ec-7668d3799f80_logo_grayscale","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/a4599a71-5c01-376b-b158-e2b2a5cd49b1.jpeg",\n "width" : 3840\n},"id":"channel_84_a4599a71-5c01-376b-b158-e2b2a5cd49b1_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_attribution",\n "src" : "https://us1-prod-images.disco-api.com/2020/11/04/619bf98d-a938-39f5-8814-4002b4389b95.png",\n "width" : 1024\n},"id":"channel_88_619bf98d-a938-39f5-8814-4002b4389b95_logo_attribution","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_alternate",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/06/9904141b-9436-35cf-9404-894e7c509b97.png",\n "width" : 500\n},"id":"channel_88_9904141b-9436-35cf-9404-894e7c509b97_logo_alternate","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo_grayscale",\n "src" : "https://us1-prod-images.disco-api.com/2020/11/04/9fc2d809-182c-3e03-a4bb-ec932f826865.png",\n "width" : 809\n},"id":"channel_88_9fc2d809-182c-3e03-a4bb-ec932f826865_logo_grayscale","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/b86a281f-ef75-3e38-ae93-7997a52d5b3b.jpeg",\n "width" : 3840\n},"id":"channel_88_b86a281f-ef75-3e38-ae93-7997a52d5b3b_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 500,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/11/04/e118c8c7-1f79-361e-b667-160ace6b7c9f.png",\n "width" : 809\n},"id":"channel_88_e118c8c7-1f79-361e-b667-160ace6b7c9f_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/fc939454-642b-3fb3-92f7-dabb40f33d43.jpeg",\n "width" : 3000\n},"id":"channel_88_fc939454-642b-3fb3-92f7-dabb40f33d43_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/13/0920f84d-171a-345f-806e-2cd2cc2f9c29.jpeg",\n "width" : 2560\n},"id":"show_12272_0920f84d-171a-345f-806e-2cd2cc2f9c29_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/13/350b0d11-e883-3b3e-af13-02674db9d280.jpeg",\n "width" : 3000\n},"id":"show_12272_350b0d11-e883-3b3e-af13-02674db9d280_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/13/4bd99765-6ac4-38f9-b0e9-0c1023561f95.jpeg",\n "width" : 3840\n},"id":"show_12272_4bd99765-6ac4-38f9-b0e9-0c1023561f95_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 585,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/13/4ff363a6-f10e-30f0-a621-53fd87cef52d.png",\n "width" : 1800\n},"id":"show_12272_4ff363a6-f10e-30f0-a621-53fd87cef52d_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/13/eb1bf341-b159-3765-8f7e-7af6f138dd08.jpeg",\n "width" : 2560\n},"id":"show_12272_eb1bf341-b159-3765-8f7e-7af6f138dd08_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/25/0a07843b-1740-3816-971c-426c9d66e7be.jpeg",\n "width" : 2560\n},"id":"show_12402_0a07843b-1740-3816-971c-426c9d66e7be_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 680,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/25/2dca4697-6a77-3904-980a-4cfa4f91b187.png",\n "width" : 1800\n},"id":"show_12402_2dca4697-6a77-3904-980a-4cfa4f91b187_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/25/464c232e-59e4-3dde-a238-ee0c4e7f7a1a.jpeg",\n "width" : 3000\n},"id":"show_12402_464c232e-59e4-3dde-a238-ee0c4e7f7a1a_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/25/d768ccd5-7c83-377d-b103-69c70681ff35.jpeg",\n "width" : 2560\n},"id":"show_12402_d768ccd5-7c83-377d-b103-69c70681ff35_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/08/25/e5a08176-9425-3a97-be11-da5e0527f701.jpeg",\n "width" : 3840\n},"id":"show_12402_e5a08176-9425-3a97-be11-da5e0527f701_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 425,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/402e7053-b206-3e3e-ad6d-9eb58f574817.png",\n "width" : 1800\n},"id":"show_12832_402e7053-b206-3e3e-ad6d-9eb58f574817_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/77c25030-1733-3ebd-be0b-0cd1713e5f8d.jpeg",\n "width" : 2560\n},"id":"show_12832_77c25030-1733-3ebd-be0b-0cd1713e5f8d_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/92964489-4f62-32ab-8d7f-5380ab62126d.jpeg",\n "width" : 3840\n},"id":"show_12832_92964489-4f62-32ab-8d7f-5380ab62126d_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/9d238317-5fff-378f-93b7-96de7d0a9dab.jpeg",\n "width" : 2560\n},"id":"show_12832_9d238317-5fff-378f-93b7-96de7d0a9dab_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/e6d7092d-1d60-3fb4-b90f-829af12731f4.jpeg",\n "width" : 3000\n},"id":"show_12832_e6d7092d-1d60-3fb4-b90f-829af12731f4_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 900,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/1b1267c4-ca99-3184-aa78-8024713ad834.png",\n "width" : 1076\n},"id":"show_12841_1b1267c4-ca99-3184-aa78-8024713ad834_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/6f49d9b3-2923-34dc-8f06-d76ea303a111.jpeg",\n "width" : 3840\n},"id":"show_12841_6f49d9b3-2923-34dc-8f06-d76ea303a111_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/b2b4ea39-8038-32f3-931f-14dcd94f91cb.jpeg",\n "width" : 2560\n},"id":"show_12841_b2b4ea39-8038-32f3-931f-14dcd94f91cb_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/d5db9359-bb75-3dcf-b448-a8e6adca2c26.jpeg",\n "width" : 3000\n},"id":"show_12841_d5db9359-bb75-3dcf-b448-a8e6adca2c26_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/f4185ecf-0e8d-3c62-8245-a0b164affc45.jpeg",\n "width" : 2560\n},"id":"show_12841_f4185ecf-0e8d-3c62-8245-a0b164affc45_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/5a5551a9-cfdd-3c79-bdda-671e709fa32b.jpeg",\n "width" : 3000\n},"id":"show_12842_5a5551a9-cfdd-3c79-bdda-671e709fa32b_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/62a94a5a-db93-39cf-848b-b0ed1dd748d1.jpeg",\n "width" : 3840\n},"id":"show_12842_62a94a5a-db93-39cf-848b-b0ed1dd748d1_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 261,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/ddce6b99-4926-354b-83e8-e1feb98c8709.png",\n "width" : 1800\n},"id":"show_12842_ddce6b99-4926-354b-83e8-e1feb98c8709_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/e669dbf9-b498-3e24-b172-4f5e29320cdb.jpeg",\n "width" : 2560\n},"id":"show_12842_e669dbf9-b498-3e24-b172-4f5e29320cdb_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/23/eb2765db-b461-35b9-ace7-d7b2149d6d87.jpeg",\n "width" : 2560\n},"id":"show_12842_eb2765db-b461-35b9-ace7-d7b2149d6d87_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/24/176f3cf9-55b6-3590-a947-149994dcd650.jpeg",\n "width" : 3840\n},"id":"show_12865_176f3cf9-55b6-3590-a947-149994dcd650_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/24/4cbd738a-23cf-3660-bc84-45b8f030a8fd.jpeg",\n "width" : 2560\n},"id":"show_12865_4cbd738a-23cf-3660-bc84-45b8f030a8fd_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 900,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/24/871aeae1-5e6b-38e6-920e-83a2409db00d.png",\n "width" : 1287\n},"id":"show_12865_871aeae1-5e6b-38e6-920e-83a2409db00d_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/24/9a96b9fc-b198-3879-b76f-cf5e0093650d.jpeg",\n "width" : 3000\n},"id":"show_12865_9a96b9fc-b198-3879-b76f-cf5e0093650d_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/24/d0ae3502-e630-3593-9f69-2a03e8e90212.jpeg",\n "width" : 2560\n},"id":"show_12865_d0ae3502-e630-3593-9f69-2a03e8e90212_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/4f2463cd-2840-30d0-a1de-94752931a56d.jpeg",\n "width" : 3000\n},"id":"show_12940_4f2463cd-2840-30d0-a1de-94752931a56d_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/8485251e-eb73-3d59-8a11-2eff506e0b1c.jpeg",\n "width" : 3840\n},"id":"show_12940_8485251e-eb73-3d59-8a11-2eff506e0b1c_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/b6b04ceb-34a7-3cc5-ad1a-635b94a76bb5.jpeg",\n "width" : 2560\n},"id":"show_12940_b6b04ceb-34a7-3cc5-ad1a-635b94a76bb5_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/dbc97d5e-d853-372a-bed6-919e137ad5ab.jpeg",\n "width" : 2560\n},"id":"show_12940_dbc97d5e-d853-372a-bed6-919e137ad5ab_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 233,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/28/ff82fa03-dcd0-313b-858a-b2ca6200eb29.png",\n "width" : 1800\n},"id":"show_12940_ff82fa03-dcd0-313b-858a-b2ca6200eb29_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/07/01/09bbc8d0-4a8d-3369-91fe-199e58b62398.jpeg",\n "width" : 2560\n},"id":"show_1719_09bbc8d0-4a8d-3369-91fe-199e58b62398_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 684,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/07/01/0e6e42fb-29a7-36c6-b22e-0b793bccaed2.png",\n "width" : 1800\n},"id":"show_1719_0e6e42fb-29a7-36c6-b22e-0b793bccaed2_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/07/29/10cd7d6d-9aac-3c5a-bd35-607e69289c38.jpeg",\n "width" : 2560\n},"id":"show_1719_10cd7d6d-9aac-3c5a-bd35-607e69289c38_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/07/01/50f6999a-a5e5-341a-9eaa-e0b651002eb3.png",\n "width" : 3000\n},"id":"show_1719_50f6999a-a5e5-341a-9eaa-e0b651002eb3_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/07/01/9d8d025d-3270-3ecc-9f57-ba93db5f2ba8.jpeg",\n "width" : 3840\n},"id":"show_1719_9d8d025d-3270-3ecc-9f57-ba93db5f2ba8_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 2160,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/06/29/0ac17973-85c6-387a-bb82-dd92aac18a2d.jpeg",\n "width" : 3840\n},"id":"show_2422_0ac17973-85c6-387a-bb82-dd92aac18a2d_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster",\n "src" : "https://us1-prod-images.disco-api.com/2020/07/29/311d3f04-b1b9-33f2-83c3-7317ff7babe9.jpeg",\n "width" : 2560\n},"id":"show_2422_311d3f04-b1b9-33f2-83c3-7317ff7babe9_poster","type":"image"},{"attributes":{\n "default" : true,\n "height" : 490,\n "kind" : "logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/06/29/51f7a3be-7564-3d23-aa47-7e3d6d23353d.png",\n "width" : 1800\n},"id":"show_2422_51f7a3be-7564-3d23-aa47-7e3d6d23353d_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3000,\n "kind" : "cover_artwork",\n "src" : "https://us1-prod-images.disco-api.com/2020/06/29/b5b7f5ef-254c-3536-a1fb-94d853b982da.png",\n "width" : 3000\n},"id":"show_2422_b5b7f5ef-254c-3536-a1fb-94d853b982da_cover_artwork","type":"image"},{"attributes":{\n "default" : true,\n "height" : 3840,\n "kind" : "poster_with_logo",\n "src" : "https://us1-prod-images.disco-api.com/2020/06/29/c8c1079f-7f98-345e-87fd-6ffeb1bf06cd.jpeg",\n "width" : 2560\n},"id":"show_2422_c8c1079f-7f98-345e-87fd-6ffeb1bf06cd_poster_with_logo","type":"image"},{"attributes":{\n "default" : true,\n "height" : 1080,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2021/01/02/1b95f49b-92f2-3bd1-8312-09f06c44efcb.jpeg",\n "width" : 1920\n},"id":"video_1166347_1b95f49b-92f2-3bd1-8312-09f06c44efcb_default","type":"image"},{"attributes":{\n "default" : true,\n "height" : 1080,\n "kind" : "default",\n "src" : "https://us1-prod-images.disco-api.com/2020/12/26/0d0b76e2-2ed5-3f4d-8aa3-2441dbc52cfc.jpeg",\n "width" : 1920\n},"id":"video_1166418_0d0b76e2-2ed5-3f4d-8aa3-2441dbc52cfc_default","type":"image"},{"attributes":{\n "color" : "#ffffff",\n "labelPriority" : 1,\n "labelVisible" : false,\n "name" : "Magnolia Net Preview"\n},"id":"MagnoliaNetPreview","type":"package"},{"attributes":{\n "alias" : "show-page-super-dad",\n "component" : {\n "id" : "page",\n "templateId" : "primary"\n },\n "name" : "show-page-super-dad",\n "pageMetadataTitle" : "Super Dad",\n "published" : "2020-12-29T04:31:24.105437Z",\n "revision" : 0,\n "state" : "published",\n "title" : "Super Dad"\n},"id":"308953312918263275172030705745619495572","relationships":{"items":{"data":[{"id":"a54954ae982b387f98e7354e1a18e6b33ee71e72e916b116231f32801c13c5b5","type":"pageItem"},{"id":"da186180da5a45f7ebc7f9373d815f581ceeeab31060519e9c303e28acd4c939","type":"pageItem"}]},"routes":{"data":[{"id":"164679836322950197988796807764660202509","type":"route"}]}},"type":"page"},{"attributes":{ },"id":"a54954ae982b387f98e7354e1a18e6b33ee71e72e916b116231f32801c13c5b5","relationships":{"collection":{"data":{"id":"235849961306540820283536216748337616075","type":"collection"}}},"type":"pageItem"},{"attributes":{\n "hidden" : false,\n "hints" : [ "hide-for-connected-devices" ]\n},"id":"da186180da5a45f7ebc7f9373d815f581ceeeab31060519e9c303e28acd4c939","relationships":{"collection":{"data":{"id":"275697655720519752855610743297963739823","type":"collection"}}},"type":"pageItem"},{"attributes":{\n "canonical" : true,\n "url" : "/show/first-time-fixer"\n},"id":"15d96fe70423fc8fc766fb08f95f41bfc7c2e36e9b925183d76763883e6cb392","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/home-on-the-road-with-johnnyswim"\n},"id":"1d31408e4d2e6981eb6bd59afb7cace66eb8d555e6c883549e2ed50ba9530627","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/treehouse-masters"\n},"id":"2755576555b0d89a42fa94de190ec683a49a2f49b78426bdcab95dc1c714d57a","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/video/super-dad/super-dad-trailer"\n},"id":"29fabf5e5caf9c1f18ac0c0095478fc97a2009557266368ee2cb4816d271d4e3","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/super-dad"\n},"id":"2f7953f303607653ad754628a94a54e46b645d8e2e228fb2b15bb7f13097a276","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/video/super-dad/skate-ramp-for-six"\n},"id":"38af3976b9b35f949a47b72d5966823e0a856f0227311a3b5115d05d4ac59c4b","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/restoration-road-with-clint-harp"\n},"id":"43a8d01c673ad4348fc5d1e2897978801c7a8a3c6f46fe9ed3e2b02e7557c593","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/maine-cabin-masters"\n},"id":"50bac306a6a1638227f5ccae4305f5aeef45a69fb7f23855caf68cad0aad3b3e","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/the-fieldhouse"\n},"id":"5ab85fa21e1f98b121a13d79dd9f972e77235bfab6aa6f0f3fd7e1db612fc039","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/channel/diy-network"\n},"id":"6f1a2bfb9123f5fefb2d7f254063634f7b8c39cc703d9d9f10e95056fb792000","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/channel/magnolia-network-preview"\n},"id":"851e8cba41ef26e3f7d9b98e0f422a38a0315633b9a3136f8845c7a47cf6bde5","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/genre/home"\n},"id":"8673539d838cc4e2d63f84ccacbea439291b004277e544080b97b1e2cc009541","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/genre/lifestyle"\n},"id":"a8d2c0b0e9a4f879e7a6082557dce569f4676440f515c257744a130e12f8df83","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/channel/animal-planet"\n},"id":"b943b4eabcf8e6d887fc2b3e4918e0d27421c36dd83e9401c795827a3f7a642c","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/the-vanilla-ice-project"\n},"id":"bd7b3f725ae5beea4e36e8429e9697e1ca3b45149a1609af1c33286981cb50c7","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/genre/nature-animals"\n},"id":"bdb5cfe24dddee72ae805f23c154f984b2ebd7b83a84f2b499405d7ae9c67863","type":"route"},{"attributes":{\n "canonical" : true,\n "url" : "/show/stone-house-revival"\n},"id":"c025c29078244c798f24d02f885b0294a869b10b27a765bf944a5a4b26752264","type":"route"},{"attributes":{\n "alternateId" : "maine-cabin-masters",\n "analyticsId" : "go_12272",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "A family of builders restores abandoned cabins in the woods of Maine.",\n "episodeCount" : 63,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "Builder Chase Morrill teams up with his brother, sister and best friend to find and restore abandoned cabins buried deep in the remote woods of Maine.",\n "name" : "Maine Cabin Masters",\n "newestEpisodePublishStart" : "2020-05-25T04:00:00Z",\n "seasonNumbers" : [ 1, 2, 3, 4, 5 ],\n "subtitles" : [ ],\n "videoCount" : 63,\n "webExclusive" : false\n},"id":"12272","relationships":{"alternateChannels":{"data":[{"id":"84","type":"channel"},{"id":"76","type":"channel"},{"id":"90","type":"channel"}]},"images":{"data":[{"id":"show_12272_4bd99765-6ac4-38f9-b0e9-0c1023561f95_default","type":"image"},{"id":"show_12272_350b0d11-e883-3b3e-af13-02674db9d280_cover_artwork","type":"image"},{"id":"show_12272_eb1bf341-b159-3765-8f7e-7af6f138dd08_poster_with_logo","type":"image"},{"id":"show_12272_4ff363a6-f10e-30f0-a621-53fd87cef52d_logo","type":"image"},{"id":"show_12272_0920f84d-171a-345f-806e-2cd2cc2f9c29_poster","type":"image"}]},"primaryChannel":{"data":{"id":"88","type":"channel"}},"routes":{"data":[{"id":"50bac306a6a1638227f5ccae4305f5aeef45a69fb7f23855caf68cad0aad3b3e","type":"route"}]},"seasons":{"data":[{"id":"9934","type":"season"},{"id":"10181","type":"season"},{"id":"10201","type":"season"},{"id":"9931","type":"season"},{"id":"9896","type":"season"}]},"txGenres":{"data":[{"id":"682d2c52-ab9b-4033-ab49-6bfe2b3ef5ac","type":"taxonomyNode"},{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "treehouse-masters",\n "analyticsId" : "go_12402",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "Pete Nelson creates incredible homes and businesses in nature's canopy.",\n "episodeCount" : 98,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "Pete Nelson and his merry band of treehouse men make up a team of designers, carpenters and builders who create the most magnificent, whimsical, staggering, spectacular, and jaw-dropping treehouses all around the world.",\n "name" : "Treehouse Masters",\n "newestEpisodePublishStart" : "2020-12-01T16:00:00Z",\n "seasonNumbers" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ],\n "subtitles" : [ ],\n "videoCount" : 98,\n "webExclusive" : false\n},"id":"12402","relationships":{"alternateChannels":{"data":[{"id":"76","type":"channel"},{"id":"80","type":"channel"},{"id":"88","type":"channel"}]},"images":{"data":[{"id":"show_12402_464c232e-59e4-3dde-a238-ee0c4e7f7a1a_cover_artwork","type":"image"},{"id":"show_12402_e5a08176-9425-3a97-be11-da5e0527f701_default","type":"image"},{"id":"show_12402_d768ccd5-7c83-377d-b103-69c70681ff35_poster_with_logo","type":"image"},{"id":"show_12402_2dca4697-6a77-3904-980a-4cfa4f91b187_logo","type":"image"},{"id":"show_12402_0a07843b-1740-3816-971c-426c9d66e7be_poster","type":"image"}]},"primaryChannel":{"data":{"id":"84","type":"channel"}},"routes":{"data":[{"id":"2755576555b0d89a42fa94de190ec683a49a2f49b78426bdcab95dc1c714d57a","type":"route"}]},"seasons":{"data":[{"id":"10867","type":"season"},{"id":"10856","type":"season"},{"id":"10850","type":"season"},{"id":"10868","type":"season"},{"id":"10473","type":"season"},{"id":"10854","type":"season"},{"id":"10870","type":"season"},{"id":"10855","type":"season"},{"id":"10869","type":"season"},{"id":"10860","type":"season"},{"id":"10818","type":"season"}]},"txGenres":{"data":[{"id":"81adf4e4-89f2-4101-8368-8da4a0b7968b","type":"taxonomyNode"},{"id":"682d2c52-ab9b-4033-ab49-6bfe2b3ef5ac","type":"taxonomyNode"},{"id":"92bf811e-3469-4873-b78e-71013a333d1e","type":"taxonomyNode"},{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"},{"id":"4f21c426-2c4e-42e6-ba6f-56368b5817aa","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "the-fieldhouse",\n "analyticsId" : "go_12832",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "Justin Bane and his staff change lives at an Abilene, TX, fitness facility.",\n "episodeCount" : 1,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "At The Fieldhouse, physical and personal challenges are tackled head-on. Owner Justin Bane and his staff change lives by restoring and rehabilitating clients from the inside out at this cutting-edge fitness facility in Abilene, Texas.",\n "name" : "The Fieldhouse",\n "seasonNumbers" : [ 1 ],\n "subtitles" : [ ],\n "videoCount" : 2,\n "webExclusive" : false\n},"id":"12832","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"images":{"data":[{"id":"show_12832_e6d7092d-1d60-3fb4-b90f-829af12731f4_cover_artwork","type":"image"},{"id":"show_12832_92964489-4f62-32ab-8d7f-5380ab62126d_default","type":"image"},{"id":"show_12832_77c25030-1733-3ebd-be0b-0cd1713e5f8d_poster_with_logo","type":"image"},{"id":"show_12832_402e7053-b206-3e3e-ad6d-9eb58f574817_logo","type":"image"},{"id":"show_12832_9d238317-5fff-378f-93b7-96de7d0a9dab_poster","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"5ab85fa21e1f98b121a13d79dd9f972e77235bfab6aa6f0f3fd7e1db612fc039","type":"route"}]},"seasons":{"data":[{"id":"11974","type":"season"}]},"txGenres":{"data":[{"id":"4483ce3f-cd64-415b-a2cc-547eca3fb9cd","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "home-on-the-road-with-johnnyswim",\n "analyticsId" : "go_12841",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "Musical duo Johnnyswim shares the struggles and triumphs of life on tour.",\n "episodeCount" : 1,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "Abner Ramirez and Amanda Sudano Ramirez of the musical duo Johnnyswim document their three-month, cross-country tour while juggling their growing family and finding new adventures in each city along the way.",\n "name" : "Home on the Road with Johnnyswim",\n "seasonNumbers" : [ 1 ],\n "subtitles" : [ ],\n "videoCount" : 2,\n "webExclusive" : false\n},"id":"12841","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"images":{"data":[{"id":"show_12841_6f49d9b3-2923-34dc-8f06-d76ea303a111_default","type":"image"},{"id":"show_12841_d5db9359-bb75-3dcf-b448-a8e6adca2c26_cover_artwork","type":"image"},{"id":"show_12841_b2b4ea39-8038-32f3-931f-14dcd94f91cb_poster_with_logo","type":"image"},{"id":"show_12841_1b1267c4-ca99-3184-aa78-8024713ad834_logo","type":"image"},{"id":"show_12841_f4185ecf-0e8d-3c62-8245-a0b164affc45_poster","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"1d31408e4d2e6981eb6bd59afb7cace66eb8d555e6c883549e2ed50ba9530627","type":"route"}]},"seasons":{"data":[{"id":"11982","type":"season"}]},"txGenres":{"data":[{"id":"4483ce3f-cd64-415b-a2cc-547eca3fb9cd","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "restoration-road-with-clint-harp",\n "analyticsId" : "go_12842",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "Clint Harp gets hands-on renovating old structures across the US.",\n "episodeCount" : 1,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "Carpenter Clint Harp hits the road in search of incredible historical structures across the country that are in need of restoration, while exploring their origins and dreaming of their futures.",\n "name" : "Restoration Road With Clint Harp",\n "seasonNumbers" : [ 1 ],\n "subtitles" : [ ],\n "videoCount" : 2,\n "webExclusive" : false\n},"id":"12842","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"images":{"data":[{"id":"show_12842_62a94a5a-db93-39cf-848b-b0ed1dd748d1_default","type":"image"},{"id":"show_12842_5a5551a9-cfdd-3c79-bdda-671e709fa32b_cover_artwork","type":"image"},{"id":"show_12842_e669dbf9-b498-3e24-b172-4f5e29320cdb_poster_with_logo","type":"image"},{"id":"show_12842_ddce6b99-4926-354b-83e8-e1feb98c8709_logo","type":"image"},{"id":"show_12842_eb2765db-b461-35b9-ace7-d7b2149d6d87_poster","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"43a8d01c673ad4348fc5d1e2897978801c7a8a3c6f46fe9ed3e2b02e7557c593","type":"route"}]},"seasons":{"data":[{"id":"11983","type":"season"}]},"txGenres":{"data":[{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "super-dad",\n "analyticsId" : "go_12865",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "DIY expert Taylor Calmus helps dads realize their kids' backyard dreams.",\n "episodeCount" : 1,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "Father and DIY expert Taylor Calmus, along with his team of skilled builders, help aspiring DIY dads turn their kids' outrageous backyard dreams into playtime realities.",\n "name" : "Super Dad",\n "seasonNumbers" : [ 1 ],\n "subtitles" : [ ],\n "videoCount" : 2,\n "webExclusive" : false\n},"id":"12865","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"images":{"data":[{"id":"show_12865_9a96b9fc-b198-3879-b76f-cf5e0093650d_cover_artwork","type":"image"},{"id":"show_12865_176f3cf9-55b6-3590-a947-149994dcd650_default","type":"image"},{"id":"show_12865_d0ae3502-e630-3593-9f69-2a03e8e90212_poster_with_logo","type":"image"},{"id":"show_12865_871aeae1-5e6b-38e6-920e-83a2409db00d_logo","type":"image"},{"id":"show_12865_4cbd738a-23cf-3660-bc84-45b8f030a8fd_poster","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"2f7953f303607653ad754628a94a54e46b645d8e2e228fb2b15bb7f13097a276","type":"route"}]},"seasons":{"data":[{"id":"11997","type":"season"}]},"txGenres":{"data":[{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "first-time-fixer",\n "analyticsId" : "go_12940",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "First-time house renovators take their dreams into their own hands.",\n "episodeCount" : 1,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "With a little help from Chip and Joanna, first-time house renovators take their home renovation dreams into their own hands and experience the risk and reward that comes with trying something new.",\n "name" : "First Time Fixer",\n "seasonNumbers" : [ 1 ],\n "subtitles" : [ ],\n "videoCount" : 2,\n "webExclusive" : false\n},"id":"12940","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"images":{"data":[{"id":"show_12940_4f2463cd-2840-30d0-a1de-94752931a56d_cover_artwork","type":"image"},{"id":"show_12940_8485251e-eb73-3d59-8a11-2eff506e0b1c_default","type":"image"},{"id":"show_12940_dbc97d5e-d853-372a-bed6-919e137ad5ab_poster_with_logo","type":"image"},{"id":"show_12940_ff82fa03-dcd0-313b-858a-b2ca6200eb29_logo","type":"image"},{"id":"show_12940_b6b04ceb-34a7-3cc5-ad1a-635b94a76bb5_poster","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"15d96fe70423fc8fc766fb08f95f41bfc7c2e36e9b925183d76763883e6cb392","type":"route"}]},"seasons":{"data":[{"id":"12055","type":"season"}]},"txGenres":{"data":[{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "the-vanilla-ice-project",\n "analyticsId" : "go_1719",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "Pop icon Vanilla Ice and his crew of contractors renovate Florida mansions.",\n "episodeCount" : 105,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "Pop icon Vanilla Ice brings more than 15 years of home improvement experience to Florida as he and his crew of contractors renovate mansions in Palm Beach.",\n "name" : "The Vanilla Ice Project",\n "newestEpisodePublishStart" : "2019-08-31T04:00:00Z",\n "seasonNumbers" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],\n "subtitles" : [ ],\n "videoCount" : 105,\n "webExclusive" : false\n},"id":"1719","relationships":{"alternateChannels":{"data":[{"id":"80","type":"channel"},{"id":"90","type":"channel"}]},"images":{"data":[{"id":"show_1719_50f6999a-a5e5-341a-9eaa-e0b651002eb3_cover_artwork","type":"image"},{"id":"show_1719_9d8d025d-3270-3ecc-9f57-ba93db5f2ba8_default","type":"image"},{"id":"show_1719_09bbc8d0-4a8d-3369-91fe-199e58b62398_poster_with_logo","type":"image"},{"id":"show_1719_0e6e42fb-29a7-36c6-b22e-0b793bccaed2_logo","type":"image"},{"id":"show_1719_10cd7d6d-9aac-3c5a-bd35-607e69289c38_poster","type":"image"}]},"primaryChannel":{"data":{"id":"88","type":"channel"}},"routes":{"data":[{"id":"bd7b3f725ae5beea4e36e8429e9697e1ca3b45149a1609af1c33286981cb50c7","type":"route"}]},"seasons":{"data":[{"id":"4792","type":"season"},{"id":"4795","type":"season"},{"id":"2758","type":"season"},{"id":"4789","type":"season"},{"id":"2664","type":"season"},{"id":"4274","type":"season"},{"id":"4790","type":"season"},{"id":"4794","type":"season"},{"id":"4791","type":"season"}]},"txGenres":{"data":[{"id":"682d2c52-ab9b-4033-ab49-6bfe2b3ef5ac","type":"taxonomyNode"},{"id":"4d30d87d-2299-4efe-98c3-cf680a054df2","type":"taxonomyNode"},{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "stone-house-revival",\n "analyticsId" : "go_2422",\n "audioTracks" : [ ],\n "customAttributes" : { },\n "description" : "A master carpenter revives historic homes in Bucks County, PA.",\n "episodeCount" : 41,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "hasExpiringEpisodes" : false,\n "hasNewEpisodes" : false,\n "longDescription" : "In Bucks County, PA, where the structures are older than the country itself, master carpenter Jeff Devlin revives the charm of rundown homes and turns them into modern spaces, all while preserving their historical integrity.",\n "name" : "Stone House Revival",\n "newestEpisodePublishStart" : "2018-07-29T12:00:00Z",\n "seasonNumbers" : [ 1, 2, 3 ],\n "subtitles" : [ ],\n "videoCount" : 41,\n "webExclusive" : false\n},"id":"2422","relationships":{"alternateChannels":{"data":[{"id":"90","type":"channel"}]},"images":{"data":[{"id":"show_2422_b5b7f5ef-254c-3536-a1fb-94d853b982da_cover_artwork","type":"image"},{"id":"show_2422_0ac17973-85c6-387a-bb82-dd92aac18a2d_default","type":"image"},{"id":"show_2422_c8c1079f-7f98-345e-87fd-6ffeb1bf06cd_poster_with_logo","type":"image"},{"id":"show_2422_51f7a3be-7564-3d23-aa47-7e3d6d23353d_logo","type":"image"},{"id":"show_2422_311d3f04-b1b9-33f2-83c3-7317ff7babe9_poster","type":"image"}]},"primaryChannel":{"data":{"id":"88","type":"channel"}},"routes":{"data":[{"id":"c025c29078244c798f24d02f885b0294a869b10b27a765bf944a5a4b26752264","type":"route"}]},"seasons":{"data":[{"id":"4707","type":"season"},{"id":"4704","type":"season"},{"id":"4705","type":"season"}]},"txGenres":{"data":[{"id":"682d2c52-ab9b-4033-ab49-6bfe2b3ef5ac","type":"taxonomyNode"},{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"show"},{"attributes":{\n "alternateId" : "lifestyle",\n "kind" : "genres",\n "name" : "Lifestyle"\n},"id":"4483ce3f-cd64-415b-a2cc-547eca3fb9cd","relationships":{"routes":{"data":[{"id":"a8d2c0b0e9a4f879e7a6082557dce569f4676440f515c257744a130e12f8df83","type":"route"}]}},"type":"taxonomyNode"},{"attributes":{\n "alternateId" : "flipping-houses",\n "kind" : "home",\n "name" : "Flipping Houses"\n},"id":"4d30d87d-2299-4efe-98c3-cf680a054df2","type":"taxonomyNode"},{"attributes":{\n "alternateId" : "outdoor-spaces",\n "kind" : "home",\n "name" : "Outdoor Spaces"\n},"id":"4f21c426-2c4e-42e6-ba6f-56368b5817aa","type":"taxonomyNode"},{"attributes":{\n "alternateId" : "building-renovation",\n "kind" : "home",\n "name" : "Building & Renovation"\n},"id":"682d2c52-ab9b-4033-ab49-6bfe2b3ef5ac","type":"taxonomyNode"},{"attributes":{\n "alternateId" : "nature-animals",\n "kind" : "genres",\n "name" : "Nature & Animals"\n},"id":"81adf4e4-89f2-4101-8368-8da4a0b7968b","relationships":{"routes":{"data":[{"id":"bdb5cfe24dddee72ae805f23c154f984b2ebd7b83a84f2b499405d7ae9c67863","type":"route"}]}},"type":"taxonomyNode"},{"attributes":{\n "alternateId" : "home",\n "kind" : "genres",\n "name" : "Home"\n},"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","relationships":{"routes":{"data":[{"id":"8673539d838cc4e2d63f84ccacbea439291b004277e544080b97b1e2cc009541","type":"route"}]}},"type":"taxonomyNode"},{"attributes":{\n "alternateId" : "wildlife",\n "kind" : "nature-animals",\n "name" : "Wildlife"\n},"id":"92bf811e-3469-4873-b78e-71013a333d1e","type":"taxonomyNode"},{"attributes":{\n "airDate" : "2021-01-03T05:00:00Z",\n "alternateId" : "super-dad-trailer",\n "audioTracks" : [ "en" ],\n "availabilityWindows" : [ {\n "package" : "MagnoliaNetPreview",\n "playableEnd" : "2038-01-18T00:00:00Z",\n "playableStart" : "2020-12-23T05:00:00Z"\n } ],\n "clearkeyEnabled" : false,\n "contentDescriptors" : [ ],\n "contentRatings" : [ {\n "code" : "TV-G",\n "system" : "US-TV"\n } ],\n "customAttributes" : { },\n "description" : "DIY expert Taylor Calmus helps dads realize their kids' backyard dreams.",\n "drmEnabled" : false,\n "earliestPlayableStart" : "2020-12-23T05:00:00Z",\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "identifiers" : {\n "adInventoryId" : "211315.001.695",\n "analyticsId" : "60283a7f-32ba-4249-955f-ef269f10a0ad",\n "freewheel" : "60283a7f-32ba-4249-955f-ef269f10a0ad",\n "originalMediaId" : "211315.001.01.695",\n "ssaiVideoId" : "2a64c876dad146e89343d697dec8b8ea"\n },\n "isExpiring" : false,\n "isNew" : false,\n "longDescription" : "Father and DIY expert Taylor Calmus, along with his team of skilled builders, help aspiring DIY dads turn their kids' outrageous backyard dreams into playtime realities.",\n "name" : "Super Dad Trailer",\n "packages" : [ "MagnoliaNetPreview" ],\n "path" : "super-dad/super-dad-trailer",\n "publishEnd" : "2038-01-18T00:00:00Z",\n "publishStart" : "2020-12-23T05:00:00Z",\n "rights" : {\n "embeddable" : false\n },\n "sourceSystemId" : "60283a7f-32ba-4249-955f-ef269f10a0ad",\n "sourceSystemName" : "vdp",\n "subtitles" : [ ],\n "videoDuration" : 59759,\n "videoType" : "CLIP",\n "viewingHistory" : {\n "viewed" : false\n }\n},"id":"1166347","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"contentPackages":{"data":[{"id":"MagnoliaNetPreview","type":"package"}]},"images":{"data":[{"id":"video_1166347_1b95f49b-92f2-3bd1-8312-09f06c44efcb_default","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"29fabf5e5caf9c1f18ac0c0095478fc97a2009557266368ee2cb4816d271d4e3","type":"route"}]},"show":{"data":{"id":"12865","type":"show"}},"txGenres":{"data":[{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"video"},{"attributes":{\n "airDate" : "2021-01-03T05:00:00Z",\n "alternateId" : "skate-ramp-for-six",\n "audioTracks" : [ "en" ],\n "availabilityWindows" : [ {\n "package" : "MagnoliaNetPreview",\n "playableEnd" : "2038-01-18T00:00:00Z",\n "playableStart" : "2020-12-18T05:00:00Z"\n } ],\n "clearkeyEnabled" : false,\n "contentDescriptors" : [ ],\n "contentRatings" : [ {\n "code" : "TV-G",\n "system" : "US-TV"\n } ],\n "customAttributes" : { },\n "description" : "Taylor Calmus helps a widower build his kids an incredible skate ramp.",\n "drmEnabled" : false,\n "earliestPlayableStart" : "2020-12-18T05:00:00Z",\n "episodeNumber" : 1,\n "geoRestrictions" : {\n "countries" : [ "world" ],\n "mode" : "permit"\n },\n "identifiers" : {\n "adInventoryId" : "205751.003.695",\n "analyticsId" : "6eec7417-1565-40f3-9365-bffa2ea79dff",\n "freewheel" : "6eec7417-1565-40f3-9365-bffa2ea79dff",\n "originalMediaId" : "205751.003.01.695",\n "ssaiVideoId" : "2fe5753085224aa781b1fd574cc0ccbe"\n },\n "isExpiring" : false,\n "isNew" : false,\n "longDescription" : "Brandon Janous is adjusting to life following the passing of his wife. Wanting to give his three kids the backyard of their dreams, Brandon and Taylor build an epic skate ramp and climbing wall that includes a special tribute.",\n "name" : "Skate Ramp for Six",\n "packages" : [ "MagnoliaNetPreview" ],\n "path" : "super-dad/skate-ramp-for-six",\n "publishEnd" : "2038-01-18T00:00:00Z",\n "publishStart" : "2020-12-18T05:00:00Z",\n "rights" : {\n "embeddable" : false\n },\n "seasonNumber" : 1,\n "sourceSystemId" : "6eec7417-1565-40f3-9365-bffa2ea79dff",\n "sourceSystemName" : "vdp",\n "subtitles" : [ ],\n "videoDuration" : 1472037,\n "videoType" : "EPISODE",\n "viewingHistory" : {\n "completed" : false,\n "lastStartedTimestamp" : "2021-01-16T17:05:37Z",\n "position" : 2000,\n "viewed" : true\n }\n},"id":"1166418","relationships":{"alternateChannels":{"data":[{"id":"107","type":"channel"}]},"contentPackages":{"data":[{"id":"MagnoliaNetPreview","type":"package"}]},"images":{"data":[{"id":"video_1166418_0d0b76e2-2ed5-3f4d-8aa3-2441dbc52cfc_default","type":"image"}]},"primaryChannel":{"data":{"id":"107","type":"channel"}},"routes":{"data":[{"id":"38af3976b9b35f949a47b72d5966823e0a856f0227311a3b5115d05d4ac59c4b","type":"route"}]},"season":{"data":{"id":"11997","type":"season"}},"show":{"data":{"id":"12865","type":"show"}},"txGenres":{"data":[{"id":"869882fb-d7f5-4f15-9cbb-fb021b26c3f1","type":"taxonomyNode"}]}},"type":"video"}],"meta":{\n "site" : {\n "attributes" : {\n "brand" : "dplus_us",\n "theme" : "dplus_us",\n "websiteHostName" : ""\n },\n "id" : "dplus_us",\n "type" : "site"\n }\n}}'
2021-01-16 12:50:21.312 T:20088 ERROR : EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <class 'KeyError'>
Error Contents: 'primaryContent'
Traceback (most recent call last):
File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\addon.py", line 1702, in
router(sys.argv[2][1:])
File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\addon.py", line 1662, in router
list_collectionItem_collections(collection_id=params['collection_id'], page_path=params['page_path'])
File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\addon.py", line 857, in list_collectionItem_collections
if show['id'] == pages[0]['relationships']['primaryContent']['data']['id']:
KeyError: 'primaryContent'
-->End of Python script error report<--

@yeahme49
Copy link
Contributor

Testing resume again, I started a show in Kodi, skipped ahead and then stopped. Started again and it resumed properly. Stopped it again and resumed it on discoveryplus.com. Skipped ahead on the site and stopped playback. Loaded the show in Kodi again, it shows the same resume point as the website, but when I resume it resumes at the spot I had stopped last in Kodi. So it seems like there is a resume time in the Kodi database that is overriding the one from the site, even though the addon is showing the proper resume time from the site.

If it works properly for you, are you using Kodi Leia or Matrix?

I wonder if there is a way to update the database resume time before starting playback?

@Dis90
Copy link
Owner Author

Dis90 commented Jan 16, 2021

Season listing should now be fixed.

I actually rarely watch anything using discovery+ website. So that can be reason why I haven't found this issue. Have to do tests but reason is probably resume time in Kodi database.

I wonder if there is a way to update the database resume time before starting playback?

Maybe thru Kodi json rpc?

@yeahme49
Copy link
Contributor

jsonrpc worked. submitted pull request to add that

season listing works now for the episodes that didn't work before. i think everything is working now. can you think of anything else that should be tested?

@Dis90
Copy link
Owner Author

Dis90 commented Jan 16, 2021

Thanks. I'm thinking that is maybe bug in Kodi. Something similar was fixed by Netflix plugin author in Kodi Matrix. But that bug caused episodes to start from beginning.

Can you go to url https://us1-prod-direct.discoveryplus.com/users/me/favorites?include=default and check is your favorites listed there? That listing is used in addon to check if show is already added to favorites or not (context menu options).

Dplus_us decorators in requests is "viewingHistory, isFavorite" and that makes me think is US version using different method to check if show is added to favorites.

@yeahme49
Copy link
Contributor

Yes if I use items.size=100 it shows 100 shows

@Dis90
Copy link
Owner Author

Dis90 commented Jan 16, 2021

That is weird why addon doesn't get more than 16 shows although page[items.size] is 100? I don't understand.

@yeahme49
Copy link
Contributor

I noticed in the logs that when going to browse->HGTV->A-Z in kodi, this is what's being accessed

XFILE::CPluginDirectory::StartScript - calling plugin discovery+('plugin://plugin.video.discoveryplus/','6','?action=list_collection_items&collection_id=161374980142915215278619398379069832686&collection_id_main=263961364688425944705602256853549055046','resume:false')

https://us1-prod-direct.discoveryplus.com/cms/collections/263961364688425944705602256853549055046 is then used. This URL only has the first 16 episodes listed, no matter if items.size is passed along. But https://us1-prod-direct.discoveryplus.com/cms/collections/161374980142915215278619398379069832686?include=default&page[items.number]=1&page[items.size]=100 does allow you to change the number of items.size.

What is collection_id_main and why is that used instead of collection_id? If it can be changed to use https://us1-prod-direct.discoveryplus.com/cms/collections/161374980142915215278619398379069832686?include=default&page[items.number]=1&page[items.size]=100 then it would work for more than just the first 16.

https://us1-prod-direct.discoveryplus.com/cms/collections/161374980142915215278619398379069832686?include=default&page[items.number]=1&page[items.size]=100

@Dis90
Copy link
Owner Author

Dis90 commented Jan 17, 2021

Thanks for investigating. Using collection_id instead collection_id_main which is example HGTV's collection_id should work.

collection_id_main is used because otherwise json output doesn't list collections in 'included' section and list_collection_items fails to list anything without that. This was only used in US version of dplus like list_collections()

But I'm now thinking that list_videos should work in this situation because that also lists single collection in 'data' section. Have to think good name for list_videos and add support for listing shows. Maybe list_collection() because it lists single collection? list_collection_items parses pages that contains multiple collections but we only want list content of one. That is why we use collection_id.

@Dis90
Copy link
Owner Author

Dis90 commented Jan 17, 2021

Should work now :)

@Dis90
Copy link
Owner Author

Dis90 commented Jan 17, 2021

@yeahme49 Can you test that everything works? I'm almost 100% sure login doesn't work. If you want test that, save cookie_file from userdata/addon_data/plugin.video.discoveryplus to somewhere and delete it from addon_data.

@yeahme49
Copy link
Contributor

As far as I can tell, everything is working properly. I submitted a pull request that adds pagenation.

I removed my cookie_file and login does not work. After trying to log in on the website after removing the cookie_file, i now have to do the captcha, which I never had to do before. So something about doing a new login through the plugin needing a new cookie triggered something on arkose end. Putting my old cookie_file back and it works fine.

@Dis90
Copy link
Owner Author

Dis90 commented Jan 18, 2021

Thanks for adding pagenation 😄

Are we ready to merge this changes to master and matrix?

I will add support to use exported cookies.txt after these changes.

@yeahme49
Copy link
Contributor

Made the couple changes you mentioned for the pull request, should be ready to merge now and add to master and matrix

@Dis90 Dis90 closed this as completed Jan 18, 2021
@Dis90
Copy link
Owner Author

Dis90 commented Jan 18, 2021

Support added #10

@Dis90
Copy link
Owner Author

Dis90 commented Dec 11, 2021

@yeahme49 can you check what are current headers in d+ US?
Previously:
x-disco-params: realm=go,siteLookupKey=dplus_us
x-disco-client: WEB:UNKNOWN:dplus_us:0.0.1

Also check what is in POST data to videoPlaybackInfo and channelPlaybackInfo (if that is used in USA)

@yeahme49
Copy link
Contributor

x-disco-client: WEB:UNKNOWN:dplus_us:27.9.0
x-disco-params: realm=go,siteLookupKey=dplus_us

POST videoPlaybackInfo:
{"deviceInfo":{"adBlocker":true,"drmSupported":true,"hdrCapabilities":["SDR"],"hwDecodingCapabilities":[],"player":{"width":2630,"height":1479},"screen":{"width":3840,"height":2160},"soundCapabilities":["STEREO"]},"videoId":"2093355","wisteriaProperties":{"advertiser":{"adId":"|51516834747805739624932105135765523553||163926863916344a7e4ca179724a6edd4902c461a0156","firstPlay":0,"fwDid":"","fwGdprConsent":"","fwIsLat":0,"fwNielsenAppId":"P5A0FD4DE-4AE6-4B22-811B-36B9BD091980","gpaln":"","interactiveCapabilities":["brightline"]},"appBundle":"","device":{"browser":{"name":"chrome","version":"96.0.4664.45"},"language":"en","make":"","model":"","name":"Chrome","os":"Windows","osVersion":"NT 10.0","type":"desktop","id":"846c8d576fcf9844841c961e8da98118","player":{"name":"Discovery Player Web","version":"27.9.0"}},"gdpr":0,"siteId":"dplus_us","platform":"desktop","playbackId":"498263b4-ed01-4c46-b097-edd4af102acd","product":"dplus_us","sessionId":"f1b72d44-8c6a-4844-a589-f5e2222a5c64","streamProvider":{"suspendBeaconing":0,"hlsVersion":7,"pingConfig":0,"version":"1.0.0"}}}

POST channelPlaybackInfo:
{"channelId":"118","deviceInfo":{"adBlocker":true,"drmSupported":true,"hdrCapabilities":["SDR"],"hwDecodingCapabilities":[],"player":{"width":2630,"height":1479},"screen":{"width":3840,"height":2160},"soundCapabilities":["STEREO"]},"wisteriaProperties":{"advertiser":{"adId":"|51516834747805739624932105135765523553||16392688054506041cd55780fa97a64a5409b45fadffe","firstPlay":0,"fwDid":"","fwGdprConsent":"","fwIsLat":0,"fwNielsenAppId":"P5A0FD4DE-4AE6-4B22-811B-36B9BD091980","gpaln":"","interactiveCapabilities":["brightline"]},"appBundle":"","device":{"browser":{"name":"chrome","version":"96.0.4664.45"},"language":"en","make":"","model":"","name":"Chrome","os":"Windows","osVersion":"NT 10.0","type":"desktop","id":"846c8d576fcf9844841c961e8da98118","player":{"name":"Discovery Player Web","version":"27.9.0"}},"gdpr":0,"siteId":"dplus_us","platform":"desktop","playbackId":"f4f20228-e827-4872-ae09-7b49408bdab7","product":"dplus_us","sessionId":"f1b72d44-8c6a-4844-a589-f5e2222a5c64","streamProvider":{"suspendBeaconing":0,"hlsVersion":7,"pingConfig":1,"version":"1.0.0"}}}

@Dis90
Copy link
Owner Author

Dis90 commented Dec 12, 2021

Is framerate correct in master.mpd? If it is wrong I probably need to modify proxy.

Edit. please check headers from something else than videoplayback. They seem to be same as in EU.

@yeahme49
Copy link
Contributor

Headers for tabbed-home:
x-disco-client: WEB:UNKNOWN:dplus_us:1.25.0
x-disco-params: realm=go,siteLookupKey=dplus_us,bid=dplus,hn=www.discoveryplus.com,features=ar

Framerate in mpd is 30. Not sure if the video files that are served from mpd are now actually 30fps or if they are 29.970 still like when using the m3u8 file. You could update to use mpd and skip the proxy and if the blank screen issue comes back I can submit a pull request with an updated proxy

@Dis90
Copy link
Owner Author

Dis90 commented Dec 12, 2021

Thanks.
Please try with current master. Is Ultra HD streams working at all? Is .mpd used in UHD streams?

@yeahme49
Copy link
Contributor

Trying to play video results in:
2021-12-12 12:03:38.049 T:21924 ERROR : EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--

  • NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
    Error Type: <class 'KeyError'>
    Error Contents: 'drmToken'
    Traceback (most recent call last):
    File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\addon.py", line 2324, in
    router(sys.argv[2][1:])
    File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\addon.py", line 2299, in router
    helper.play_item(params['video_id'], params['video_type'])
    File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\resources\lib\kodihelper.py", line 211, in play_item
    stream = self.d.get_stream(video_id, video_type)
    File "C:\Users\media\KodiAutoHDR\portable_data\addons\plugin.video.discoveryplus\resources\lib\dplay.py", line 687, in get_stream
    stream['drm_token'] = data_dict['attributes']['streaming'][0]['protection']['drmToken']
    KeyError: 'drmToken'
    -->End of Python script error report<--
{
  "data" : {
    "attributes" : {
      "markers" : {
        "videoAboutToEnd" : 2500895
      },
      "reportProgressInterval" : 60000,
      "ssaiInfo" : {
        "forecastTimeline" : [ {
          "event" : {
            "action" : "streamInitiate",
            "schema" : "playback"
          },
          "time" : {
            "contentPosition" : 0.0,
            "streamPosition" : 0.0
          },
          "triggerTime" : 0.0
        }, {
          "event" : {
            "action" : "start",
            "schema" : "playback"
          },
          "time" : {
            "contentPosition" : 0.0,
            "streamPosition" : 0.0
          },
          "triggerTime" : 0.001
        }, {
          "event" : {
            "action" : "start",
            "duration" : 2530.895,
            "position" : 0,
            "schema" : "chapter"
          },
          "time" : {
            "contentPosition" : 0.0,
            "streamPosition" : 0.0
          },
          "triggerTime" : 0.002
        }, {
          "event" : {
            "action" : "complete",
            "duration" : 2530.895,
            "position" : 0,
            "schema" : "chapter"
          },
          "time" : {
            "contentPosition" : 2530.895,
            "streamPosition" : 2530.895
          },
          "triggerTime" : 2530.895
        }, {
          "event" : {
            "action" : "complete",
            "schema" : "playback"
          },
          "time" : {
            "contentPosition" : 2530.895,
            "streamPosition" : 2530.895
          },
          "triggerTime" : 2530.896
        }, {
          "event" : {
            "action" : "streamComplete",
            "schema" : "playback"
          },
          "time" : {
            "contentPosition" : 2530.895,
            "streamPosition" : 2530.895
          },
          "triggerTime" : 2530.897
        } ],
        "vendorAttributes" : {
          "breaks" : [ ],
          "interstitialUrl" : "",
          "nonLinearAds" : [ ],
          "pingUrl" : "",
          "sessionId" : "c77e158a-fc3b-4de1-96dc-1871ecd3466e"
        }
      },
      "streaming" : [ {
        "cdn" : "Verizon",
        "fallback" : false,
        "protection" : {
          "clearkeyEnabled" : false,
          "drmEnabled" : true,
          "schemes" : {
            "widevine" : {
              "certificateUrl" : "",
              "licenseUrl" : "https://content-discovery.uplynk.com/wv"
            }
          }
        },
        "provider" : "wisteria",
        "streamMode" : "VOD",
        "type" : "dash",
        "url" : "https://content-discovery.uplynk.com/4ef89646fc3b48b3a9da14e73abb2c13.mpd?cid=4ef89646fc3b48b3a9da14e73abb2c13&ct=a&drm_policy_name=Prod_5April2021&exp=1639332609&rays=cdefghiba&rmt=wv&rn=5353259563291162093&tc=1&sig=0aa3d1cfacf3d05f459f0dda5400997912446d2de5814963d0ecd335b0268f86"
      } ],
      "userInfo" : {
        "packages" : [ "Free", "Registered", "MotorTrend", "TheDodo", "DiscoveryLife", "Science", "Tlc", "History", "OprahWinfrey", "DiscoveryFamilyGo", "Travel", "Popsugar", "Bbc", "FoodNetwork", "InvestigationDiscovery", "Cooking", "HomeAndGarden", "AnimalPlanet", "Seeker", "DiscoveryEnEspanol", "DiyNetwork", "DiscoveryFamilia", "NowThis", "DestinationAmerica", "DPlusOriginals", "Lifetime", "Unbranded", "Thrillist", "AmericanHeroes", "Discovery", "MagnoliaNetPreview", "AeNetwork" ]
      },
      "viewingHistory" : {
        "completed" : false,
        "lastStartedTimestamp" : "2021-12-12T16:35:11Z",
        "position" : 2000,
        "viewed" : true
      }
    },
    "id" : "2093355",
    "type" : "videoPlaybackInfo"
  },
  "meta" : {
    "site" : {
      "attributes" : {
        "brand" : "dplus_us",
        "brandId" : "dplus",
        "mainTerritoryCode" : "us",
        "theme" : "dplus_us",
        "websiteHostName" : ""
      },
      "id" : "dplus_us",
      "type" : "site"
    }
  }
}

This is videoPlaybackInfo when I view a video on the website

Ultra HD still doesn't work. When I worked on it last, if I set drmSupported to true, it would give an mpd file. If set to false it was m3u8. But it wouldn't work either way. drmSupported = true the file wouldn't play at all, false it would stop after 4 seconds. Created an issue with ISA and no resolution. One person said Widevine on Windows doesn't support HEVC, so that may be why drmSupported = true fails. Not sure about the issue when drmSupported is set to false. I haven't had much time to try and gather any more info for them to try and troubleshoot more. I've been meaning to try it on my Chromecast with Google TV device to see if it works any better.

@Dis90
Copy link
Owner Author

Dis90 commented Dec 12, 2021

Interesting. They seem to do something different on USA. What are headers for https://content-discovery.uplynk.com/wv? Is there preauthorization header? That is where drmtoken is put on EU.

@yeahme49
Copy link
Contributor

No special headers for /wv and I don't think there are any preauth headers.
When playing through browser it hits /wv 6 times, these are the headers

Request URL: https://content-discovery.uplynk.com/wv
Request Method: POST
Status Code: 200 
Remote Address: 52.3.215.10:443
Referrer Policy: strict-origin-when-cross-origin
access-control-allow-origin: *
content-length: 716
content-type: text/html
date: Sun, 12 Dec 2021 18:39:47 GMT
referrer-policy: no-referrer-when-downgrade
server: nginx
strict-transport-security: max-age=31536000; includeSubDomains
x-content-type-options: nosniff
x-services: dd1914ad6ebc4d389cc3e7185971e3f0
x-xss-protection: 1; mode=block
:authority: content-discovery.uplynk.com
:method: POST
:path: /wv
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 2
origin: https://www.discoveryplus.com
referer: https://www.discoveryplus.com/
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36

Payload for first 3 show up as
��
and they all have the same response

����������������3:/w*�������"��0��
������[;2}�^$�ö*���R
ռ�7P>�E���v��@Q�A��㭱���NrZ^J���)�XX@#���8��y90�a�o����~!����w����W��_F&=����X�`z��O��W�7��|��3p]�:!�N�J��GI�~�]C��ݺ���3��=o�dB�1�@����ĺL� ����`�����[��d���l��\s�������Y��$pp�h
og��,J���D��N�7�K/�Y�(C�X/�k�]��^n�d����q���P���Z	����:�license.widevine.com����4s���5)�'���{��Rw�I�<���0�39Q��̽���D�'�!4n�������~n�v��8F
P;��+�����Ŀ�
����K�ќ����t̬(Ѵ�Al�ވ�0���4����	xB:d.Ta=�ϖ�J�I�U�+:p>�v�j��mk�+�k��O�Yҫ�v��BG�\C���"f���6��C��˽�����U�U�Ǽ�U�doX*��p���y�g�:�+��6,[���U�[ʩœÃ�Wԝ��~@�����I���5�X�]x������s��
������o��$>?=���	���_��:&?��	;�	��&37��:)����4,��T<���/|_�3�����[%6�v�^�Z����/��՘a���M�u�����&������w��2�ڼjk���
IӊE뇥�

The last 3 have different payloads and responses
Payload:

���± ���
��
����� 24bb5791f66d472a830feaa1f3e25f2e��vdms"U4ef89646fc3b48b3a9da14e73abb2c13_ause1-ur-discovery1_00c8acf8ffe3434aae8987c8bd14c674����®§6väo^øÁ¿üþSY|ü�� ô�Ù��0�8¢�µó
B��
�license.widevine.com����¹�Ì�����3:/w*��À�IÎ�cî�A�o$�{� øËÓ��wÙ¿�áØÏ&Ð�Ü2X9YhÑ�ÐN�¶¤ú*Y�.}*Ý�W q:§�!�Ú�B÷Eq©ã?L��ÆÇ�ÇË1N¶�G���Ãçá�NÏ��ö�C·5�è«ur���<��h®a¼<¥����ØN����Ö»(&=f�6�û`�Uåì��³©�èþÓuipVÜêÌ®��oÜ�ÕQC}�:~Cªp¯�µ��6�wG¼×E\��!û�ðk�
�3N8
�6L�nÝ
ÿ��_þa]³óE×nê�u¾¾ð�áVµ��=æÖêÎël®�p�º!ÿëè(.§Ûë%*�¤ÝJ�÷�ÃLã_Þ÷v÷=Ì÷ØÃм¶M¨ì´·�ýíÛL�ã�¯ø\�­ãFfNÛ-�ïj�C
�`F5k��#�7:JÒ�]Öe
jñÓ1_¡qXJ��q¶Å¤°C�àI�MÙØTÞ�o[Ìn�{�Õ*Ò:ç³ÞüW��Wç7»æmòg�£Uú©G�s����ñé>l0�ê�âù\´H�yßM¯hªz�xHD�mÕê©ö>=+¸
l`�dæFå<&<N,W�Iéæ}(ÆÉÙ�åÝóKÛmUÑQí� �ÉÎvã\¦Y[m?¨Sv�[ó��À/x<�ÉÌ¿»£#Çwù_��Ôà�³Ø;�þû�mú~K1�9­ª�>�ù�Ï«Id#Lk�Áþ�ËG.�aúÙ¦h¸LK{�SþÍÇ��µ9ùç�m×Óæ,�ëÑß@�Ïâ.�îùËfÔ�©ó���+n6u?}�k�øë�Re-'lÒÊ[­±j­-ì±³�u�gö­ØÂýS~yù���÷�[ö�·eì*js~��ý¬©Vþ3F9NÍÐ]O�©xè�&<�g4&q���ñ¢á«�¾±@t�aL4¯*è½Ô¤½4u�ñjèìÙµR�½¨÷²=Êûeihñçz�[RʲXä�ìûzÖ�O
£+Es�Ò;mv�|��ÔI�QR�,�Ee-�0����bázT÷�p�¶%����R�8p}Efΰ�_}\¾{��¾Îµ?¤è��Z®Ts!ubF°�­ïÙ/ÄZÅZ�>Ü¿��¯ÅZD
ÿ¿(kî�.�'J TyAý^se|�ó�~³¶ÀGjQÀï�ú8�}ríå9êG0¥.á�,ïni�³<Ð�4�§³��Âym»\�f^P3b�Æ�Å�r^¡£.VÕ¸HqÏgò§
�'.:;5��ô�}rÍï���Ââ1R¿�±¸ù£[­ÿR9�Bé�H�¾´à³Ðà6�ÍÔ§ËÝzÑãâî�¨H�kaä<f?�XZ�}Ý8ÔÁm>ø��ìÝ�½�	��¯.ÕÀI�kcù5IB�r%÷Åõçm/d@�oîKÙ@·�¯ª.ó	±!Þ]�I¶µè;|ÇU� �ÚØ\ïq¥�tA8ë¡(Ç(�r©N�þöm¦DE�r¦F¢�2D�½k�=¦G±2nâ­rÍmd³Ô�¥u�¨£uâ+�üìg¢©#ç�Ô¦¬�¤@¡��Sûm_]ë4­�:���,��kÙ�Ö�åÁõ
þÓ�SP`ì�ew��z�t�;eúÑ�ÎMîѹ��0µâø�0���ý?i�÷æÕmÜ«aLño¢&£¨4hî�C®¦�óDéë¬�Ó©
��¸î8�~ÚIä)ÏJÉ3õÊî��]ý�£�lê��e�����A�z¬ôV�¢yï�8Âp^ÝWÊobsû�Íæ®l�Eh����wTå*Ck�@º�_�ÿWÿ�ÿÀª
FÚÔ=Ák¡2�Õ Ee��Ýi�ê|ð��¡ßå\«4õ?\`»�(¤î´��Æ�åS�Ä2¡tÄEÁ,�19£Èå3Æ!�(��W&P�¿0Îs��<}�+#U�f�rIXmÉÆ�åÿ·¿ ±´C((VO���° Æ�l�e]¤A|Á
-a:	¿�[à%<CzÅyYÆ_Ú(I¥ �=²�^Ä*g�Héû5¹b¢�P«ê£dë\W¼z��J¾l>»ä�y;
�Ï�ó1wý¡±T95§/��lÜ�Ý�¢sá ûó½�õ�>ê�5í&U^øñ��yS^ÃÆ���Y�p50Æ:Ã�j�Åx�
p�
J*t¹¾¹ÆRÔA�©Ôég���5þ½�ì�;�ýäQiü�'[\»­uý`8¡Ó¦,·rô�Ï®rCÅ���­Q�PÔ6�óiÒå ÈLs�Uháà�ùJ�°Ø� ì)pqù�M<.ñâPB«�Y��WWhnô«� I�ѧq9��S={Ã-�!z�å
%döm�É3U����uç�¡�ê×=^�sX¦¹4S�ÃÞÌÈ�`��Ï�µÞÕêfÿ§i�¢Gø)=í�9�Ðâ��&Ðñm'�µÆU�"~.x'Rì=k®��¤@�"�ÖÅÖÊ�s�#=ï�H<hʶÎh7÷����Îåbg¿UyµÜ�]Õ%��å1x��À%Ö¶@�is.ª�näËïß¡ñ¥V屶ÒrþB]C$íy�K´-{ôo�­NV�¢�Ò×±�'�?�èÓý+�U�R��dã�È.��ÐR3��tå¿�ªã©QÒÆ\È�ëã�?ò»¸ßÛäi�Îó(��ÒqxN}¥_eÇô��7�Ó=äxô�äñ¿�4ºñ=&SìÇÉL«�M16tì�}Ú~e}÷4t_­çâ"9q�Æ�Iç��©Ö�±5èÌb»�M�#[`Ñ�nTÎm¸ó9öb�"º�ë,Ë��b>�«?¡~>g�É^ôÅ·��6Ì^¤;ojSÒ¹&��¯�ïì+�Û7xy0@Úh��>�����Nï5ÞÎ÷b�M��üJ�Ù�çêj,µ�盛TC7l�åmXój3äwÎ<%6òC`Ñ|ÃÉ1nÜ¢£w´ãÅL?�/u�Ô�ÌõO5Y¦�wKAN�å�«�ÀñÕv�¹ºW�¦��[8��zBþÑ�Öm;P²zZâ²��A��jj�¥��ÿ��$ªê�³9~ÄÆ���c
ôk�>K¤É���Ò9�« U O��]óÛhÙü�Â��÷on6×�óÿüÛó1��$ã¥�²Q
H�/ä4Í�«�Ú�ö�ê^�b���ÉÀ�/�âþ4¹0'O+É��·Ü�úíµç�b��4=´§Û$t¹�í�ø°Û�~¶AOÁ)�z~];�Ͳ¿^�YN�qÃi¢��DØ"FȾ¯ÊêV�'�«ºûÂv�E�¤Çv��þ[��&bSë9*0å¸Þ­éÊ�7 ¶ü½á5�GÊÉ�¿s©þ�ýX²�só^�Zo¤åªÈÎcß;9x)Ï1��`�MJV¦µÔÓo^»�<Y�=ÌYÖÉÍð)®`��8ß�êâØ�(=ÔI¹»¬Á8?háÎ.¦�R¹�S2ä*�¡�M´ô¹ö�tË�Û&��L���íôÿ°3�º©ßúáÿ�G�³°�K:¸ÜP�mÛ/%�{h´�2�`¤ºyY�UI¹;Ï3DÙEe	ö;�x�&.n^äàÐW�ve��Tò%í�°éÅåas®��¼�àÏ�i>{8â�é�÷SÂäÍqÜÕC�NX)�§�¸b9r0�v��RÒ3��!Î1º°âdµ#�ny��r�®z+�¼+YÙ��T��6×�À5I�ôìæ�FÓ��ÃB�âÙ���&wJ2^��¦iëØdè��`9�/�\�¯�=º�P	����ùTâéyt¬q»��½p��T`½g^�`Ú±�Ô1�¥Z}jË#B�yO�ÈV7ßÅ9ó§êñ��U¬��õlxKª�o¿®oäåï³à����"Wþ ê±,Ì��ÒLír�µquB\�0�W�÷¿P§��Åt�xYrxòâ±j²Ç�OGÓ�òí�ÝYñ�tç¹�¡Ô=g.�dFPG¾äÒ�ö§T´x�Â��Ñ�MzúY�OE­¡j½V)j"m!U
�­ò·s£x�ò0b·ÇÉÌo¹µ'��G¾âïnö��äѾ�»ÓVÝDÛ4úŪ^ÞÎJºY�´ã·=I¡Êæ ��/åÂîì^�ë �Cè�Æ�ä��û=�§ú�À�Íqêù�Û×��åqS��©Éüä�÷¾�ë�¼Eb�¨[ca%�EdTÌG�ù���9ú´ekç!�|x�Ⱥ¼ò>ºb,k¾u$%�Nqá�_Í�wB½^²°��·�Ý�åÏá~a²è±�XV�Ì�kÕ¶�õ· Nø7"øAS¯6-ÈÑÊ�!Ú(¸îÔÖ hïàå0òIÊÏ[jÀÅjÿÉñ×çq�e�+,µ�p2®UíSüØj
b�¤�j¥þÀ�1ð±åÙ�"Ã!òñµçdK þ��áÓÛjº��n�/¼ÀÝb�" ÿD"�ýÊ�0J�AfK3%
�]¢RW¼��Î�&��¨û �3Ü�¢1¼3I���Ew]�� OA]w=eS���<��`NßÐ��LÍ3�psó®�ë[âßNmQð`� ï�R���A��óϯÑt¸Ë�a�sVjÍÿ²�ÕÞ�?ç�Ï�R}»�9J��ù�³Ut��A?\(­ýð�w�òÒ@�åó�þ�*ÚMÄY*�;l�3Íÿ_CCØ��ÖÊP	û7®Ê;ÑäÉ�)X��=à��ÊsÍÚÞ#îõ��6�E~f�\�¨�Ã*ð¡CX¤HoÛúøôiÇÖ�-1ðÙÇ��î£w� µ­W��íGgÜ�øæVøÇ�ØZþ�ÕÒârlØ��t¥,Û^$±`",�ø��á7Oø�·(rB1XÉBF«ÅMá*��fóúÍV�õ½V�e#
úåæ6���°\ìÅs1z=<zÞ©�@ûöû�½�� �)b§OPª���Ôqï��Æ|L�ì6üz3«k·oºsy�+DIßV"����%Úä
�f°ù�Ó��Þ*���>�-¹±áIÀ�-Ö·�kléûÕðl£w®�°�Høn·Yö¾²'¾�¶Ð
H�fB�xpLçåx£����?f,�·�Ñ�î���ø��ÅCi�Ë�,T<ç. HôwC
pè²ôó毡�­�Oä�i�Ä��aQ�oÜíø�»$ª0�ã��±7'ô�>¯R�Ã�L°ÎX»¡ZõzA¡1Öt÷1L:~�;½¼��#dû�ÔW»� ôÖ3s�o¦èä�¤�Ï; ~:q�SqòR�"�»�Ã��¢¸��ÞÂÀ�óÐz¾Üñ I(h�ú
ÎU�:ÀX	���£·¢v,g�ù���×Jí�Ø©8Dupü����£D�$nÖivû}m�þk�f0¸�gÛÅ�B8�?�f½ÎÄE.ÀO¸�'z­lØk�Þ?�¦.g(�¢?ηZ!éCÛ�Õ,)P3�{�>æÆ���òäøø�²õÕP|1)F¤%}½5BüEó�=í=��áW»�Ì&²����¬¶¢îS-5Z�¡üJ�����ÞmA¢/B¨`

Response:

�����
D
���6v�o^�����SY|�� 00c8acf8ffe3434aae8987c8bd14c674� �(8@H�ٍ������� ���(���0���8HPX`�f��_B�-�Qh�Q5X���qh�P��(=%r��k��?)4�=.�+��Q���m>�
���
�w�H�E����G�Z�9ЌL*8#j1��Q�����4+��1��Q���L�v� ��l
�$�W��mG*�����_.���\|���8|t�
��0P� �C�&l�Ȅ;н��??���R���������a��: �(�2���*� B�
�kc16�Q��mA���b�SD �ٍ�8P�� �Qlѯ'9k�vc	�x�^U!�Hh��'?�*e��x�"�����[��B֛4z�H/m�����i'Al�ڙ�?�)� `.����+b��Mt��s������H�=���P�gn��ɼ����ʕ�D!�pK{��XJ�$s�C�6�^�-�J��E�r!A�w)��gdv���I�����Q�:2
016.5.0 Built on Nov 3 2021 21:41:01 (1636000836)@�J�������mA�/B�`h�zP���Q��Q���������&��za�G���2B��Y�3t���ii�6���D;j-�,X�

That's one example, the other 2 are similar in size but different

I don't see drmtoken anywhere in any of them

@yeahme49
Copy link
Contributor

And this is the payload when the browsers access the mpd file

cid: 4ef89646fc3b48b3a9da14e73abb2c13
ct: a
drm_policy_name: Prod_5April2021
exp: 1639334686
rays: cdefghiba
rmt: wv
rn: 15433491967631800173
tc: 1
sig: e935d73e99aed9154579fb88acff85a489a638b27f4362493c323512617ed3ec

@Dis90
Copy link
Owner Author

Dis90 commented Dec 12, 2021

Yeah it looks like there's no special headers. Test with current master.

@yeahme49
Copy link
Contributor

Works good now, only time I ran into an issue is if I have the experimental UHD enabled and try to watch something that is UHD, the Kodi locks up. If I set drmSupported to false it plays fine.

I'm going to have to try and work more with the ISA devs to get the UHD working. If I input the m3u8 file that is given for UHD into ffmpeg, it downloads the video fine (without using DRM/widevine) and it plays properly. Not sure what ISA is doing different that causes issues.

@Dis90
Copy link
Owner Author

Dis90 commented Dec 12, 2021

Good :)

How about framerate? Is that still issue when using mpd?

So UHD works but only for non drm HLS and ffmpeg? Maybe add some sort of workaround for it in dplay.py (drmSupported false) and kodihelper.py change if useIsa: to if self.get_setting('us_uhd') is False. Then Inputstream Adaptive is not used for UHD.

@yeahme49
Copy link
Contributor

Framerate is good with mpd, no need for proxy anymore.

Correct, UHD works with non drm hls and not using ISA. Unless you try and skip forward or back, then it glitches. I think for now keep it as is labeled as experimental and I'll see if I can work with ISA devs a bit more.

@Dis90
Copy link
Owner Author

Dis90 commented Dec 12, 2021

Okay. I will remove proxy completely and add drmSupported true/false to if self.us_uhd: in dplay.py
Or what you think do you want to keep UHD streams .mpd?

Thanks for help :)

@Dis90
Copy link
Owner Author

Dis90 commented Dec 13, 2021

Does subtitles work or is there any in d+ US?

@yeahme49
Copy link
Contributor

Subtitles do not work through the plugin but they do work on the website

@yeahme49
Copy link
Contributor

Was looking into the subtitle again, if DRM is disabled so that you get the m3u8 file, as long as in Kodi settings->Player Settings->Language and under Subtitles the "Enable parsing for closed captions" is enabled, subtitles work. Using DRM and getting the MPD file, they don't work. There is a ISA issue xbmc/inputstream.adaptive#782 that mentions CEA-608 support and that's what D+ is using with MPD. So once that gets figured out, they should work.

@Dis90
Copy link
Owner Author

Dis90 commented Dec 31, 2021

Thanks for testing. D+ seem to use many different subtitle formats. I opened this issue of non working mpd subtitles xbmc/inputstream.adaptive#855

But at least we now know that in most cases disabling DRM fixes subtitles.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants