8 from .common
import InfoExtractor
9 from ..aes
import aes_encrypt
23 return hashlib
.md5(str(s
).encode()).hexdigest()
26 class AnvatoIE(InfoExtractor
):
27 _VALID_URL
= r
'anvato:(?P<access_key_or_mcp>[^:]+):(?P<id>\d+)'
29 _API_BASE_URL
= 'https://tkx.mp.lura.live/rest/v2'
30 _ANVP_RE
= r
'<script[^>]+\bdata-anvp\s*=\s*(["\'])(?P
<anvp
>(?
:(?
!\
1).)+)\
1'
31 _AUTH_KEY = b'\x31\xc2\x42\x84\x9e\x73\xa0\xce' # from anvplayer.min.js
34 # from https://ktla.com/news/99-year-old-woman-learns-to-fly-in-torrance-checks-off-bucket-list-dream/
35 'url
': 'anvato
:X8POa4zpGZMmeiq0wqiO8IP5rMqQM9VN
:8032455',
36 'md5
': '837718bcfb3a7778d022f857f7a9b19e
',
40 'title
': '99-year
-old woman learns to fly plane
in Torrance
, checks off bucket
list dream
',
41 'description
': 'md5
:0a12bab8159445e78f52a297a35c6609
',
42 'upload_date
': '20220928',
43 'timestamp
': 1664408881,
44 'thumbnail
': r're
:^https?
://.*\
.jpg
',
46 'tags
': ['video
', 'news
', '5live
'],
48 'categories
': ['News
'],
52 # Copied from anvplayer.min.js
54 'nbcu_nbcd_desktop_web_prod_93d8ead38ce2024f8f544b78306fbd15895ae5e6
': 'NNemUkySjxLyPTKvZRiGntBIjEyK8uqicjMakIaQ
',
55 'nbcu_nbcd_desktop_web_qa_1a6f01bdd0dc45a439043b694c8a031d
': 'eSxJUbA2UUKBTXryyQ2d6NuM8oEqaPySvaPzfKNA
',
56 'nbcu_nbcd_desktop_web_acc_eb2ff240a5d4ae9a63d4c297c32716b6c523a129
': '89JR3RtUGbvKuuJIiKOMK0SoarLb5MUx8v89RcbP
',
57 'nbcu_nbcd_watchvod_web_prod_e61107507180976724ec8e8319fe24ba5b4b60e1
': 'Uc7dFt7MJ9GsBWB5T7iPvLaMSOt8BBxv4hAXk5vv
',
58 'nbcu_nbcd_watchvod_web_qa_42afedba88a36203db5a4c09a5ba29d045302232
': 'T12oDYVFP2IaFvxkmYMy5dKxswpLHtGZa4ZAXEi7
',
59 'nbcu_nbcd_watchvod_web_acc_9193214448e2e636b0ffb78abacfd9c4f937c6ca
': 'MmobcxUxMedUpohNWwXaOnMjlbiyTOBLL6d46ZpR
',
60 'nbcu_local_monitor_web_acc_f998ad54eaf26acd8ee033eb36f39a7b791c6335
': 'QvfIoPYrwsjUCcASiw3AIkVtQob2LtJHfidp9iWg
',
61 'nbcu_cable_monitor_web_acc_a413759603e8bedfcd3c61b14767796e17834077
': 'uwVPJLShvJWSs6sWEIuVem7MTF8A4IknMMzIlFto
',
62 'nbcu_nbcd_mcpstage_web_qa_4c43a8f6e95a88dbb40276c0630ba9f693a63a4e
': 'PxVYZVwjhgd5TeoPRxL3whssb5OUPnM3zyAzq8GY
',
63 'nbcu_comcast_comcast_web_prod_074080762ad4ce956b26b43fb22abf153443a8c4
': 'afnaRZfDyg1Z3WZHdupKfy6xrbAG2MHqe3VfuSwh
',
64 'nbcu_comcast_comcast_web_qa_706103bb93ead3ef70b1de12a0e95e3c4481ade0
': 'DcjsVbX9b3uoPlhdriIiovgFQZVxpISZwz0cx1ZK
',
65 'nbcu_comcast_comcastcable_web_prod_669f04817536743563d7331c9293e59fbdbe3d07
': '0RwMN2cWy10qhAhOscq3eK7aEe0wqnKt3vJ0WS4D
',
66 'nbcu_comcast_comcastcable_web_qa_3d9d2d66219094127f0f6b09cc3c7bb076e3e1ca
': '2r8G9DEya7PCqBceKZgrn2XkXgASjwLMuaFE1Aad
',
67 'hearst_hearst_demo_web_stage_960726dfef3337059a01a78816e43b29ec04dfc7
': 'cuZBPXTR6kSdoTCVXwk5KGA8rk3NrgGn4H6e9Dsp
',
68 'anvato_mcpqa_demo_web_stage_18b55e00db5a13faa8d03ae6e41f6f5bcb15b922
': 'IOaaLQ8ymqVyem14QuAvE5SndQynTcH5CrLkU2Ih
',
69 'anvato_nextmedia_demo_web_stage_9787d56a02ff6b9f43e9a2b0920d8ca88beb5818
': 'Pqu9zVzI1ApiIzbVA3VkGBEQHvdKSUuKpD6s2uaR
',
70 'anvato_scripps_app_web_prod_0837996dbe373629133857ae9eb72e740424d80a
': 'du1ccmn7RxzgizwbWU7hyUaGodNlJn7HtXI0WgXW
',
71 'anvato_scripps_app_web_stage_360797e00fe2826be142155c4618cc52fce6c26c
': '2PMrQ0BRoqCWl7nzphj0GouIMEh2mZYivAT0S1Su
',
72 'fs2go_fs2go_go_all_prod_21934911ccfafc03a075894ead2260d11e2ddd24
': 'RcuHlKikW2IJw6HvVoEkqq2UsuEJlbEl11pWXs4Q
',
73 'fs2go_fs2go_go_web_prod_ead4b0eec7460c1a07783808db21b49cf1f2f9a7
': '4K0HTT2u1zkQA2MaGaZmkLa1BthGSBdr7jllrhk5
',
74 'fs2go_fs2go_go_web_stage_407585454a4400355d4391691c67f361
': 'ftnc37VKRJBmHfoGGi3kT05bHyeJzilEzhKJCyl3
',
75 'fs2go_fs2go_go_android_stage_44b714db6f8477f29afcba15a41e1d30
': 'CtxpPvVpo6AbZGomYUhkKs7juHZwNml9b9J0J2gI
',
76 'anvato_cbslocal_app_web_prod_547f3e49241ef0e5d30c79b2efbca5d92c698f67
': 'Pw0XX5KBDsyRnPS0R2JrSrXftsy8Jnz5pAjaYC8s
',
77 'anvato_cbslocal_app_web_stage_547a5f096594cd3e00620c6f825cad1096d28c80
': '37OBUhX2uwNyKhhrNzSSNHSRPZpApC3trdqDBpuz
',
78 'fs2go_att_att_web_prod_1042dddd089a05438b6a08f972941176f699ffd8
': 'JLcF20JwYvpv6uAGcLWIaV12jKwaL1R8us4b6Zkg
',
79 'fs2go_att_att_web_stage_807c5001955fc114a3331fe027ddc76e
': 'gbu1oO1y0JiOFh4SUipt86P288JHpyjSqolrrT1x
',
80 'fs2go_fs2go_tudor_web_prod_a7dd8e5a7cdc830cae55eae6f3e9fee5ee49eb9b
': 'ipcp87VCEZXPPe868j3orLqzc03oTy7DXsGkAXXH
',
81 'anvato_mhz_app_web_prod_b808218b30de7fdf60340cbd9831512bc1bf6d37
': 'Stlm5Gs6BEhJLRTZHcNquyzxGqr23EuFmE5DCgjX
',
82 'fs2go_charter_charter_web_stage_c2c6e5a68375a1bf00fff213d3ff8f61a835a54c
': 'Lz4hbJp1fwL6jlcz4M2PMzghM4jp4aAmybtT5dPc
',
83 'fs2go_charter_charter_web_prod_ebfe3b10f1af215a7321cd3d629e0b81dfa6fa8c
': 'vUJsK345A1bVmyYDRhZX0lqFIgVXuqhmuyp1EtPK
',
84 'anvato_epfox_app_web_prod_b3373168e12f423f41504f207000188daf88251b
': 'GDKq1ixvX3MoBNdU5IOYmYa2DTUXYOozPjrCJnW7
',
85 'anvato_epfox_app_web_stage_a3c2ce60f8f83ef374a88b68ee73a950f8ab87ce
': '2jz2NH4BsXMaDsoJ5qkHMbcczAfIReo2eFYuVC1C
',
86 'fs2go_verizon_verizon_web_stage_08e6df0354a4803f1b1f2428b5a9a382e8dbcd62
': 'rKTVapNaAcmnUbGL4ZcuOoY4SE7VmZSQsblPFr7e
',
87 'fs2go_verizon_verizon_web_prod_f909564cb606eff1f731b5e22e0928676732c445
': 'qLSUuHerM3u9eNPzaHyUK52obai5MvE4XDJfqYe1
',
88 'fs2go_foxcom_synd_web_stage_f7b9091f00ea25a4fdaaae77fca5b54cdc7e7043
': '96VKF2vLd24fFiDfwPFpzM5llFN4TiIGAlodE0Re
',
89 'fs2go_foxcom_synd_web_prod_0f2cdd64d87e4ab6a1d54aada0ff7a7c8387a064
': 'agiPjbXEyEZUkbuhcnmVPhe9NNVbDjCFq2xkcx51
',
90 'anvato_own_app_web_stage_1214ade5d28422c4dae9d03c1243aba0563c4dba
': 'mzhamNac3swG4WsJAiUTacnGIODi6SWeVWk5D7ho
',
91 'anvato_own_app_web_prod_944e162ed927ec3e9ed13eb68ed2f1008ee7565e
': '9TSxh6G2TXOLBoYm9ro3LdNjjvnXpKb8UR8KoIP9
',
92 'anvato_scripps_app_ftv_prod_a10a10468edd5afb16fb48171c03b956176afad1
': 'COJ2i2UIPK7xZqIWswxe7FaVBOVgRkP1F6O6qGoH
',
93 'anvato_scripps_app_ftv_stage_77d3ad2bdb021ec37ca2e35eb09acd396a974c9a
': 'Q7nnopNLe2PPfGLOTYBqxSaRpl209IhqaEuDZi1F
',
94 'anvato_univision_app_web_stage_551236ef07a0e17718c3995c35586b5ed8cb5031
': 'D92PoLS6UitwxDRA191HUGT9OYcOjV6mPMa5wNyo
',
95 'anvato_univision_app_web_prod_039a5c0a6009e637ae8ac906718a79911e0e65e1
': '5mVS5u4SQjtw6NGw2uhMbKEIONIiLqRKck5RwQLR
',
96 'nbcu_cnbc_springfield_ios_prod_670207fae43d6e9a94c351688851a2ce
': 'M7fqCCIP9lW53oJbHs19OlJlpDrVyc2OL8gNeuTa
',
97 'nbcu_cnbc_springfieldvod_ios_prod_7a5f04b1ceceb0e9c9e2264a44aa236e08e034c2
': 'Yia6QbJahW0S7K1I0drksimhZb4UFq92xLBmmMvk
',
98 'anvato_cox_app_web_prod_ce45cda237969f93e7130f50ee8bb6280c1484ab
': 'cc0miZexpFtdoqZGvdhfXsLy7FXjRAOgb9V0f5fZ
',
99 'anvato_cox_app_web_stage_c23dbe016a8e9d8c7101d10172b92434f6088bf9
': 'yivU3MYHd2eDZcOfmLbINVtqxyecKTOp8OjOuoGJ
',
100 'anvato_chnzero_app_web_stage_b1164d1352b579e792e542fddf13ee34c0eeb46b
': 'A76QkXMmVH8lTCfU15xva1mZnSVcqeY4Xb22Kp7m
',
101 'anvato_chnzero_app_web_prod_253d358928dc08ec161eda2389d53707288a730c
': 'OA5QI3ZWZZkdtUEDqh28AH8GedsF6FqzJI32596b
',
102 'anvato_discovery_vodpoc_web_stage_9fa7077b5e8af1f8355f65d4fb8d2e0e9d54e2b7
': 'q3oT191tTQ5g3JCP67PkjLASI9s16DuWZ6fYmry3
',
103 'anvato_discovery_vodpoc_web_prod_688614983167a1af6cdf6d76343fda10a65223c1
': 'qRvRQCTVHd0VVOHsMvvfidyWmlYVrTbjby7WqIuK
',
104 'nbcu_cnbc_springfieldvod_ftv_stage_826040aad1925a46ac5dfb4b3c5143e648c6a30d
': 'JQaSb5a8Tz0PT4ti329DNmzDO30TnngTHmvX8Vua
',
105 'nbcu_cnbc_springfield_ftv_stage_826040aad1925a46ac5dfb4b3c5143e648c6a30d
': 'JQaSb5a8Tz0PT4ti329DNmzDO30TnngTHmvX8Vua
',
106 'nbcu_nbcd_capture_web_stage_4dd9d585bfb984ebf856dee35db027b2465cc4ae
': '0j1Ov4Vopyi2HpBZJYdL2m8ERJVGYh3nNpzPiO8F
',
107 'nbcu_nbcd_watch3_android_prod_7712ca5fcf1c22f19ec1870a9650f9c37db22dcf
': '3LN
2UB
3rPUAMu
7ZriWkHky
9vpLMXYha
8JbSnxBlx
',
108 'nbcu_nbcd_watchvod3_android_prod_0910a3a4692d57c0b5ff4316075bc5d096be45b9
': 'mJagcQ2II30vUOAauOXne7ERwbf5S9nlB3IP17lQ
',
109 'anvato_scripps_app_atv_prod_790deda22e16e71e83df58f880cd389908a45d52
': 'CB6trI1mpoDIM5o54DNTsji90NDBQPZ4z4RqBNSH
',
110 'nbcu_nbcd_watchv4_android_prod_ff67cef9cb409158c6f8c3533edddadd0b750507
': 'j8CHQCUWjlYERj4NFRmUYOND85QNbHViH09UwuKm
',
111 'nbcu_nbcd_watchvodv4_android_prod_a814d781609989dea6a629d50ae4c7ad8cc8e907
': 'rkVnUXxdA9rawVLUlDQtMue9Y4Q7lFEaIotcUhjt
',
112 'rvVKpA50qlOPLFxMjrCGf5pdkdQDm7qn
': '1J7ZkY5Qz5lMLi93QOH9IveE7EYB3rLl
',
113 'nbcu_dtv_local_web_prod_b266cf49defe255fd4426a97e27c09e513e9f82f
': 'HuLnJDqzLa4saCzYMJ79zDRSQpEduw1TzjMNQu2b
',
114 'nbcu_att_local_web_prod_4cef038b2d969a6b7d700a56a599040b6a619f67
': 'Q0Em5VDc2KpydUrVwzWRXAwoNBulWUxCq2faK0AV
',
115 'nbcu_dish_local_web_prod_c56dcaf2da2e9157a4266c82a78195f1dd570f6b
': 'bC1LWmRz9ayj2AlzizeJ1HuhTfIaJGsDBnZNgoRg
',
116 'nbcu_verizon_local_web_prod_88bebd2ce006d4ed980de8133496f9a74cb9b3e1
': 'wzhDKJZpgvUSS1EQvpCQP8Q59qVzcPixqDGJefSk
',
117 'nbcu_charter_local_web_prod_9ad90f7fc4023643bb718f0fe0fd5beea2382a50
': 'PyNbxNhEWLzy1ZvWEQelRuIQY88Eub7xbSVRMdfT
',
118 'nbcu_suddenlink_local_web_prod_20fb711725cac224baa1c1cb0b1c324d25e97178
': '0Rph41lPXZbb3fqeXtHjjbxfSrNbtZp1Ygq7Jypa
',
119 'nbcu_wow_local_web_prod_652d9ce4f552d9c2e7b5b1ed37b8cb48155174ad
': 'qayIBZ70w1dItm2zS42AptXnxW15mkjRrwnBjMPv
',
120 'nbcu_centurylink_local_web_prod_2034402b029bf3e837ad46814d9e4b1d1345ccd5
': 'StePcPMkjsX51PcizLdLRMzxMEl5k2FlsMLUNV4k
',
121 'nbcu_atlanticbrd_local_web_prod_8d5f5ecbf7f7b2f5e6d908dd75d90ae3565f682e
': 'NtYLb4TFUS0pRs3XTkyO5sbVGYjVf17bVbjaGscI
',
122 'nbcu_nbcd_watchvod_web_dev_08bc05699be47c4f31d5080263a8cfadc16d0f7c
': 'hwxi2dgDoSWgfmVVXOYZm14uuvku4QfopstXckhr
',
123 'anvato_nextmedia_app_web_prod_a4fa8c7204aa65e71044b57aaf63711980cfe5a0
': 'tQN1oGPYY1nM85rJYePWGcIb92TG0gSqoVpQTWOw
',
124 'anvato_mcp_lin_web_prod_4c36fbfd4d8d8ecae6488656e21ac6d1ac972749
': 'GUXNf5ZDX2jFUpu4WT2Go4DJ5nhUCzpnwDRRUx1K
',
125 'anvato_mcp_univision_web_prod_37fe34850c99a3b5cdb71dab10a417dd5cdecafa
': 'bLDYF8JqfG42b7bwKEgQiU9E2LTIAtnKzSgYpFUH
',
126 'anvato_mcp_fs2go_web_prod_c7b90a93e171469cdca00a931211a2f556370d0a
': 'icgGoYGipQMMSEvhplZX1pwbN69srwKYWksz3xWK
',
127 'anvato_mcp_sps_web_prod_54bdc90dd6ba21710e9f7074338365bba28da336
': 'fA2iQdI7RDpynqzQYIpXALVS83NTPr8LLFK4LFsu
',
128 'anvato_mcp_anv_web_prod_791407490f4c1ef2a4bcb21103e0cb1bcb3352b3
': 'rMOUZqe9lwcGq2mNgG3EDusm6lKgsUnczoOX3mbg
',
129 'anvato_mcp_gray_web_prod_4c10f067c393ed8fc453d3930f8ab2b159973900
': 'rMOUZqe9lwcGq2mNgG3EDusm6lKgsUnczoOX3mbg
',
130 'anvato_mcp_hearst_web_prod_5356c3de0fc7c90a3727b4863ca7fec3a4524a99
': 'P3uXJ0fXXditBPCGkfvlnVScpPEfKmc64Zv7ZgbK
',
131 'anvato_mcp_cbs_web_prod_02f26581ff80e5bda7aad28226a8d369037f2cbe
': 'mGPvo5ZA5SgjOFAPEPXv7AnOpFUICX8hvFQVz69n
',
132 'anvato_mcp_telemundo_web_prod_c5278d51ad46fda4b6ca3d0ea44a7846a054f582
': 'qyT6PXXLjVNCrHaRVj0ugAhalNRS7Ee9BP7LUokD
',
133 'nbcu_nbcd_watchvodv4_web_stage_4108362fba2d4ede21f262fea3c4162cbafd66c7
': 'DhaU5lj0W2gEdcSSsnxURq8t7KIWtJfD966crVDk
',
134 'anvato_scripps_app_ios_prod_409c41960c60b308db43c3cc1da79cab9f1c3d93
': 'WPxj5GraLTkYCyj3M7RozLqIycjrXOEcDGFMIJPn
',
135 'EZqvRyKBJLrgpClDPDF8I7Xpdp40Vx73
': '4OxGd2dEakylntVKjKF0UK9PDPYB6A9W
',
136 'M2v78QkpleXm9hPp9jUXI63x5vA6BogR
': 'ka6K32k7ZALmpINkjJUGUo0OE42Md1BQ
',
137 'nbcu_nbcd_desktop_web_prod_93d8ead38ce2024f8f544b78306fbd15895ae5e6_secure
': 'NNemUkySjxLyPTKvZRiGntBIjEyK8uqicjMakIaQ
',
138 'X8POa4zPPaKVZHqmWjuEzfP31b1QM9VN
': 'Dn5vOY9ooDw7VSl9qztjZI5o0g08mA0z
',
139 'M2v78QkBMpNJlSPp9diX5F2PBmBy6Bog
': 'ka6K32kyo7nDZfNkjQCGWf1lpApXMd1B
',
140 'bvJ0dQpav07l0hG5JgfVLF2dv1vARwpP
': 'BzoQW24GrJZoJfmNodiJKSPeB9B8NOxj
',
141 'lxQMLg2XZKuEZaWgsqubBxV9INZ6bryY
': 'Vm2Mx6noKds9jB71h6urazwlTG3m9x8l
',
142 '04EnjvXeoSmkbJ9ckPs7oY0mcxv7PlyN
': 'aXERQP9LMfQVlEDsgGs6eEA1SWznAQ8P
',
143 'mQbO2ge6BFRWVPYCYpU06YvNt80XLvAX
': 'E2BV1NGmasN5v7eujECVPJgwflnLPm2A
',
144 'g43oeBzJrCml7o6fa5fRL1ErCdeD8z4K
': 'RX34mZ6zVH4Nr6whbxIGLv9WSbxEKo8V
',
145 'VQrDJoP7mtdBzkxhXbSPwGB1coeElk4x
': 'j2VejQx0VFKQepAF7dI0mJLKtOVJE18z
',
146 'WxA5NzLRjCrmq0NUgaU5pdMDuZO7RJ4w
': 'lyY5ADLKaIOLEgAsGQCveEMAcqnx3rY9
',
147 'M4lpMXB71ie0PjMCjdFzVXq0SeRVqz49
': 'n2zVkOqaLIv3GbLfBjcwW51LcveWOZ2e
',
148 'dyDZGEqN8u8nkJZcJns0oxYmtP7KbGAn
': 'VXOEqQW9BtEVLajfZQSLEqxgS5B7qn2D
',
149 'E7QNjrVY5u5mGvgu67IoDgV1CjEND8QR
': 'rz8AaDmdKIkLmPNhB5ILPJnjS5PnlL8d
',
150 'a4zrqjoKlfzg0dwHEWtP31VqcLBpjm4g
': 'LY9J16gwETdGWa3hjBu5o0RzuoQDjqXQ
',
151 'dQP5BZroMsMVLO1hbmT5r2Enu86GjxA6
': '7XR3oOdbPF6x3PRFLDCq9RkgsRjAo48V
',
152 'M4lKNBO1NFe0PjMCj1tzVXq0SeRVqzA9
': 'n2zoRqGLRUv3GbLfBmTwW51LcveWOZYe
',
153 'nAZ7MZdpGCGg1pqFEbsoJOz2C60mv143
': 'dYJgdqA9aT4yojETqGi7yNgoFADxqmXP
',
154 '3y1MERYgOuE9NzbFgwhV6Wv2F0YKvbyz
': '081xpZDQgC4VadLTavhWQxrku56DAgXV
',
155 'bmQvmEXr5HWklBMCZOcpE2Z3HBYwqGyl
': 'zxXPbVNyMiMAZldhr9FkOmA0fl4aKr2v
',
156 'wA7oDNYldfr6050Hwxi52lPZiVlB86Ap
': 'ZYK16aA7ni0d3l3c34uwpxD7CbReMm8Q
',
157 'g43MbKMWmFml7o7sJoSRkXxZiXRvJ3QK
': 'RX3oBJonvs4Nr6rUWBCGn3matRGqJPXV
',
158 'mA9VdlqpLS0raGaSDvtoqNrBTzb8XY4q
': '0XN4OjBD3fnW7r7IbmtJB4AyfOmlrE2r
',
159 'mAajOwgkGt17oGoFmEuklMP9H0GnW54d
': 'lXbBLPGyzikNGeGujAuAJGjZiwLRxyXR
',
160 'vy8vjJ9kbUwrRqRu59Cj5dWZfzYErlAb
': 'K8l7gpwaGcBpnAnCLNCmPZRdin3eaQX0
',
161 'xQMWBpR8oHEZaWaSMGUb0avOHjLVYn4Y
': 'm2MrN4vEaf9jB7BFy5Srb40jTrN67AYl
',
162 'xyKEmVO3miRr6D6UVkt7oB8jtD6aJEAv
': 'g2ddDebqDfqdgKgswyUKwGjbTWwzq923
',
163 '7Qk0wa2D9FjKapacoJF27aLvUDKkLGA0
': 'b2kgBEkephJaMkMTL7s1PLe4Ua6WyP2P
',
164 '3QLg6nqmNTJ5VvVTo7f508LPidz1xwyY
': 'g2L1GgpraipmAOAUqmIbBnPxHOmw4MYa
',
165 '3y1B7zZjXTE9NZNSzZSVNPZaTNLjo6Qz
': '081b5G6wzH4VagaURmcWbN5mT4JGEe2V
',
166 'lAqnwvkw6SG6D8DSqmUg6DRLUp0w3G4x
': 'O2pbP0xPDFNJjpjIEvcdryOJtpkVM4X5
',
167 'awA7xd1N0Hr6050Hw2c52lPZiVlB864p
': 'GZYKpn4aoT0d3l3c3PiwpxD7CbReMmXQ
',
168 'jQVqPLl9YHL1WGWtR1HDgWBGT63qRNyV
': '6X03ne6vrU4oWyWUN7tQVoajikxJR3Ye
',
169 'GQRMR8mL7uZK797t7xH3eNzPIP5dOny1
': 'm2vqPWGd4U31zWzSyasDRAoMT1PKRp8o
',
170 'zydq9RdmRhXLkNkfNoTJlMzaF0lWekQB
': '3X7LnvE7vH5nkEkSqLiey793Un7dLB8e
',
171 'VQrDzwkB2IdBzjzu9MHPbEYkSB50gR4x
': 'j2VebLzoKUKQeEesmVh0gM1eIp9jKz8z
',
172 'mAa2wMamBs17oGoFmktklMP9H0GnW54d
': 'lXbgP74xZTkNGeGujVUAJGjZiwLRxy8R
',
173 '7yjB6ZLG6sW8R6RF2xcan1KGfJ5dNoyd
': 'wXQkPorvPHZ45N5t4Jf6qwg5Tp4xvw29
',
174 'a4zPpNeWGuzg0m0iX3tPeanGSkRKWXQg
': 'LY9oa3QAyHdGW9Wu3Ri5JGeEik7l1N8Q
',
175 'k2rneA2M38k25cXDwwSknTJlxPxQLZ6M
': '61lyA
2aEVDzklfdwmmh
31saPxQx
2VRjp
',
176 'bK9Zk4OvPnvxduLgxvi8VUeojnjA02eV
': 'o5jANYjbeMb4nfBaQvcLAt1jzLzYx6ze
',
177 '5VD6EydM3R9orHmNMGInGCJwbxbQvGRw
': 'w3zjmX7g4vnxzCxElvUEOiewkokXprkZ
',
178 '70X35QbVYVYNPUmP9YfbzI06YqYQk2R1
': 'vG4Aj2BMjMjoztB7zeFOnCVPJpJ8lMOa
',
179 '26qYwQVG9p1Bks2GgBckjfDJOXOAMgG1
': 'r4ev9X0mv5zqJc0yk5IBDcQOwZw8mnwQ
',
180 'rvVKpA56MBXWlSxMw3cobT5pdkd4Dm7q
': '1J7ZkY53pZ645c93owcLZuveE7E8B3rL
',
181 'qN1zdy1zlYL23IWZGWtDvfV6WeWQWkJo
': 'qN1zdy1zlYL23IWZGWtDvfV6WeWQWkJo
',
182 'jdKqRGF16dKsBviMDae7IGDl7oTjEbVV
': 'Q09l7vhlNxPFErIOK6BVCe7KnwUW5DVV
',
183 '3QLkogW1OUJ5VvPsrDH56DY2u7lgZWyY
': 'g2LRE1V9espmAOPhE4ubj4ZdUA57yDXa
',
184 'wyJvWbXGBSdbkEzhv0CW8meou82aqRy8
': 'M2wolPvyBIpQGkbT4juedD4ruzQGdK2y
',
185 '7QkdZrzEkFjKap6IYDU2PB0oCNZORmA0
': 'b2kN1l96qhJaMkPs9dt1lpjBfwqZoA8P
',
186 'pvA05113MHG1w3JTYxc6DVlRCjErVz4O
': 'gQXeAbblBUnDJ7vujbHvbRd1cxlz3AXO
',
187 'mA9blJDZwT0raG1cvkuoeVjLC7ZWd54q
': '0XN9jRPwMHnW7rvumgfJZOD9CJgVkWYr
',
188 '5QwRN5qKJTvGKlDTmnf7xwNZcjRmvEy9
': 'R2GP6LWBJU1QlnytwGt0B9pytWwAdDYy
',
189 'eyn5rPPbkfw2KYxH32fG1q58CbLJzM40
': 'p2gyqooZnS56JWeiDgfmOy1VugOQEBXn
',
190 '3BABn3b5RfPJGDwilbHe7l82uBoR05Am
': '7OYZG7KMVhbPdKJS3xcWEN3AuDlLNmXj
',
191 'xA5zNGXD3HrmqMlF6OS5pdMDuZO7RJ4w
': 'yY5DAm6r1IOLE3BCVMFveEMAcqnx3r29
',
192 'g43PgW3JZfml7o6fDEURL1ErCdeD8zyK
': 'RX3aQn1zrS4Nr6whDgCGLv9WSbxEKo2V
',
193 'lAqp8WbGgiG6D8LTKJcg3O72CDdre1Qx
': 'O2pnm6473HNJjpKuVosd3vVeh975yrX5
',
194 'wyJbYEDxKSdbkJ6S6RhW8meou82aqRy8
': 'M2wPm7EgRSpQGlAh70CedD4ruzQGdKYy
',
195 'M4lgW28nLCe0PVdtaXszVXq0SeRVqzA9
': 'n2zmJvg4jHv3G0ETNgiwW51LcveWOZ8e
',
196 '5Qw3OVvp9FvGKlDTmOC7xwNZcjRmvEQ9
': 'R2GzDdml9F1Qlnytw9s0B9pytWwAdD8y
',
197 'vy8a98X7zCwrRqbHrLUjYzwDiK2b70Qb
': 'K8lVwzyjZiBpnAaSGeUmnAgxuGOBxmY0
',
198 'g4eGjJLLoiqRD3Pf9oT5O03LuNbLRDQp
': '6XqD59zzpfN4EwQuaGt67qNpSyRBlnYy
',
199 'g43OPp9boIml7o6fDOIRL1ErCdeD8z4K
': 'RX33alNB4s4Nr6whDPUGLv9WSbxEKoXV
',
200 'xA2ng9OkBcGKzDbTkKsJlx7dUK8R3dA5
': 'z2aPnJvzBfObkwGC3vFaPxeBhxoMqZ8K
',
201 'xyKEgBajZuRr6DEC0Kt7XpD1cnNW9gAv
': 'g2ddlEBvRsqdgKaI4jUK9PrgfMexGZ23
',
202 'BAogww51jIMa2JnH1BcYpXM5F658RNAL
': 'rYWDmm0KptlkGv4FGJFMdZmjs9RDE6XR
',
203 'BAokpg62VtMa2JnH1mHYpXM5F658RNAL
': 'rYWryDnlNslkGv4FG4HMdZmjs9RDE62R
',
204 'a4z1Px5e2hzg0m0iMMCPeanGSkRKWXAg
': 'LY9eorNQGUdGW9WuKKf5JGeEik7l1NYQ
',
205 'kAx69R58kF9nY5YcdecJdl2pFXP53WyX
': 'gXyRxELpbfPvLeLSaRil0mp6UEzbZJ8L
',
206 'BAoY13nwViMa2J2uo2cY6BlETgmdwryL
': 'rYWwKzJmNFlkGvGtNoUM9bzwIJVzB1YR
',
209 _MCP_TO_ACCESS_KEY_TABLE = {
210 'qa
': 'anvato_mcpqa_demo_web_stage_18b55e00db5a13faa8d03ae6e41f6f5bcb15b922
',
211 'lin
': 'anvato_mcp_lin_web_prod_4c36fbfd4d8d8ecae6488656e21ac6d1ac972749
',
212 'univison
': 'anvato_mcp_univision_web_prod_37fe34850c99a3b5cdb71dab10a417dd5cdecafa
',
213 'uni
': 'anvato_mcp_univision_web_prod_37fe34850c99a3b5cdb71dab10a417dd5cdecafa
',
214 'dev
': 'anvato_mcp_fs2go_web_prod_c7b90a93e171469cdca00a931211a2f556370d0a
',
215 'sps
': 'anvato_mcp_sps_web_prod_54bdc90dd6ba21710e9f7074338365bba28da336
',
216 'spsstg
': 'anvato_mcp_sps_web_prod_54bdc90dd6ba21710e9f7074338365bba28da336
',
217 'anv
': 'anvato_mcp_anv_web_prod_791407490f4c1ef2a4bcb21103e0cb1bcb3352b3
',
218 'gray
': 'anvato_mcp_gray_web_prod_4c10f067c393ed8fc453d3930f8ab2b159973900
',
219 'hearst
': 'anvato_mcp_hearst_web_prod_5356c3de0fc7c90a3727b4863ca7fec3a4524a99
',
220 'cbs
': 'anvato_mcp_cbs_web_prod_02f26581ff80e5bda7aad28226a8d369037f2cbe
',
221 'telemundo
': 'anvato_mcp_telemundo_web_prod_c5278d51ad46fda4b6ca3d0ea44a7846a054f582
',
224 def _server_time(self, access_key, video_id):
225 return int_or_none(traverse_obj(self._download_json(
226 f'{self
._API
_BASE
_URL
}/server_time
', video_id, query={'anvack
': access_key},
227 note='Fetching server time
', fatal=False), 'server_time
')) or int(time.time())
229 def _get_video_json(self, access_key, video_id, extracted_token):
230 # See et() in anvplayer.min.js, which is an alias of getVideoJSON()
231 video_data_url = f'{self
._API
_BASE
_URL
}/mcp
/video
/{video_id}?anvack
={access_key}
'
232 server_time = self._server_time(access_key, video_id)
233 input_data = f'{server_time}~
{md5_text(video_data_url
)}~
{md5_text(server_time
)}'
235 auth_secret = bytes(aes_encrypt(
236 list(input_data[:64].encode()), list(self._AUTH_KEY)))
238 'X
-Anvato
-Adst
-Auth
': base64.b64encode(auth_secret).decode('ascii
'),
241 anvrid = md5_text(time.time() * 1000 * random.random())[:30]
244 'anvts
': server_time,
246 if extracted_token is not None:
247 api['anvstk2
'] = extracted_token
248 elif self._ANVACK_TABLE.get(access_key) is not None:
249 api['anvstk
'] = md5_text(f'{access_key}|{anvrid}|{server_time}|
{self
._ANVACK
_TABLE
[access_key
]}')
251 api['anvstk2
'] = 'default
'
253 return self._download_json(
254 video_data_url, video_id, transform_source=strip_jsonp, query=query,
255 data=json.dumps({'api
': api}, separators=(',', ':')).encode())
257 def _get_anvato_videos(self, access_key, video_id, token):
258 video_data = self._get_video_json(access_key, video_id, token)
261 for published_url in video_data['published_urls
']:
262 video_url = published_url.get('embed_url
')
265 media_format = published_url.get('format
')
266 ext = determine_ext(video_url)
268 if ext == 'smil
' or media_format == 'smil
':
269 formats.extend(self._extract_smil_formats(video_url, video_id))
272 tbr = int_or_none(published_url.get('kbps
'))
275 'format_id
': join_nonempty('http
', published_url.get('cdn_name
')).lower(),
279 vtt_subs, hls_subs = {}, {}
280 if media_format == 'vtt
':
281 _, vtt_subs = self._extract_m3u8_formats_and_subtitles(
282 video_url, video_id, m3u8_id='vtt
', fatal=False)
284 elif media_format == 'm3u8
' and tbr is not None:
286 'format_id
': join_nonempty('hls
', tbr),
289 elif media_format == 'm3u8
-variant
' or ext == 'm3u8
':
290 # For some videos the initial m3u8 URL returns JSON instead
291 manifest_json = self._download_json(
292 video_url, video_id, note='Downloading manifest JSON
', fatal=False)
294 video_url = manifest_json.get('master_m3u8
')
297 hls_fmts, hls_subs = self._extract_m3u8_formats_and_subtitles(
298 video_url, video_id, ext='mp4
', m3u8_id='hls
', fatal=False)
299 formats.extend(hls_fmts)
301 elif ext == 'mp3
' or media_format == 'mp3
':
302 a_format['vcodec
'] = 'none
'
305 'width
': int_or_none(published_url.get('width
')),
306 'height
': int_or_none(published_url.get('height
')),
308 formats.append(a_format)
311 for caption in video_data.get('captions
', []):
313 'url
': caption['url
'],
314 'ext
': 'tt
' if caption.get('format
') == 'SMPTE
-TT
' else None,
316 subtitles.setdefault(caption['language
'], []).append(a_caption)
317 subtitles = self._merge_subtitles(subtitles, hls_subs, vtt_subs)
322 'title
': video_data.get('def_title
'),
323 'description
': video_data.get('def_description
'),
324 'tags
': video_data.get('def_tags
', '').split(','),
325 'categories
': video_data.get('categories
'),
326 'thumbnail
': video_data.get('src_image_url
') or video_data.get('thumbnail
'),
327 'timestamp
': int_or_none(video_data.get(
328 'ts_published
') or video_data.get('ts_added
')),
329 'uploader
': video_data.get('mcp_id
'),
330 'duration
': int_or_none(video_data.get('duration
')),
331 'subtitles
': subtitles,
335 def _extract_from_webpage(cls, url, webpage):
336 for mobj in re.finditer(cls._ANVP_RE, webpage):
337 anvplayer_data = unescapeHTML(json.loads(mobj.group('anvp
'))) or {}
338 video_id, access_key = anvplayer_data.get('video
'), anvplayer_data.get('accessKey
')
340 access_key = cls._MCP_TO_ACCESS_KEY_TABLE.get((anvplayer_data.get('mcp
') or '').lower())
341 if not (video_id or '').isdigit() or not access_key:
343 url = f'anvato
:{access_key}
:{video_id}
'
344 if anvplayer_data.get('token
'):
345 url = smuggle_url(url, {'token
': anvplayer_data['token
']})
346 yield cls.url_result(url, AnvatoIE, video_id)
348 def _real_extract(self, url):
349 url, smuggled_data = unsmuggle_url(url, {})
350 self._initialize_geo_bypass({
351 'countries
': smuggled_data.get('geo_countries
'),
354 access_key, video_id = self._match_valid_url(url).group('access_key_or_mcp
', 'id')
355 if access_key not in self._ANVACK_TABLE:
356 access_key = self._MCP_TO_ACCESS_KEY_TABLE.get(access_key) or access_key
357 return self._get_anvato_videos(access_key, video_id, smuggled_data.get('token
'))