]>
Commit | Line | Data |
---|---|---|
ac668111 | 1 | import getpass |
08625e41 | 2 | import json |
1fd6e309 RA |
3 | import re |
4 | import time | |
add96eb9 | 5 | import urllib.parse |
1fd6e309 RA |
6 | import xml.etree.ElementTree as etree |
7 | ||
8 | from .common import InfoExtractor | |
3d2623a8 | 9 | from ..networking.exceptions import HTTPError |
1fd6e309 | 10 | from ..utils import ( |
ac668111 | 11 | NO_DEFAULT, |
12 | ExtractorError, | |
1fd6e309 | 13 | unescapeHTML, |
1fd6e309 | 14 | unified_timestamp, |
ac668111 | 15 | urlencode_postdata, |
1fd6e309 RA |
16 | ) |
17 | ||
1b6712ab RA |
18 | MSO_INFO = { |
19 | 'DTV': { | |
3a5a1870 | 20 | 'name': 'DIRECTV', |
1b6712ab RA |
21 | 'username_field': 'username', |
22 | 'password_field': 'password', | |
23 | }, | |
5ae9b8b3 S |
24 | 'ATT': { |
25 | 'name': 'AT&T U-verse', | |
26 | 'username_field': 'userid', | |
27 | 'password_field': 'password', | |
28 | }, | |
0c7a631b S |
29 | 'ATTOTT': { |
30 | 'name': 'DIRECTV NOW', | |
31 | 'username_field': 'email', | |
32 | 'password_field': 'loginpassword', | |
33 | }, | |
ad095c42 | 34 | 'RCN': { |
35 | 'name': 'RCN', | |
f0ded3da | 36 | 'username_field': 'username', |
37 | 'password_field': 'password', | |
ad095c42 | 38 | }, |
1b6712ab | 39 | 'Rogers': { |
3a5a1870 | 40 | 'name': 'Rogers', |
1b6712ab RA |
41 | 'username_field': 'UserName', |
42 | 'password_field': 'UserPassword', | |
43 | }, | |
46f60529 | 44 | 'Comcast_SSO': { |
45 | 'name': 'Comcast XFINITY', | |
46 | 'username_field': 'user', | |
47 | 'password_field': 'passwd', | |
48 | }, | |
890d44b0 RA |
49 | 'TWC': { |
50 | 'name': 'Time Warner Cable | Spectrum', | |
51 | 'username_field': 'Ecom_User_ID', | |
52 | 'password_field': 'Ecom_Password', | |
53 | }, | |
daa4e9ff N |
54 | 'Brighthouse': { |
55 | 'name': 'Bright House Networks | Spectrum', | |
56 | 'username_field': 'j_username', | |
57 | 'password_field': 'j_password', | |
58 | }, | |
af5049f1 YCH |
59 | 'Charter_Direct': { |
60 | 'name': 'Charter Spectrum', | |
61 | 'username_field': 'IDToken1', | |
62 | 'password_field': 'IDToken2', | |
63 | }, | |
08625e41 O |
64 | 'Spectrum': { |
65 | 'name': 'Spectrum', | |
66 | 'username_field': 'IDToken1', | |
67 | 'password_field': 'IDToken2', | |
68 | }, | |
5cc6ceb7 | 69 | 'Philo': { |
70 | 'name': 'Philo', | |
add96eb9 | 71 | 'username_field': 'ident', |
5cc6ceb7 | 72 | }, |
a9a34653 DT |
73 | 'Verizon': { |
74 | 'name': 'Verizon FiOS', | |
75 | 'username_field': 'IDToken1', | |
76 | 'password_field': 'IDToken2', | |
77 | }, | |
fee5f0c9 J |
78 | 'Cablevision': { |
79 | 'name': 'Optimum/Cablevision', | |
80 | 'username_field': 'j_username', | |
81 | 'password_field': 'j_password', | |
82 | }, | |
3a5a1870 | 83 | 'thr030': { |
add96eb9 | 84 | 'name': '3 Rivers Communications', |
3a5a1870 RA |
85 | }, |
86 | 'com140': { | |
add96eb9 | 87 | 'name': 'Access Montana', |
3a5a1870 RA |
88 | }, |
89 | 'acecommunications': { | |
add96eb9 | 90 | 'name': 'AcenTek', |
3a5a1870 RA |
91 | }, |
92 | 'acm010': { | |
add96eb9 | 93 | 'name': 'Acme Communications', |
3a5a1870 RA |
94 | }, |
95 | 'ada020': { | |
add96eb9 | 96 | 'name': 'Adams Cable Service', |
3a5a1870 RA |
97 | }, |
98 | 'alb020': { | |
add96eb9 | 99 | 'name': 'Albany Mutual Telephone', |
3a5a1870 RA |
100 | }, |
101 | 'algona': { | |
add96eb9 | 102 | 'name': 'Algona Municipal Utilities', |
3a5a1870 RA |
103 | }, |
104 | 'allwest': { | |
add96eb9 | 105 | 'name': 'All West Communications', |
3a5a1870 RA |
106 | }, |
107 | 'all025': { | |
add96eb9 | 108 | 'name': 'Allen\'s Communications', |
3a5a1870 RA |
109 | }, |
110 | 'spl010': { | |
add96eb9 | 111 | 'name': 'Alliance Communications', |
3a5a1870 RA |
112 | }, |
113 | 'all070': { | |
add96eb9 | 114 | 'name': 'ALLO Communications', |
3a5a1870 RA |
115 | }, |
116 | 'alpine': { | |
add96eb9 | 117 | 'name': 'Alpine Communications', |
3a5a1870 RA |
118 | }, |
119 | 'hun015': { | |
add96eb9 | 120 | 'name': 'American Broadband', |
3a5a1870 RA |
121 | }, |
122 | 'nwc010': { | |
add96eb9 | 123 | 'name': 'American Broadband Missouri', |
3a5a1870 RA |
124 | }, |
125 | 'com130-02': { | |
add96eb9 | 126 | 'name': 'American Community Networks', |
3a5a1870 RA |
127 | }, |
128 | 'com130-01': { | |
add96eb9 | 129 | 'name': 'American Warrior Networks', |
3a5a1870 RA |
130 | }, |
131 | 'tom020': { | |
add96eb9 | 132 | 'name': 'Amherst Telephone/Tomorrow Valley', |
3a5a1870 RA |
133 | }, |
134 | 'tvc020': { | |
add96eb9 | 135 | 'name': 'Andycable', |
3a5a1870 RA |
136 | }, |
137 | 'arkwest': { | |
add96eb9 | 138 | 'name': 'Arkwest Communications', |
3a5a1870 RA |
139 | }, |
140 | 'art030': { | |
add96eb9 | 141 | 'name': 'Arthur Mutual Telephone Company', |
3a5a1870 RA |
142 | }, |
143 | 'arvig': { | |
add96eb9 | 144 | 'name': 'Arvig', |
3a5a1870 RA |
145 | }, |
146 | 'nttcash010': { | |
add96eb9 | 147 | 'name': 'Ashland Home Net', |
3a5a1870 RA |
148 | }, |
149 | 'astound': { | |
add96eb9 | 150 | 'name': 'Astound (now Wave)', |
3a5a1870 RA |
151 | }, |
152 | 'dix030': { | |
add96eb9 | 153 | 'name': 'ATC Broadband', |
3a5a1870 RA |
154 | }, |
155 | 'ara010': { | |
add96eb9 | 156 | 'name': 'ATC Communications', |
3a5a1870 RA |
157 | }, |
158 | 'she030-02': { | |
add96eb9 | 159 | 'name': 'Ayersville Communications', |
3a5a1870 RA |
160 | }, |
161 | 'baldwin': { | |
add96eb9 | 162 | 'name': 'Baldwin Lightstream', |
3a5a1870 RA |
163 | }, |
164 | 'bal040': { | |
add96eb9 | 165 | 'name': 'Ballard TV', |
3a5a1870 RA |
166 | }, |
167 | 'cit025': { | |
add96eb9 | 168 | 'name': 'Bardstown Cable TV', |
3a5a1870 RA |
169 | }, |
170 | 'bay030': { | |
add96eb9 | 171 | 'name': 'Bay Country Communications', |
3a5a1870 RA |
172 | }, |
173 | 'tel095': { | |
add96eb9 | 174 | 'name': 'Beaver Creek Cooperative Telephone', |
3a5a1870 RA |
175 | }, |
176 | 'bea020': { | |
add96eb9 | 177 | 'name': 'Beaver Valley Cable', |
3a5a1870 RA |
178 | }, |
179 | 'bee010': { | |
add96eb9 | 180 | 'name': 'Bee Line Cable', |
3a5a1870 RA |
181 | }, |
182 | 'wir030': { | |
add96eb9 | 183 | 'name': 'Beehive Broadband', |
3a5a1870 RA |
184 | }, |
185 | 'bra020': { | |
add96eb9 | 186 | 'name': 'BELD', |
3a5a1870 RA |
187 | }, |
188 | 'bel020': { | |
add96eb9 | 189 | 'name': 'Bellevue Municipal Cable', |
3a5a1870 RA |
190 | }, |
191 | 'vol040-01': { | |
add96eb9 | 192 | 'name': 'Ben Lomand Connect / BLTV', |
3a5a1870 RA |
193 | }, |
194 | 'bev010': { | |
add96eb9 | 195 | 'name': 'BEVCOMM', |
3a5a1870 RA |
196 | }, |
197 | 'big020': { | |
add96eb9 | 198 | 'name': 'Big Sandy Broadband', |
3a5a1870 RA |
199 | }, |
200 | 'ble020': { | |
add96eb9 | 201 | 'name': 'Bledsoe Telephone Cooperative', |
3a5a1870 RA |
202 | }, |
203 | 'bvt010': { | |
add96eb9 | 204 | 'name': 'Blue Valley Tele-Communications', |
3a5a1870 RA |
205 | }, |
206 | 'bra050': { | |
add96eb9 | 207 | 'name': 'Brandenburg Telephone Co.', |
3a5a1870 RA |
208 | }, |
209 | 'bte010': { | |
add96eb9 | 210 | 'name': 'Bristol Tennessee Essential Services', |
3a5a1870 RA |
211 | }, |
212 | 'annearundel': { | |
add96eb9 | 213 | 'name': 'Broadstripe', |
3a5a1870 RA |
214 | }, |
215 | 'btc010': { | |
add96eb9 | 216 | 'name': 'BTC Communications', |
3a5a1870 RA |
217 | }, |
218 | 'btc040': { | |
add96eb9 | 219 | 'name': 'BTC Vision - Nahunta', |
3a5a1870 RA |
220 | }, |
221 | 'bul010': { | |
add96eb9 | 222 | 'name': 'Bulloch Telephone Cooperative', |
3a5a1870 RA |
223 | }, |
224 | 'but010': { | |
add96eb9 | 225 | 'name': 'Butler-Bremer Communications', |
3a5a1870 RA |
226 | }, |
227 | 'tel160-csp': { | |
add96eb9 | 228 | 'name': 'C Spire SNAP', |
3a5a1870 RA |
229 | }, |
230 | 'csicable': { | |
add96eb9 | 231 | 'name': 'Cable Services Inc.', |
3a5a1870 RA |
232 | }, |
233 | 'cableamerica': { | |
add96eb9 | 234 | 'name': 'CableAmerica', |
3a5a1870 RA |
235 | }, |
236 | 'cab038': { | |
add96eb9 | 237 | 'name': 'CableSouth Media 3', |
3a5a1870 RA |
238 | }, |
239 | 'weh010-camtel': { | |
add96eb9 | 240 | 'name': 'Cam-Tel Company', |
3a5a1870 RA |
241 | }, |
242 | 'car030': { | |
add96eb9 | 243 | 'name': 'Cameron Communications', |
3a5a1870 RA |
244 | }, |
245 | 'canbytel': { | |
add96eb9 | 246 | 'name': 'Canby Telcom', |
3a5a1870 RA |
247 | }, |
248 | 'crt020': { | |
add96eb9 | 249 | 'name': 'CapRock Tv', |
3a5a1870 RA |
250 | }, |
251 | 'car050': { | |
add96eb9 | 252 | 'name': 'Carnegie Cable', |
3a5a1870 RA |
253 | }, |
254 | 'cas': { | |
add96eb9 | 255 | 'name': 'CAS Cable', |
3a5a1870 RA |
256 | }, |
257 | 'casscomm': { | |
add96eb9 | 258 | 'name': 'CASSCOMM', |
3a5a1870 RA |
259 | }, |
260 | 'mid180-02': { | |
add96eb9 | 261 | 'name': 'Catalina Broadband Solutions', |
3a5a1870 RA |
262 | }, |
263 | 'cccomm': { | |
add96eb9 | 264 | 'name': 'CC Communications', |
3a5a1870 RA |
265 | }, |
266 | 'nttccde010': { | |
add96eb9 | 267 | 'name': 'CDE Lightband', |
3a5a1870 RA |
268 | }, |
269 | 'cfunet': { | |
add96eb9 | 270 | 'name': 'Cedar Falls Utilities', |
3a5a1870 RA |
271 | }, |
272 | 'dem010-01': { | |
add96eb9 | 273 | 'name': 'Celect-Bloomer Telephone Area', |
3a5a1870 RA |
274 | }, |
275 | 'dem010-02': { | |
add96eb9 | 276 | 'name': 'Celect-Bruce Telephone Area', |
3a5a1870 RA |
277 | }, |
278 | 'dem010-03': { | |
add96eb9 | 279 | 'name': 'Celect-Citizens Connected Area', |
3a5a1870 RA |
280 | }, |
281 | 'dem010-04': { | |
add96eb9 | 282 | 'name': 'Celect-Elmwood/Spring Valley Area', |
3a5a1870 RA |
283 | }, |
284 | 'dem010-06': { | |
add96eb9 | 285 | 'name': 'Celect-Mosaic Telecom', |
3a5a1870 RA |
286 | }, |
287 | 'dem010-05': { | |
add96eb9 | 288 | 'name': 'Celect-West WI Telephone Area', |
3a5a1870 RA |
289 | }, |
290 | 'net010-02': { | |
add96eb9 | 291 | 'name': 'Cellcom/Nsight Telservices', |
3a5a1870 RA |
292 | }, |
293 | 'cen100': { | |
add96eb9 | 294 | 'name': 'CentraCom', |
3a5a1870 RA |
295 | }, |
296 | 'nttccst010': { | |
add96eb9 | 297 | 'name': 'Central Scott / CSTV', |
3a5a1870 RA |
298 | }, |
299 | 'cha035': { | |
add96eb9 | 300 | 'name': 'Chaparral CableVision', |
3a5a1870 RA |
301 | }, |
302 | 'cha050': { | |
add96eb9 | 303 | 'name': 'Chariton Valley Communication Corporation, Inc.', |
3a5a1870 RA |
304 | }, |
305 | 'cha060': { | |
add96eb9 | 306 | 'name': 'Chatmoss Cablevision', |
3a5a1870 RA |
307 | }, |
308 | 'nttcche010': { | |
add96eb9 | 309 | 'name': 'Cherokee Communications', |
3a5a1870 RA |
310 | }, |
311 | 'che050': { | |
add96eb9 | 312 | 'name': 'Chesapeake Bay Communications', |
3a5a1870 RA |
313 | }, |
314 | 'cimtel': { | |
add96eb9 | 315 | 'name': 'Cim-Tel Cable, LLC.', |
3a5a1870 RA |
316 | }, |
317 | 'cit180': { | |
add96eb9 | 318 | 'name': 'Citizens Cablevision - Floyd, VA', |
3a5a1870 RA |
319 | }, |
320 | 'cit210': { | |
add96eb9 | 321 | 'name': 'Citizens Cablevision, Inc.', |
3a5a1870 RA |
322 | }, |
323 | 'cit040': { | |
add96eb9 | 324 | 'name': 'Citizens Fiber', |
3a5a1870 RA |
325 | }, |
326 | 'cit250': { | |
add96eb9 | 327 | 'name': 'Citizens Mutual', |
3a5a1870 RA |
328 | }, |
329 | 'war040': { | |
add96eb9 | 330 | 'name': 'Citizens Telephone Corporation', |
3a5a1870 RA |
331 | }, |
332 | 'wat025': { | |
add96eb9 | 333 | 'name': 'City Of Monroe', |
3a5a1870 RA |
334 | }, |
335 | 'wadsworth': { | |
add96eb9 | 336 | 'name': 'CityLink', |
3a5a1870 RA |
337 | }, |
338 | 'nor100': { | |
add96eb9 | 339 | 'name': 'CL Tel', |
3a5a1870 RA |
340 | }, |
341 | 'cla010': { | |
add96eb9 | 342 | 'name': 'Clarence Telephone and Cedar Communications', |
3a5a1870 RA |
343 | }, |
344 | 'ser060': { | |
add96eb9 | 345 | 'name': 'Clear Choice Communications', |
3a5a1870 RA |
346 | }, |
347 | 'tac020': { | |
add96eb9 | 348 | 'name': 'Click! Cable TV', |
3a5a1870 RA |
349 | }, |
350 | 'war020': { | |
add96eb9 | 351 | 'name': 'CLICK1.NET', |
3a5a1870 RA |
352 | }, |
353 | 'cml010': { | |
add96eb9 | 354 | 'name': 'CML Telephone Cooperative Association', |
3a5a1870 RA |
355 | }, |
356 | 'cns': { | |
add96eb9 | 357 | 'name': 'CNS', |
3a5a1870 RA |
358 | }, |
359 | 'com160': { | |
add96eb9 | 360 | 'name': 'Co-Mo Connect', |
3a5a1870 RA |
361 | }, |
362 | 'coa020': { | |
add96eb9 | 363 | 'name': 'Coast Communications', |
3a5a1870 RA |
364 | }, |
365 | 'coa030': { | |
add96eb9 | 366 | 'name': 'Coaxial Cable TV', |
3a5a1870 RA |
367 | }, |
368 | 'mid055': { | |
add96eb9 | 369 | 'name': 'Cobalt TV (Mid-State Community TV)', |
3a5a1870 RA |
370 | }, |
371 | 'col070': { | |
add96eb9 | 372 | 'name': 'Columbia Power & Water Systems', |
3a5a1870 RA |
373 | }, |
374 | 'col080': { | |
add96eb9 | 375 | 'name': 'Columbus Telephone', |
3a5a1870 RA |
376 | }, |
377 | 'nor105': { | |
add96eb9 | 378 | 'name': 'Communications 1 Cablevision, Inc.', |
3a5a1870 RA |
379 | }, |
380 | 'com150': { | |
add96eb9 | 381 | 'name': 'Community Cable & Broadband', |
3a5a1870 RA |
382 | }, |
383 | 'com020': { | |
add96eb9 | 384 | 'name': 'Community Communications Company', |
3a5a1870 RA |
385 | }, |
386 | 'coy010': { | |
add96eb9 | 387 | 'name': 'commZoom', |
3a5a1870 RA |
388 | }, |
389 | 'com025': { | |
add96eb9 | 390 | 'name': 'Complete Communication Services', |
3a5a1870 RA |
391 | }, |
392 | 'cat020': { | |
add96eb9 | 393 | 'name': 'Comporium', |
3a5a1870 RA |
394 | }, |
395 | 'com071': { | |
add96eb9 | 396 | 'name': 'ComSouth Telesys', |
3a5a1870 RA |
397 | }, |
398 | 'consolidatedcable': { | |
add96eb9 | 399 | 'name': 'Consolidated', |
3a5a1870 RA |
400 | }, |
401 | 'conwaycorp': { | |
add96eb9 | 402 | 'name': 'Conway Corporation', |
3a5a1870 RA |
403 | }, |
404 | 'coo050': { | |
add96eb9 | 405 | 'name': 'Coon Valley Telecommunications Inc', |
3a5a1870 RA |
406 | }, |
407 | 'coo080': { | |
add96eb9 | 408 | 'name': 'Cooperative Telephone Company', |
3a5a1870 RA |
409 | }, |
410 | 'cpt010': { | |
add96eb9 | 411 | 'name': 'CP-TEL', |
3a5a1870 RA |
412 | }, |
413 | 'cra010': { | |
add96eb9 | 414 | 'name': 'Craw-Kan Telephone', |
3a5a1870 RA |
415 | }, |
416 | 'crestview': { | |
add96eb9 | 417 | 'name': 'Crestview Cable Communications', |
3a5a1870 RA |
418 | }, |
419 | 'cross': { | |
add96eb9 | 420 | 'name': 'Cross TV', |
3a5a1870 RA |
421 | }, |
422 | 'cro030': { | |
add96eb9 | 423 | 'name': 'Crosslake Communications', |
3a5a1870 RA |
424 | }, |
425 | 'ctc040': { | |
add96eb9 | 426 | 'name': 'CTC - Brainerd MN', |
3a5a1870 RA |
427 | }, |
428 | 'phe030': { | |
add96eb9 | 429 | 'name': 'CTV-Beam - East Alabama', |
3a5a1870 RA |
430 | }, |
431 | 'cun010': { | |
add96eb9 | 432 | 'name': 'Cunningham Telephone & Cable', |
3a5a1870 RA |
433 | }, |
434 | 'dpc010': { | |
add96eb9 | 435 | 'name': 'D & P Communications', |
3a5a1870 RA |
436 | }, |
437 | 'dak030': { | |
add96eb9 | 438 | 'name': 'Dakota Central Telecommunications', |
3a5a1870 RA |
439 | }, |
440 | 'nttcdel010': { | |
add96eb9 | 441 | 'name': 'Delcambre Telephone LLC', |
3a5a1870 RA |
442 | }, |
443 | 'tel160-del': { | |
add96eb9 | 444 | 'name': 'Delta Telephone Company', |
3a5a1870 RA |
445 | }, |
446 | 'sal040': { | |
add96eb9 | 447 | 'name': 'DiamondNet', |
3a5a1870 RA |
448 | }, |
449 | 'ind060-dc': { | |
add96eb9 | 450 | 'name': 'Direct Communications', |
3a5a1870 RA |
451 | }, |
452 | 'doy010': { | |
add96eb9 | 453 | 'name': 'Doylestown Cable TV', |
3a5a1870 RA |
454 | }, |
455 | 'dic010': { | |
add96eb9 | 456 | 'name': 'DRN', |
3a5a1870 RA |
457 | }, |
458 | 'dtc020': { | |
add96eb9 | 459 | 'name': 'DTC', |
3a5a1870 RA |
460 | }, |
461 | 'dtc010': { | |
add96eb9 | 462 | 'name': 'DTC Cable (Delhi)', |
3a5a1870 RA |
463 | }, |
464 | 'dum010': { | |
add96eb9 | 465 | 'name': 'Dumont Telephone Company', |
3a5a1870 RA |
466 | }, |
467 | 'dun010': { | |
add96eb9 | 468 | 'name': 'Dunkerton Telephone Cooperative', |
3a5a1870 RA |
469 | }, |
470 | 'cci010': { | |
add96eb9 | 471 | 'name': 'Duo County Telecom', |
3a5a1870 RA |
472 | }, |
473 | 'eagle': { | |
add96eb9 | 474 | 'name': 'Eagle Communications', |
3a5a1870 RA |
475 | }, |
476 | 'weh010-east': { | |
add96eb9 | 477 | 'name': 'East Arkansas Cable TV', |
3a5a1870 RA |
478 | }, |
479 | 'eatel': { | |
add96eb9 | 480 | 'name': 'EATEL Video, LLC', |
3a5a1870 RA |
481 | }, |
482 | 'ell010': { | |
add96eb9 | 483 | 'name': 'ECTA', |
3a5a1870 RA |
484 | }, |
485 | 'emerytelcom': { | |
add96eb9 | 486 | 'name': 'Emery Telcom Video LLC', |
3a5a1870 RA |
487 | }, |
488 | 'nor200': { | |
add96eb9 | 489 | 'name': 'Empire Access', |
3a5a1870 RA |
490 | }, |
491 | 'endeavor': { | |
add96eb9 | 492 | 'name': 'Endeavor Communications', |
3a5a1870 RA |
493 | }, |
494 | 'sun045': { | |
add96eb9 | 495 | 'name': 'Enhanced Telecommunications Corporation', |
3a5a1870 RA |
496 | }, |
497 | 'mid030': { | |
add96eb9 | 498 | 'name': 'enTouch', |
3a5a1870 RA |
499 | }, |
500 | 'epb020': { | |
add96eb9 | 501 | 'name': 'EPB Smartnet', |
3a5a1870 RA |
502 | }, |
503 | 'jea010': { | |
add96eb9 | 504 | 'name': 'EPlus Broadband', |
3a5a1870 RA |
505 | }, |
506 | 'com065': { | |
add96eb9 | 507 | 'name': 'ETC', |
3a5a1870 RA |
508 | }, |
509 | 'ete010': { | |
add96eb9 | 510 | 'name': 'Etex Communications', |
3a5a1870 RA |
511 | }, |
512 | 'fbc-tele': { | |
add96eb9 | 513 | 'name': 'F&B Communications', |
3a5a1870 RA |
514 | }, |
515 | 'fal010': { | |
add96eb9 | 516 | 'name': 'Falcon Broadband', |
3a5a1870 RA |
517 | }, |
518 | 'fam010': { | |
add96eb9 | 519 | 'name': 'FamilyView CableVision', |
3a5a1870 RA |
520 | }, |
521 | 'far020': { | |
add96eb9 | 522 | 'name': 'Farmers Mutual Telephone Company', |
3a5a1870 RA |
523 | }, |
524 | 'fay010': { | |
add96eb9 | 525 | 'name': 'Fayetteville Public Utilities', |
3a5a1870 RA |
526 | }, |
527 | 'sal060': { | |
add96eb9 | 528 | 'name': 'fibrant', |
3a5a1870 RA |
529 | }, |
530 | 'fid010': { | |
add96eb9 | 531 | 'name': 'Fidelity Communications', |
3a5a1870 RA |
532 | }, |
533 | 'for030': { | |
add96eb9 | 534 | 'name': 'FJ Communications', |
3a5a1870 RA |
535 | }, |
536 | 'fli020': { | |
add96eb9 | 537 | 'name': 'Flint River Communications', |
3a5a1870 RA |
538 | }, |
539 | 'far030': { | |
add96eb9 | 540 | 'name': 'FMT - Jesup', |
3a5a1870 RA |
541 | }, |
542 | 'foo010': { | |
add96eb9 | 543 | 'name': 'Foothills Communications', |
3a5a1870 RA |
544 | }, |
545 | 'for080': { | |
add96eb9 | 546 | 'name': 'Forsyth CableNet', |
3a5a1870 RA |
547 | }, |
548 | 'fbcomm': { | |
add96eb9 | 549 | 'name': 'Frankfort Plant Board', |
3a5a1870 RA |
550 | }, |
551 | 'tel160-fra': { | |
add96eb9 | 552 | 'name': 'Franklin Telephone Company', |
3a5a1870 RA |
553 | }, |
554 | 'nttcftc010': { | |
add96eb9 | 555 | 'name': 'FTC', |
3a5a1870 RA |
556 | }, |
557 | 'fullchannel': { | |
add96eb9 | 558 | 'name': 'Full Channel, Inc.', |
3a5a1870 RA |
559 | }, |
560 | 'gar040': { | |
add96eb9 | 561 | 'name': 'Gardonville Cooperative Telephone Association', |
3a5a1870 RA |
562 | }, |
563 | 'gbt010': { | |
add96eb9 | 564 | 'name': 'GBT Communications, Inc.', |
3a5a1870 RA |
565 | }, |
566 | 'tec010': { | |
add96eb9 | 567 | 'name': 'Genuine Telecom', |
3a5a1870 RA |
568 | }, |
569 | 'clr010': { | |
add96eb9 | 570 | 'name': 'Giant Communications', |
3a5a1870 RA |
571 | }, |
572 | 'gla010': { | |
add96eb9 | 573 | 'name': 'Glasgow EPB', |
3a5a1870 RA |
574 | }, |
575 | 'gle010': { | |
add96eb9 | 576 | 'name': 'Glenwood Telecommunications', |
3a5a1870 RA |
577 | }, |
578 | 'gra060': { | |
add96eb9 | 579 | 'name': 'GLW Broadband Inc.', |
3a5a1870 RA |
580 | }, |
581 | 'goldenwest': { | |
add96eb9 | 582 | 'name': 'Golden West Cablevision', |
3a5a1870 RA |
583 | }, |
584 | 'vis030': { | |
add96eb9 | 585 | 'name': 'Grantsburg Telcom', |
3a5a1870 RA |
586 | }, |
587 | 'gpcom': { | |
add96eb9 | 588 | 'name': 'Great Plains Communications', |
3a5a1870 RA |
589 | }, |
590 | 'gri010': { | |
add96eb9 | 591 | 'name': 'Gridley Cable Inc', |
3a5a1870 RA |
592 | }, |
593 | 'hbc010': { | |
add96eb9 | 594 | 'name': 'H&B Cable Services', |
3a5a1870 RA |
595 | }, |
596 | 'hae010': { | |
add96eb9 | 597 | 'name': 'Haefele TV Inc.', |
3a5a1870 RA |
598 | }, |
599 | 'htc010': { | |
add96eb9 | 600 | 'name': 'Halstad Telephone Company', |
3a5a1870 RA |
601 | }, |
602 | 'har005': { | |
add96eb9 | 603 | 'name': 'Harlan Municipal Utilities', |
3a5a1870 RA |
604 | }, |
605 | 'har020': { | |
add96eb9 | 606 | 'name': 'Hart Communications', |
3a5a1870 RA |
607 | }, |
608 | 'ced010': { | |
add96eb9 | 609 | 'name': 'Hartelco TV', |
3a5a1870 RA |
610 | }, |
611 | 'hea040': { | |
add96eb9 | 612 | 'name': 'Heart of Iowa Communications Cooperative', |
3a5a1870 RA |
613 | }, |
614 | 'htc020': { | |
add96eb9 | 615 | 'name': 'Hickory Telephone Company', |
3a5a1870 RA |
616 | }, |
617 | 'nttchig010': { | |
add96eb9 | 618 | 'name': 'Highland Communication Services', |
3a5a1870 RA |
619 | }, |
620 | 'hig030': { | |
add96eb9 | 621 | 'name': 'Highland Media', |
3a5a1870 RA |
622 | }, |
623 | 'spc010': { | |
add96eb9 | 624 | 'name': 'Hilliary Communications', |
3a5a1870 RA |
625 | }, |
626 | 'hin020': { | |
add96eb9 | 627 | 'name': 'Hinton CATV Co.', |
3a5a1870 RA |
628 | }, |
629 | 'hometel': { | |
add96eb9 | 630 | 'name': 'HomeTel Entertainment, Inc.', |
3a5a1870 RA |
631 | }, |
632 | 'hoodcanal': { | |
add96eb9 | 633 | 'name': 'Hood Canal Communications', |
3a5a1870 RA |
634 | }, |
635 | 'weh010-hope': { | |
add96eb9 | 636 | 'name': 'Hope - Prescott Cable TV', |
3a5a1870 RA |
637 | }, |
638 | 'horizoncable': { | |
add96eb9 | 639 | 'name': 'Horizon Cable TV, Inc.', |
3a5a1870 RA |
640 | }, |
641 | 'hor040': { | |
add96eb9 | 642 | 'name': 'Horizon Chillicothe Telephone', |
3a5a1870 RA |
643 | }, |
644 | 'htc030': { | |
add96eb9 | 645 | 'name': 'HTC Communications Co. - IL', |
3a5a1870 RA |
646 | }, |
647 | 'htccomm': { | |
add96eb9 | 648 | 'name': 'HTC Communications, Inc. - IA', |
3a5a1870 RA |
649 | }, |
650 | 'wal005': { | |
add96eb9 | 651 | 'name': 'Huxley Communications', |
3a5a1870 RA |
652 | }, |
653 | 'imon': { | |
add96eb9 | 654 | 'name': 'ImOn Communications', |
3a5a1870 RA |
655 | }, |
656 | 'ind040': { | |
add96eb9 | 657 | 'name': 'Independence Telecommunications', |
3a5a1870 RA |
658 | }, |
659 | 'rrc010': { | |
add96eb9 | 660 | 'name': 'Inland Networks', |
3a5a1870 RA |
661 | }, |
662 | 'stc020': { | |
add96eb9 | 663 | 'name': 'Innovative Cable TV St Croix', |
3a5a1870 RA |
664 | }, |
665 | 'car100': { | |
add96eb9 | 666 | 'name': 'Innovative Cable TV St Thomas-St John', |
3a5a1870 RA |
667 | }, |
668 | 'icc010': { | |
add96eb9 | 669 | 'name': 'Inside Connect Cable', |
3a5a1870 RA |
670 | }, |
671 | 'int100': { | |
add96eb9 | 672 | 'name': 'Integra Telecom', |
3a5a1870 RA |
673 | }, |
674 | 'int050': { | |
add96eb9 | 675 | 'name': 'Interstate Telecommunications Coop', |
3a5a1870 RA |
676 | }, |
677 | 'irv010': { | |
add96eb9 | 678 | 'name': 'Irvine Cable', |
3a5a1870 RA |
679 | }, |
680 | 'k2c010': { | |
add96eb9 | 681 | 'name': 'K2 Communications', |
3a5a1870 RA |
682 | }, |
683 | 'kal010': { | |
add96eb9 | 684 | 'name': 'Kalida Telephone Company, Inc.', |
3a5a1870 RA |
685 | }, |
686 | 'kal030': { | |
add96eb9 | 687 | 'name': 'Kalona Cooperative Telephone Company', |
3a5a1870 RA |
688 | }, |
689 | 'kmt010': { | |
add96eb9 | 690 | 'name': 'KMTelecom', |
3a5a1870 RA |
691 | }, |
692 | 'kpu010': { | |
add96eb9 | 693 | 'name': 'KPU Telecommunications', |
3a5a1870 RA |
694 | }, |
695 | 'kuh010': { | |
add96eb9 | 696 | 'name': 'Kuhn Communications, Inc.', |
3a5a1870 RA |
697 | }, |
698 | 'lak130': { | |
add96eb9 | 699 | 'name': 'Lakeland Communications', |
3a5a1870 RA |
700 | }, |
701 | 'lan010': { | |
add96eb9 | 702 | 'name': 'Langco', |
3a5a1870 RA |
703 | }, |
704 | 'lau020': { | |
add96eb9 | 705 | 'name': 'Laurel Highland Total Communications, Inc.', |
3a5a1870 RA |
706 | }, |
707 | 'leh010': { | |
add96eb9 | 708 | 'name': 'Lehigh Valley Cooperative Telephone', |
3a5a1870 RA |
709 | }, |
710 | 'bra010': { | |
add96eb9 | 711 | 'name': 'Limestone Cable/Bracken Cable', |
3a5a1870 RA |
712 | }, |
713 | 'loc020': { | |
add96eb9 | 714 | 'name': 'LISCO', |
3a5a1870 RA |
715 | }, |
716 | 'lit020': { | |
add96eb9 | 717 | 'name': 'Litestream', |
3a5a1870 RA |
718 | }, |
719 | 'tel140': { | |
add96eb9 | 720 | 'name': 'LivCom', |
3a5a1870 RA |
721 | }, |
722 | 'loc010': { | |
add96eb9 | 723 | 'name': 'LocalTel Communications', |
3a5a1870 RA |
724 | }, |
725 | 'weh010-longview': { | |
add96eb9 | 726 | 'name': 'Longview - Kilgore Cable TV', |
3a5a1870 RA |
727 | }, |
728 | 'lon030': { | |
add96eb9 | 729 | 'name': 'Lonsdale Video Ventures, LLC', |
3a5a1870 RA |
730 | }, |
731 | 'lns010': { | |
add96eb9 | 732 | 'name': 'Lost Nation-Elwood Telephone Co.', |
3a5a1870 RA |
733 | }, |
734 | 'nttclpc010': { | |
add96eb9 | 735 | 'name': 'LPC Connect', |
3a5a1870 RA |
736 | }, |
737 | 'lumos': { | |
add96eb9 | 738 | 'name': 'Lumos Networks', |
3a5a1870 RA |
739 | }, |
740 | 'madison': { | |
add96eb9 | 741 | 'name': 'Madison Communications', |
3a5a1870 RA |
742 | }, |
743 | 'mad030': { | |
add96eb9 | 744 | 'name': 'Madison County Cable Inc.', |
3a5a1870 RA |
745 | }, |
746 | 'nttcmah010': { | |
add96eb9 | 747 | 'name': 'Mahaska Communication Group', |
3a5a1870 RA |
748 | }, |
749 | 'mar010': { | |
add96eb9 | 750 | 'name': 'Marne & Elk Horn Telephone Company', |
3a5a1870 RA |
751 | }, |
752 | 'mcc040': { | |
add96eb9 | 753 | 'name': 'McClure Telephone Co.', |
3a5a1870 RA |
754 | }, |
755 | 'mctv': { | |
add96eb9 | 756 | 'name': 'MCTV', |
3a5a1870 RA |
757 | }, |
758 | 'merrimac': { | |
add96eb9 | 759 | 'name': 'Merrimac Communications Ltd.', |
3a5a1870 RA |
760 | }, |
761 | 'metronet': { | |
add96eb9 | 762 | 'name': 'Metronet', |
3a5a1870 RA |
763 | }, |
764 | 'mhtc': { | |
add96eb9 | 765 | 'name': 'MHTC', |
3a5a1870 RA |
766 | }, |
767 | 'midhudson': { | |
add96eb9 | 768 | 'name': 'Mid-Hudson Cable', |
3a5a1870 RA |
769 | }, |
770 | 'midrivers': { | |
add96eb9 | 771 | 'name': 'Mid-Rivers Communications', |
3a5a1870 RA |
772 | }, |
773 | 'mid045': { | |
add96eb9 | 774 | 'name': 'Midstate Communications', |
3a5a1870 RA |
775 | }, |
776 | 'mil080': { | |
add96eb9 | 777 | 'name': 'Milford Communications', |
3a5a1870 RA |
778 | }, |
779 | 'min030': { | |
add96eb9 | 780 | 'name': 'MINET', |
3a5a1870 RA |
781 | }, |
782 | 'nttcmin010': { | |
add96eb9 | 783 | 'name': 'Minford TV', |
3a5a1870 RA |
784 | }, |
785 | 'san040-02': { | |
add96eb9 | 786 | 'name': 'Mitchell Telecom', |
3a5a1870 RA |
787 | }, |
788 | 'mlg010': { | |
add96eb9 | 789 | 'name': 'MLGC', |
3a5a1870 RA |
790 | }, |
791 | 'mon060': { | |
add96eb9 | 792 | 'name': 'Mon-Cre TVE', |
3a5a1870 RA |
793 | }, |
794 | 'mou110': { | |
add96eb9 | 795 | 'name': 'Mountain Telephone', |
3a5a1870 RA |
796 | }, |
797 | 'mou050': { | |
add96eb9 | 798 | 'name': 'Mountain Village Cable', |
3a5a1870 RA |
799 | }, |
800 | 'mtacomm': { | |
add96eb9 | 801 | 'name': 'MTA Communications, LLC', |
3a5a1870 RA |
802 | }, |
803 | 'mtc010': { | |
add96eb9 | 804 | 'name': 'MTC Cable', |
3a5a1870 RA |
805 | }, |
806 | 'med040': { | |
add96eb9 | 807 | 'name': 'MTC Technologies', |
3a5a1870 RA |
808 | }, |
809 | 'man060': { | |
add96eb9 | 810 | 'name': 'MTCC', |
3a5a1870 RA |
811 | }, |
812 | 'mtc030': { | |
add96eb9 | 813 | 'name': 'MTCO Communications', |
3a5a1870 RA |
814 | }, |
815 | 'mul050': { | |
add96eb9 | 816 | 'name': 'Mulberry Telecommunications', |
3a5a1870 RA |
817 | }, |
818 | 'mur010': { | |
add96eb9 | 819 | 'name': 'Murray Electric System', |
3a5a1870 RA |
820 | }, |
821 | 'musfiber': { | |
add96eb9 | 822 | 'name': 'MUS FiberNET', |
3a5a1870 RA |
823 | }, |
824 | 'mpw': { | |
add96eb9 | 825 | 'name': 'Muscatine Power & Water', |
3a5a1870 RA |
826 | }, |
827 | 'nttcsli010': { | |
add96eb9 | 828 | 'name': 'myEVTV.com', |
3a5a1870 RA |
829 | }, |
830 | 'nor115': { | |
add96eb9 | 831 | 'name': 'NCC', |
3a5a1870 RA |
832 | }, |
833 | 'nor260': { | |
add96eb9 | 834 | 'name': 'NDTC', |
3a5a1870 RA |
835 | }, |
836 | 'nctc': { | |
add96eb9 | 837 | 'name': 'Nebraska Central Telecom, Inc.', |
3a5a1870 RA |
838 | }, |
839 | 'nel020': { | |
add96eb9 | 840 | 'name': 'Nelsonville TV Cable', |
3a5a1870 RA |
841 | }, |
842 | 'nem010': { | |
add96eb9 | 843 | 'name': 'Nemont', |
3a5a1870 RA |
844 | }, |
845 | 'new075': { | |
add96eb9 | 846 | 'name': 'New Hope Telephone Cooperative', |
3a5a1870 RA |
847 | }, |
848 | 'nor240': { | |
add96eb9 | 849 | 'name': 'NICP', |
3a5a1870 RA |
850 | }, |
851 | 'cic010': { | |
add96eb9 | 852 | 'name': 'NineStar Connect', |
3a5a1870 RA |
853 | }, |
854 | 'nktelco': { | |
add96eb9 | 855 | 'name': 'NKTelco', |
3a5a1870 RA |
856 | }, |
857 | 'nortex': { | |
add96eb9 | 858 | 'name': 'Nortex Communications', |
3a5a1870 RA |
859 | }, |
860 | 'nor140': { | |
add96eb9 | 861 | 'name': 'North Central Telephone Cooperative', |
3a5a1870 RA |
862 | }, |
863 | 'nor030': { | |
add96eb9 | 864 | 'name': 'Northland Communications', |
3a5a1870 RA |
865 | }, |
866 | 'nor075': { | |
add96eb9 | 867 | 'name': 'Northwest Communications', |
3a5a1870 RA |
868 | }, |
869 | 'nor125': { | |
add96eb9 | 870 | 'name': 'Norwood Light Broadband', |
3a5a1870 RA |
871 | }, |
872 | 'net010': { | |
add96eb9 | 873 | 'name': 'Nsight Telservices', |
3a5a1870 RA |
874 | }, |
875 | 'dur010': { | |
add96eb9 | 876 | 'name': 'Ntec', |
3a5a1870 RA |
877 | }, |
878 | 'nts010': { | |
add96eb9 | 879 | 'name': 'NTS Communications', |
3a5a1870 RA |
880 | }, |
881 | 'new045': { | |
add96eb9 | 882 | 'name': 'NU-Telecom', |
3a5a1870 RA |
883 | }, |
884 | 'nulink': { | |
add96eb9 | 885 | 'name': 'NuLink', |
3a5a1870 RA |
886 | }, |
887 | 'jam030': { | |
add96eb9 | 888 | 'name': 'NVC', |
3a5a1870 RA |
889 | }, |
890 | 'far035': { | |
add96eb9 | 891 | 'name': 'OmniTel Communications', |
3a5a1870 RA |
892 | }, |
893 | 'onesource': { | |
add96eb9 | 894 | 'name': 'OneSource Communications', |
3a5a1870 RA |
895 | }, |
896 | 'cit230': { | |
add96eb9 | 897 | 'name': 'Opelika Power Services', |
3a5a1870 RA |
898 | }, |
899 | 'daltonutilities': { | |
add96eb9 | 900 | 'name': 'OptiLink', |
3a5a1870 RA |
901 | }, |
902 | 'mid140': { | |
add96eb9 | 903 | 'name': 'OPTURA', |
3a5a1870 RA |
904 | }, |
905 | 'ote010': { | |
add96eb9 | 906 | 'name': 'OTEC Communication Company', |
3a5a1870 RA |
907 | }, |
908 | 'cci020': { | |
add96eb9 | 909 | 'name': 'Packerland Broadband', |
3a5a1870 RA |
910 | }, |
911 | 'pan010': { | |
add96eb9 | 912 | 'name': 'Panora Telco/Guthrie Center Communications', |
3a5a1870 RA |
913 | }, |
914 | 'otter': { | |
add96eb9 | 915 | 'name': 'Park Region Telephone & Otter Tail Telcom', |
3a5a1870 RA |
916 | }, |
917 | 'mid050': { | |
add96eb9 | 918 | 'name': 'Partner Communications Cooperative', |
3a5a1870 RA |
919 | }, |
920 | 'fib010': { | |
add96eb9 | 921 | 'name': 'Pathway', |
3a5a1870 RA |
922 | }, |
923 | 'paulbunyan': { | |
add96eb9 | 924 | 'name': 'Paul Bunyan Communications', |
3a5a1870 RA |
925 | }, |
926 | 'pem020': { | |
add96eb9 | 927 | 'name': 'Pembroke Telephone Company', |
3a5a1870 RA |
928 | }, |
929 | 'mck010': { | |
add96eb9 | 930 | 'name': 'Peoples Rural Telephone Cooperative', |
3a5a1870 RA |
931 | }, |
932 | 'pul010': { | |
add96eb9 | 933 | 'name': 'PES Energize', |
3a5a1870 RA |
934 | }, |
935 | 'phi010': { | |
add96eb9 | 936 | 'name': 'Philippi Communications System', |
3a5a1870 RA |
937 | }, |
938 | 'phonoscope': { | |
add96eb9 | 939 | 'name': 'Phonoscope Cable', |
3a5a1870 RA |
940 | }, |
941 | 'pin070': { | |
add96eb9 | 942 | 'name': 'Pine Belt Communications, Inc.', |
3a5a1870 RA |
943 | }, |
944 | 'weh010-pine': { | |
add96eb9 | 945 | 'name': 'Pine Bluff Cable TV', |
3a5a1870 RA |
946 | }, |
947 | 'pin060': { | |
add96eb9 | 948 | 'name': 'Pineland Telephone Cooperative', |
3a5a1870 RA |
949 | }, |
950 | 'cam010': { | |
add96eb9 | 951 | 'name': 'Pinpoint Communications', |
3a5a1870 RA |
952 | }, |
953 | 'pio060': { | |
add96eb9 | 954 | 'name': 'Pioneer Broadband', |
3a5a1870 RA |
955 | }, |
956 | 'pioncomm': { | |
add96eb9 | 957 | 'name': 'Pioneer Communications', |
3a5a1870 RA |
958 | }, |
959 | 'pioneer': { | |
add96eb9 | 960 | 'name': 'Pioneer DTV', |
3a5a1870 RA |
961 | }, |
962 | 'pla020': { | |
add96eb9 | 963 | 'name': 'Plant TiftNet, Inc.', |
3a5a1870 RA |
964 | }, |
965 | 'par010': { | |
add96eb9 | 966 | 'name': 'PLWC', |
3a5a1870 RA |
967 | }, |
968 | 'pro035': { | |
add96eb9 | 969 | 'name': 'PMT', |
3a5a1870 RA |
970 | }, |
971 | 'vik011': { | |
add96eb9 | 972 | 'name': 'Polar Cablevision', |
3a5a1870 RA |
973 | }, |
974 | 'pottawatomie': { | |
add96eb9 | 975 | 'name': 'Pottawatomie Telephone Co.', |
3a5a1870 RA |
976 | }, |
977 | 'premiercomm': { | |
add96eb9 | 978 | 'name': 'Premier Communications', |
3a5a1870 RA |
979 | }, |
980 | 'psc010': { | |
add96eb9 | 981 | 'name': 'PSC', |
3a5a1870 RA |
982 | }, |
983 | 'pan020': { | |
add96eb9 | 984 | 'name': 'PTCI', |
3a5a1870 RA |
985 | }, |
986 | 'qco010': { | |
add96eb9 | 987 | 'name': 'QCOL', |
3a5a1870 RA |
988 | }, |
989 | 'qua010': { | |
add96eb9 | 990 | 'name': 'Quality Cablevision', |
3a5a1870 RA |
991 | }, |
992 | 'rad010': { | |
add96eb9 | 993 | 'name': 'Radcliffe Telephone Company', |
3a5a1870 RA |
994 | }, |
995 | 'car040': { | |
add96eb9 | 996 | 'name': 'Rainbow Communications', |
3a5a1870 RA |
997 | }, |
998 | 'rai030': { | |
add96eb9 | 999 | 'name': 'Rainier Connect', |
3a5a1870 RA |
1000 | }, |
1001 | 'ral010': { | |
add96eb9 | 1002 | 'name': 'Ralls Technologies', |
3a5a1870 RA |
1003 | }, |
1004 | 'rct010': { | |
add96eb9 | 1005 | 'name': 'RC Technologies', |
3a5a1870 RA |
1006 | }, |
1007 | 'red040': { | |
add96eb9 | 1008 | 'name': 'Red River Communications', |
3a5a1870 RA |
1009 | }, |
1010 | 'ree010': { | |
add96eb9 | 1011 | 'name': 'Reedsburg Utility Commission', |
3a5a1870 RA |
1012 | }, |
1013 | 'mol010': { | |
add96eb9 | 1014 | 'name': 'Reliance Connects- Oregon', |
3a5a1870 RA |
1015 | }, |
1016 | 'res020': { | |
add96eb9 | 1017 | 'name': 'Reserve Telecommunications', |
3a5a1870 RA |
1018 | }, |
1019 | 'weh010-resort': { | |
add96eb9 | 1020 | 'name': 'Resort TV Cable', |
3a5a1870 RA |
1021 | }, |
1022 | 'rld010': { | |
add96eb9 | 1023 | 'name': 'Richland Grant Telephone Cooperative, Inc.', |
3a5a1870 RA |
1024 | }, |
1025 | 'riv030': { | |
add96eb9 | 1026 | 'name': 'River Valley Telecommunications Coop', |
3a5a1870 RA |
1027 | }, |
1028 | 'rockportcable': { | |
add96eb9 | 1029 | 'name': 'Rock Port Cablevision', |
3a5a1870 RA |
1030 | }, |
1031 | 'rsf010': { | |
add96eb9 | 1032 | 'name': 'RS Fiber', |
3a5a1870 RA |
1033 | }, |
1034 | 'rtc': { | |
add96eb9 | 1035 | 'name': 'RTC Communication Corp', |
3a5a1870 RA |
1036 | }, |
1037 | 'res040': { | |
add96eb9 | 1038 | 'name': 'RTC-Reservation Telephone Coop.', |
3a5a1870 RA |
1039 | }, |
1040 | 'rte010': { | |
add96eb9 | 1041 | 'name': 'RTEC Communications', |
3a5a1870 RA |
1042 | }, |
1043 | 'stc010': { | |
add96eb9 | 1044 | 'name': 'S&T', |
3a5a1870 RA |
1045 | }, |
1046 | 'san020': { | |
add96eb9 | 1047 | 'name': 'San Bruno Cable TV', |
3a5a1870 RA |
1048 | }, |
1049 | 'san040-01': { | |
add96eb9 | 1050 | 'name': 'Santel', |
3a5a1870 RA |
1051 | }, |
1052 | 'sav010': { | |
add96eb9 | 1053 | 'name': 'SCI Broadband-Savage Communications Inc.', |
3a5a1870 RA |
1054 | }, |
1055 | 'sco050': { | |
add96eb9 | 1056 | 'name': 'Scottsboro Electric Power Board', |
3a5a1870 RA |
1057 | }, |
1058 | 'scr010': { | |
add96eb9 | 1059 | 'name': 'Scranton Telephone Company', |
3a5a1870 RA |
1060 | }, |
1061 | 'selco': { | |
add96eb9 | 1062 | 'name': 'SELCO', |
3a5a1870 RA |
1063 | }, |
1064 | 'she010': { | |
add96eb9 | 1065 | 'name': 'Shentel', |
3a5a1870 RA |
1066 | }, |
1067 | 'she030': { | |
add96eb9 | 1068 | 'name': 'Sherwood Mutual Telephone Association, Inc.', |
3a5a1870 RA |
1069 | }, |
1070 | 'ind060-ssc': { | |
add96eb9 | 1071 | 'name': 'Silver Star Communications', |
3a5a1870 RA |
1072 | }, |
1073 | 'sjoberg': { | |
add96eb9 | 1074 | 'name': 'Sjoberg\'s Inc.', |
3a5a1870 RA |
1075 | }, |
1076 | 'sou025': { | |
add96eb9 | 1077 | 'name': 'SKT', |
3a5a1870 RA |
1078 | }, |
1079 | 'sky050': { | |
add96eb9 | 1080 | 'name': 'SkyBest TV', |
3a5a1870 RA |
1081 | }, |
1082 | 'nttcsmi010': { | |
add96eb9 | 1083 | 'name': 'Smithville Communications', |
3a5a1870 RA |
1084 | }, |
1085 | 'woo010': { | |
add96eb9 | 1086 | 'name': 'Solarus', |
3a5a1870 RA |
1087 | }, |
1088 | 'sou075': { | |
add96eb9 | 1089 | 'name': 'South Central Rural Telephone Cooperative', |
3a5a1870 RA |
1090 | }, |
1091 | 'sou065': { | |
add96eb9 | 1092 | 'name': 'South Holt Cablevision, Inc.', |
3a5a1870 RA |
1093 | }, |
1094 | 'sou035': { | |
add96eb9 | 1095 | 'name': 'South Slope Cooperative Communications', |
3a5a1870 RA |
1096 | }, |
1097 | 'spa020': { | |
add96eb9 | 1098 | 'name': 'Spanish Fork Community Network', |
3a5a1870 RA |
1099 | }, |
1100 | 'spe010': { | |
add96eb9 | 1101 | 'name': 'Spencer Municipal Utilities', |
3a5a1870 RA |
1102 | }, |
1103 | 'spi005': { | |
add96eb9 | 1104 | 'name': 'Spillway Communications, Inc.', |
3a5a1870 RA |
1105 | }, |
1106 | 'srt010': { | |
add96eb9 | 1107 | 'name': 'SRT', |
3a5a1870 RA |
1108 | }, |
1109 | 'cccsmc010': { | |
add96eb9 | 1110 | 'name': 'St. Maarten Cable TV', |
3a5a1870 RA |
1111 | }, |
1112 | 'sta025': { | |
add96eb9 | 1113 | 'name': 'Star Communications', |
3a5a1870 RA |
1114 | }, |
1115 | 'sco020': { | |
add96eb9 | 1116 | 'name': 'STE', |
3a5a1870 RA |
1117 | }, |
1118 | 'uin010': { | |
add96eb9 | 1119 | 'name': 'STRATA Networks', |
3a5a1870 RA |
1120 | }, |
1121 | 'sum010': { | |
add96eb9 | 1122 | 'name': 'Sumner Cable TV', |
3a5a1870 RA |
1123 | }, |
1124 | 'pie010': { | |
add96eb9 | 1125 | 'name': 'Surry TV/PCSI TV', |
3a5a1870 RA |
1126 | }, |
1127 | 'swa010': { | |
add96eb9 | 1128 | 'name': 'Swayzee Communications', |
3a5a1870 RA |
1129 | }, |
1130 | 'sweetwater': { | |
add96eb9 | 1131 | 'name': 'Sweetwater Cable Television Co', |
3a5a1870 RA |
1132 | }, |
1133 | 'weh010-talequah': { | |
add96eb9 | 1134 | 'name': 'Tahlequah Cable TV', |
3a5a1870 RA |
1135 | }, |
1136 | 'tct': { | |
add96eb9 | 1137 | 'name': 'TCT', |
3a5a1870 RA |
1138 | }, |
1139 | 'tel050': { | |
add96eb9 | 1140 | 'name': 'Tele-Media Company', |
3a5a1870 RA |
1141 | }, |
1142 | 'com050': { | |
add96eb9 | 1143 | 'name': 'The Community Agency', |
3a5a1870 RA |
1144 | }, |
1145 | 'thr020': { | |
add96eb9 | 1146 | 'name': 'Three River', |
3a5a1870 RA |
1147 | }, |
1148 | 'cab140': { | |
add96eb9 | 1149 | 'name': 'Town & Country Technologies', |
3a5a1870 RA |
1150 | }, |
1151 | 'tra010': { | |
add96eb9 | 1152 | 'name': 'Trans-Video', |
3a5a1870 RA |
1153 | }, |
1154 | 'tre010': { | |
add96eb9 | 1155 | 'name': 'Trenton TV Cable Company', |
3a5a1870 RA |
1156 | }, |
1157 | 'tcc': { | |
add96eb9 | 1158 | 'name': 'Tri County Communications Cooperative', |
3a5a1870 RA |
1159 | }, |
1160 | 'tri025': { | |
add96eb9 | 1161 | 'name': 'TriCounty Telecom', |
3a5a1870 RA |
1162 | }, |
1163 | 'tri110': { | |
add96eb9 | 1164 | 'name': 'TrioTel Communications, Inc.', |
3a5a1870 RA |
1165 | }, |
1166 | 'tro010': { | |
add96eb9 | 1167 | 'name': 'Troy Cablevision, Inc.', |
3a5a1870 RA |
1168 | }, |
1169 | 'tsc': { | |
add96eb9 | 1170 | 'name': 'TSC', |
3a5a1870 RA |
1171 | }, |
1172 | 'cit220': { | |
add96eb9 | 1173 | 'name': 'Tullahoma Utilities Board', |
3a5a1870 RA |
1174 | }, |
1175 | 'tvc030': { | |
add96eb9 | 1176 | 'name': 'TV Cable of Rensselaer', |
3a5a1870 RA |
1177 | }, |
1178 | 'tvc015': { | |
add96eb9 | 1179 | 'name': 'TVC Cable', |
3a5a1870 RA |
1180 | }, |
1181 | 'cab180': { | |
add96eb9 | 1182 | 'name': 'TVision', |
3a5a1870 RA |
1183 | }, |
1184 | 'twi040': { | |
add96eb9 | 1185 | 'name': 'Twin Lakes', |
3a5a1870 RA |
1186 | }, |
1187 | 'tvtinc': { | |
add96eb9 | 1188 | 'name': 'Twin Valley', |
3a5a1870 RA |
1189 | }, |
1190 | 'uis010': { | |
add96eb9 | 1191 | 'name': 'Union Telephone Company', |
3a5a1870 RA |
1192 | }, |
1193 | 'uni110': { | |
add96eb9 | 1194 | 'name': 'United Communications - TN', |
3a5a1870 RA |
1195 | }, |
1196 | 'uni120': { | |
add96eb9 | 1197 | 'name': 'United Services', |
3a5a1870 RA |
1198 | }, |
1199 | 'uss020': { | |
add96eb9 | 1200 | 'name': 'US Sonet', |
3a5a1870 RA |
1201 | }, |
1202 | 'cab060': { | |
add96eb9 | 1203 | 'name': 'USA Communications', |
3a5a1870 RA |
1204 | }, |
1205 | 'she005': { | |
add96eb9 | 1206 | 'name': 'USA Communications/Shellsburg, IA', |
3a5a1870 RA |
1207 | }, |
1208 | 'val040': { | |
add96eb9 | 1209 | 'name': 'Valley TeleCom Group', |
3a5a1870 RA |
1210 | }, |
1211 | 'val025': { | |
add96eb9 | 1212 | 'name': 'Valley Telecommunications', |
3a5a1870 RA |
1213 | }, |
1214 | 'val030': { | |
add96eb9 | 1215 | 'name': 'Valparaiso Broadband', |
3a5a1870 RA |
1216 | }, |
1217 | 'cla050': { | |
add96eb9 | 1218 | 'name': 'Vast Broadband', |
3a5a1870 RA |
1219 | }, |
1220 | 'sul015': { | |
add96eb9 | 1221 | 'name': 'Venture Communications Cooperative, Inc.', |
3a5a1870 RA |
1222 | }, |
1223 | 'ver025': { | |
add96eb9 | 1224 | 'name': 'Vernon Communications Co-op', |
3a5a1870 RA |
1225 | }, |
1226 | 'weh010-vicksburg': { | |
add96eb9 | 1227 | 'name': 'Vicksburg Video', |
3a5a1870 RA |
1228 | }, |
1229 | 'vis070': { | |
add96eb9 | 1230 | 'name': 'Vision Communications', |
3a5a1870 RA |
1231 | }, |
1232 | 'volcanotel': { | |
add96eb9 | 1233 | 'name': 'Volcano Vision, Inc.', |
3a5a1870 RA |
1234 | }, |
1235 | 'vol040-02': { | |
add96eb9 | 1236 | 'name': 'VolFirst / BLTV', |
3a5a1870 RA |
1237 | }, |
1238 | 'ver070': { | |
add96eb9 | 1239 | 'name': 'VTel', |
3a5a1870 RA |
1240 | }, |
1241 | 'nttcvtx010': { | |
add96eb9 | 1242 | 'name': 'VTX1', |
3a5a1870 RA |
1243 | }, |
1244 | 'bci010-02': { | |
add96eb9 | 1245 | 'name': 'Vyve Broadband', |
3a5a1870 RA |
1246 | }, |
1247 | 'wab020': { | |
add96eb9 | 1248 | 'name': 'Wabash Mutual Telephone', |
3a5a1870 RA |
1249 | }, |
1250 | 'waitsfield': { | |
add96eb9 | 1251 | 'name': 'Waitsfield Cable', |
3a5a1870 RA |
1252 | }, |
1253 | 'wal010': { | |
add96eb9 | 1254 | 'name': 'Walnut Communications', |
3a5a1870 RA |
1255 | }, |
1256 | 'wavebroadband': { | |
add96eb9 | 1257 | 'name': 'Wave', |
3a5a1870 RA |
1258 | }, |
1259 | 'wav030': { | |
add96eb9 | 1260 | 'name': 'Waverly Communications Utility', |
3a5a1870 RA |
1261 | }, |
1262 | 'wbi010': { | |
add96eb9 | 1263 | 'name': 'WBI', |
3a5a1870 RA |
1264 | }, |
1265 | 'web020': { | |
add96eb9 | 1266 | 'name': 'Webster-Calhoun Cooperative Telephone Association', |
3a5a1870 RA |
1267 | }, |
1268 | 'wes005': { | |
add96eb9 | 1269 | 'name': 'West Alabama TV Cable', |
3a5a1870 RA |
1270 | }, |
1271 | 'carolinata': { | |
add96eb9 | 1272 | 'name': 'West Carolina Communications', |
3a5a1870 RA |
1273 | }, |
1274 | 'wct010': { | |
add96eb9 | 1275 | 'name': 'West Central Telephone Association', |
3a5a1870 RA |
1276 | }, |
1277 | 'wes110': { | |
add96eb9 | 1278 | 'name': 'West River Cooperative Telephone Company', |
3a5a1870 RA |
1279 | }, |
1280 | 'ani030': { | |
add96eb9 | 1281 | 'name': 'WesTel Systems', |
3a5a1870 RA |
1282 | }, |
1283 | 'westianet': { | |
add96eb9 | 1284 | 'name': 'Western Iowa Networks', |
3a5a1870 RA |
1285 | }, |
1286 | 'nttcwhi010': { | |
add96eb9 | 1287 | 'name': 'Whidbey Telecom', |
3a5a1870 RA |
1288 | }, |
1289 | 'weh010-white': { | |
add96eb9 | 1290 | 'name': 'White County Cable TV', |
3a5a1870 RA |
1291 | }, |
1292 | 'wes130': { | |
add96eb9 | 1293 | 'name': 'Wiatel', |
3a5a1870 RA |
1294 | }, |
1295 | 'wik010': { | |
add96eb9 | 1296 | 'name': 'Wiktel', |
3a5a1870 RA |
1297 | }, |
1298 | 'wil070': { | |
add96eb9 | 1299 | 'name': 'Wilkes Communications, Inc./RiverStreet Networks', |
3a5a1870 RA |
1300 | }, |
1301 | 'wil015': { | |
add96eb9 | 1302 | 'name': 'Wilson Communications', |
3a5a1870 RA |
1303 | }, |
1304 | 'win010': { | |
add96eb9 | 1305 | 'name': 'Windomnet/SMBS', |
3a5a1870 RA |
1306 | }, |
1307 | 'win090': { | |
add96eb9 | 1308 | 'name': 'Windstream Cable TV', |
3a5a1870 RA |
1309 | }, |
1310 | 'wcta': { | |
add96eb9 | 1311 | 'name': 'Winnebago Cooperative Telecom Association', |
3a5a1870 RA |
1312 | }, |
1313 | 'wtc010': { | |
add96eb9 | 1314 | 'name': 'WTC', |
3a5a1870 RA |
1315 | }, |
1316 | 'wil040': { | |
add96eb9 | 1317 | 'name': 'WTC Communications, Inc.', |
3a5a1870 RA |
1318 | }, |
1319 | 'wya010': { | |
add96eb9 | 1320 | 'name': 'Wyandotte Cable', |
3a5a1870 RA |
1321 | }, |
1322 | 'hin020-02': { | |
add96eb9 | 1323 | 'name': 'X-Stream Services', |
3a5a1870 RA |
1324 | }, |
1325 | 'xit010': { | |
add96eb9 | 1326 | 'name': 'XIT Communications', |
3a5a1870 RA |
1327 | }, |
1328 | 'yel010': { | |
add96eb9 | 1329 | 'name': 'Yelcot Communications', |
3a5a1870 RA |
1330 | }, |
1331 | 'mid180-01': { | |
add96eb9 | 1332 | 'name': 'yondoo', |
3a5a1870 RA |
1333 | }, |
1334 | 'cou060': { | |
add96eb9 | 1335 | 'name': 'Zito Media', |
3a5a1870 | 1336 | }, |
d24734da W |
1337 | 'slingtv': { |
1338 | 'name': 'Sling TV', | |
1339 | 'username_field': 'username', | |
1340 | 'password_field': 'password', | |
1341 | }, | |
9e0e6adb C |
1342 | 'Suddenlink': { |
1343 | 'name': 'Suddenlink', | |
1344 | 'username_field': 'username', | |
1345 | 'password_field': 'password', | |
1346 | }, | |
0c0b78b2 C |
1347 | 'AlticeOne': { |
1348 | 'name': 'Optimum TV', | |
1349 | 'username_field': 'j_username', | |
1350 | 'password_field': 'j_password', | |
1351 | }, | |
1b6712ab RA |
1352 | } |
1353 | ||
1354 | ||
6368e2e6 | 1355 | class AdobePassIE(InfoExtractor): # XXX: Conventionally, base classes should end with BaseIE/InfoExtractor |
1fd6e309 RA |
1356 | _SERVICE_PROVIDER_TEMPLATE = 'https://sp.auth.adobe.com/adobe-services/%s' |
1357 | _USER_AGENT = 'Mozilla/5.0 (X11; Linux i686; rv:47.0) Gecko/20100101 Firefox/47.0' | |
1dec2c8a | 1358 | _MVPD_CACHE = 'ap-mvpd' |
1fd6e309 | 1359 | |
0c7a631b S |
1360 | _DOWNLOADING_LOGIN_PAGE = 'Downloading Provider Login Page' |
1361 | ||
fb8e8b2d | 1362 | def _download_webpage_handle(self, *args, **kwargs): |
e504b090 S |
1363 | headers = self.geo_verification_headers() |
1364 | headers.update(kwargs.get('headers', {})) | |
fb8e8b2d | 1365 | kwargs['headers'] = headers |
add96eb9 | 1366 | return super()._download_webpage_handle( |
f9934b96 | 1367 | *args, **kwargs) |
fb8e8b2d | 1368 | |
1fd6e309 RA |
1369 | @staticmethod |
1370 | def _get_mvpd_resource(provider_id, title, guid, rating): | |
1371 | channel = etree.Element('channel') | |
1372 | channel_title = etree.SubElement(channel, 'title') | |
1373 | channel_title.text = provider_id | |
1374 | item = etree.SubElement(channel, 'item') | |
1375 | resource_title = etree.SubElement(item, 'title') | |
1376 | resource_title.text = title | |
1377 | resource_guid = etree.SubElement(item, 'guid') | |
1378 | resource_guid.text = guid | |
1379 | resource_rating = etree.SubElement(item, 'media:rating') | |
1380 | resource_rating.attrib = {'scheme': 'urn:v-chip'} | |
1381 | resource_rating.text = rating | |
1382 | return '<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">' + etree.tostring(channel).decode() + '</rss>' | |
1383 | ||
1384 | def _extract_mvpd_auth(self, url, video_id, requestor_id, resource): | |
1385 | def xml_text(xml_str, tag): | |
1386 | return self._search_regex( | |
add96eb9 | 1387 | f'<{tag}>(.+?)</{tag}>', xml_str, tag) |
1fd6e309 | 1388 | |
6150502e RA |
1389 | def is_expired(token, date_ele): |
1390 | token_expires = unified_timestamp(re.sub(r'[_ ]GMT', '', xml_text(token, date_ele))) | |
1391 | return token_expires and token_expires <= int(time.time()) | |
1392 | ||
1b6712ab RA |
1393 | def post_form(form_page_res, note, data={}): |
1394 | form_page, urlh = form_page_res | |
1395 | post_url = self._html_search_regex(r'<form[^>]+action=(["\'])(?P<url>.+?)\1', form_page, 'post url', group='url') | |
1396 | if not re.match(r'https?://', post_url): | |
add96eb9 | 1397 | post_url = urllib.parse.urljoin(urlh.url, post_url) |
1b6712ab RA |
1398 | form_data = self._hidden_inputs(form_page) |
1399 | form_data.update(data) | |
1400 | return self._download_webpage_handle( | |
1401 | post_url, video_id, note, data=urlencode_postdata(form_data), headers={ | |
1402 | 'Content-Type': 'application/x-www-form-urlencoded', | |
1403 | }) | |
1404 | ||
7a730921 | 1405 | def raise_mvpd_required(): |
8414c2da S |
1406 | raise ExtractorError( |
1407 | 'This video is only available for users of participating TV providers. ' | |
797c636b RA |
1408 | 'Use --ap-mso to specify Adobe Pass Multiple-system operator Identifier ' |
1409 | 'and --ap-username and --ap-password or --netrc to provide account credentials.', expected=True) | |
7a730921 | 1410 | |
0c7a631b S |
1411 | def extract_redirect_url(html, url=None, fatal=False): |
1412 | # TODO: eliminate code duplication with generic extractor and move | |
1413 | # redirection code into _download_webpage_handle | |
1414 | REDIRECT_REGEX = r'[0-9]{,2};\s*(?:URL|url)=\'?([^\'"]+)' | |
1415 | redirect_url = self._search_regex( | |
1416 | r'(?i)<meta\s+(?=(?:[a-z-]+="[^"]+"\s+)*http-equiv="refresh")' | |
add96eb9 | 1417 | rf'(?:[a-z-]+="[^"]+"\s+)*?content="{REDIRECT_REGEX}', |
0c7a631b S |
1418 | html, 'meta refresh redirect', |
1419 | default=NO_DEFAULT if fatal else None, fatal=fatal) | |
1420 | if not redirect_url: | |
1421 | return None | |
1422 | if url: | |
add96eb9 | 1423 | redirect_url = urllib.parse.urljoin(url, unescapeHTML(redirect_url)) |
0c7a631b S |
1424 | return redirect_url |
1425 | ||
1fd6e309 RA |
1426 | mvpd_headers = { |
1427 | 'ap_42': 'anonymous', | |
1428 | 'ap_11': 'Linux i686', | |
1429 | 'ap_z': self._USER_AGENT, | |
1430 | 'User-Agent': self._USER_AGENT, | |
1431 | } | |
1432 | ||
c38f0681 | 1433 | guid = xml_text(resource, 'guid') if '<' in resource else resource |
1b6712ab | 1434 | count = 0 |
5712c0f4 | 1435 | while count < 2: |
9809740b | 1436 | requestor_info = self.cache.load(self._MVPD_CACHE, requestor_id) or {} |
1b6712ab RA |
1437 | authn_token = requestor_info.get('authn_token') |
1438 | if authn_token and is_expired(authn_token, 'simpleTokenExpires'): | |
1439 | authn_token = None | |
1440 | if not authn_token: | |
a06916d9 | 1441 | mso_id = self.get_param('ap_mso') |
b2a2d913 | 1442 | if mso_id: |
1443 | username, password = self._get_login_info('ap_username', 'ap_password', mso_id) | |
1444 | if not username or not password: | |
1445 | raise_mvpd_required() | |
1446 | mso_info = MSO_INFO[mso_id] | |
1b6712ab | 1447 | |
b2a2d913 | 1448 | provider_redirect_page_res = self._download_webpage_handle( |
1449 | self._SERVICE_PROVIDER_TEMPLATE % 'authenticate/saml', video_id, | |
1450 | 'Downloading Provider Redirect Page', query={ | |
1451 | 'noflash': 'true', | |
1452 | 'mso_id': mso_id, | |
1453 | 'requestor_id': requestor_id, | |
1454 | 'no_iframe': 'false', | |
1455 | 'domain_name': 'adobe.com', | |
1456 | 'redirect_url': url, | |
1457 | }) | |
1458 | elif not self._cookies_passed: | |
1459 | raise_mvpd_required() | |
46f60529 | 1460 | |
b2a2d913 | 1461 | if not mso_id: |
1462 | pass | |
1463 | elif mso_id == 'Comcast_SSO': | |
46f60529 | 1464 | # Comcast page flow varies by video site and whether you |
1465 | # are on Comcast's network. | |
1466 | provider_redirect_page, urlh = provider_redirect_page_res | |
46f60529 | 1467 | if 'automatically signing you in' in provider_redirect_page: |
859447a2 S |
1468 | oauth_redirect_url = self._html_search_regex( |
1469 | r'window\.location\s*=\s*[\'"]([^\'"]+)', | |
46f60529 | 1470 | provider_redirect_page, 'oauth redirect') |
859447a2 S |
1471 | self._download_webpage( |
1472 | oauth_redirect_url, video_id, 'Confirming auto login') | |
3086aa19 DW |
1473 | elif 'automatically signed in with' in provider_redirect_page: |
1474 | # Seems like comcast is rolling up new way of automatically signing customers | |
1475 | oauth_redirect_url = self._html_search_regex( | |
337734d4 | 1476 | r'continue:\s*"(https://oauth\.xfinity\.com/oauth/authorize\?.+)"', provider_redirect_page, |
3086aa19 DW |
1477 | 'oauth redirect (signed)') |
1478 | # Just need to process the request. No useful data comes back | |
1479 | self._download_webpage(oauth_redirect_url, video_id, 'Confirming auto login') | |
46f60529 | 1480 | else: |
1481 | if '<form name="signin"' in provider_redirect_page: | |
46f60529 | 1482 | provider_login_page_res = provider_redirect_page_res |
1483 | elif 'http-equiv="refresh"' in provider_redirect_page: | |
0c7a631b S |
1484 | oauth_redirect_url = extract_redirect_url( |
1485 | provider_redirect_page, fatal=True) | |
859447a2 | 1486 | provider_login_page_res = self._download_webpage_handle( |
79a51069 | 1487 | oauth_redirect_url, video_id, |
0c7a631b | 1488 | self._DOWNLOADING_LOGIN_PAGE) |
46f60529 | 1489 | else: |
1490 | provider_login_page_res = post_form( | |
79a51069 | 1491 | provider_redirect_page_res, |
0c7a631b | 1492 | self._DOWNLOADING_LOGIN_PAGE) |
46f60529 | 1493 | |
79a51069 RA |
1494 | mvpd_confirm_page_res = post_form( |
1495 | provider_login_page_res, 'Logging in', { | |
1496 | mso_info['username_field']: username, | |
1497 | mso_info['password_field']: password, | |
1498 | }) | |
46f60529 | 1499 | mvpd_confirm_page, urlh = mvpd_confirm_page_res |
1500 | if '<button class="submit" value="Resume">Resume</button>' in mvpd_confirm_page: | |
1501 | post_form(mvpd_confirm_page_res, 'Confirming Login') | |
5cc6ceb7 | 1502 | elif mso_id == 'Philo': |
1503 | # Philo has very unique authentication method | |
1504 | self._download_webpage( | |
1505 | 'https://idp.philo.com/auth/init/login_code', video_id, 'Requesting auth code', data=urlencode_postdata({ | |
1506 | 'ident': username, | |
1507 | 'device': 'web', | |
1508 | 'send_confirm_link': False, | |
add96eb9 | 1509 | 'send_token': True, |
5cc6ceb7 | 1510 | })) |
ac668111 | 1511 | philo_code = getpass.getpass('Type auth code you have received [Return]: ') |
5cc6ceb7 | 1512 | self._download_webpage( |
1513 | 'https://idp.philo.com/auth/update/login_code', video_id, 'Submitting token', data=urlencode_postdata({ | |
add96eb9 | 1514 | 'token': philo_code, |
5cc6ceb7 | 1515 | })) |
1516 | mvpd_confirm_page_res = self._download_webpage_handle('https://idp.philo.com/idp/submit', video_id, 'Confirming Philo Login') | |
1517 | post_form(mvpd_confirm_page_res, 'Confirming Login') | |
a9a34653 DT |
1518 | elif mso_id == 'Verizon': |
1519 | # In general, if you're connecting from a Verizon-assigned IP, | |
1520 | # you will not actually pass your credentials. | |
1521 | provider_redirect_page, urlh = provider_redirect_page_res | |
52a2f994 | 1522 | # From non-Verizon IP, still gave 'Please wait', but noticed N==Y; will need to try on Verizon IP |
1523 | if 'Please wait ...' in provider_redirect_page and '\'N\'== "Y"' not in provider_redirect_page: | |
a9a34653 DT |
1524 | saml_redirect_url = self._html_search_regex( |
1525 | r'self\.parent\.location=(["\'])(?P<url>.+?)\1', | |
79a51069 RA |
1526 | provider_redirect_page, |
1527 | 'SAML Redirect URL', group='url') | |
a9a34653 | 1528 | saml_login_page = self._download_webpage( |
79a51069 RA |
1529 | saml_redirect_url, video_id, |
1530 | 'Downloading SAML Login Page') | |
52a2f994 | 1531 | elif 'Verizon FiOS - sign in' in provider_redirect_page: |
1532 | # FXNetworks from non-Verizon IP | |
79a51069 RA |
1533 | saml_login_page_res = post_form( |
1534 | provider_redirect_page_res, 'Logging in', { | |
1535 | mso_info['username_field']: username, | |
1536 | mso_info['password_field']: password, | |
1537 | }) | |
a9a34653 DT |
1538 | saml_login_page, urlh = saml_login_page_res |
1539 | if 'Please try again.' in saml_login_page: | |
79a51069 RA |
1540 | raise ExtractorError( |
1541 | 'We\'re sorry, but either the User ID or Password entered is not correct.') | |
52a2f994 | 1542 | else: |
1543 | # ABC from non-Verizon IP | |
1544 | saml_redirect_url = self._html_search_regex( | |
1545 | r'var\surl\s*=\s*(["\'])(?P<url>.+?)\1', | |
1546 | provider_redirect_page, | |
1547 | 'SAML Redirect URL', group='url') | |
1548 | saml_redirect_url = saml_redirect_url.replace(r'\/', '/') | |
1549 | saml_redirect_url = saml_redirect_url.replace(r'\-', '-') | |
1550 | saml_redirect_url = saml_redirect_url.replace(r'\x26', '&') | |
1551 | saml_login_page = self._download_webpage( | |
1552 | saml_redirect_url, video_id, | |
1553 | 'Downloading SAML Login Page') | |
1554 | saml_login_page, urlh = post_form( | |
1555 | [saml_login_page, saml_redirect_url], 'Logging in', { | |
1556 | mso_info['username_field']: username, | |
1557 | mso_info['password_field']: password, | |
1558 | }) | |
1559 | if 'Please try again.' in saml_login_page: | |
1560 | raise ExtractorError( | |
1561 | 'Failed to login, incorrect User ID or Password.') | |
79a51069 RA |
1562 | saml_login_url = self._search_regex( |
1563 | r'xmlHttp\.open\("POST"\s*,\s*(["\'])(?P<url>.+?)\1', | |
1564 | saml_login_page, 'SAML Login URL', group='url') | |
a9a34653 DT |
1565 | saml_response_json = self._download_json( |
1566 | saml_login_url, video_id, 'Downloading SAML Response', | |
79a51069 RA |
1567 | headers={'Content-Type': 'text/xml'}) |
1568 | self._download_webpage( | |
1569 | saml_response_json['targetValue'], video_id, | |
1570 | 'Confirming Login', data=urlencode_postdata({ | |
1571 | 'SAMLResponse': saml_response_json['SAMLResponse'], | |
add96eb9 | 1572 | 'RelayState': saml_response_json['RelayState'], |
79a51069 | 1573 | }), headers={ |
add96eb9 | 1574 | 'Content-Type': 'application/x-www-form-urlencoded', |
79a51069 | 1575 | }) |
ea057082 | 1576 | elif mso_id in ('Spectrum', 'Charter_Direct'): |
08625e41 O |
1577 | # Spectrum's login for is dynamically loaded via JS so we need to hardcode the flow |
1578 | # as a one-off implementation. | |
1579 | provider_redirect_page, urlh = provider_redirect_page_res | |
1580 | provider_login_page_res = post_form( | |
1581 | provider_redirect_page_res, self._DOWNLOADING_LOGIN_PAGE) | |
1582 | saml_login_page, urlh = provider_login_page_res | |
1583 | relay_state = self._search_regex( | |
1584 | r'RelayState\s*=\s*"(?P<relay>.+?)";', | |
1585 | saml_login_page, 'RelayState', group='relay') | |
1586 | saml_request = self._search_regex( | |
1587 | r'SAMLRequest\s*=\s*"(?P<saml_request>.+?)";', | |
1588 | saml_login_page, 'SAMLRequest', group='saml_request') | |
1589 | login_json = { | |
1590 | mso_info['username_field']: username, | |
1591 | mso_info['password_field']: password, | |
1592 | 'RelayState': relay_state, | |
1593 | 'SAMLRequest': saml_request, | |
1594 | } | |
1595 | saml_response_json = self._download_json( | |
1596 | 'https://tveauthn.spectrum.net/tveauthentication/api/v1/manualAuth', video_id, | |
1597 | 'Downloading SAML Response', | |
1598 | data=json.dumps(login_json).encode(), | |
1599 | headers={ | |
1600 | 'Content-Type': 'application/json', | |
1601 | 'Accept': 'application/json', | |
1602 | }) | |
1603 | self._download_webpage( | |
1604 | saml_response_json['SAMLRedirectUri'], video_id, | |
1605 | 'Confirming Login', data=urlencode_postdata({ | |
1606 | 'SAMLResponse': saml_response_json['SAMLResponse'], | |
1607 | 'RelayState': relay_state, | |
1608 | }), headers={ | |
add96eb9 | 1609 | 'Content-Type': 'application/x-www-form-urlencoded', |
08625e41 | 1610 | }) |
d24734da W |
1611 | elif mso_id == 'slingtv': |
1612 | # SlingTV has a meta-refresh based authentication, but also | |
1613 | # looks at the tab history to count the number of times the | |
1614 | # browser has been on a page | |
1615 | ||
1616 | first_bookend_page, urlh = provider_redirect_page_res | |
1617 | ||
1618 | hidden_data = self._hidden_inputs(first_bookend_page) | |
1619 | hidden_data['history'] = 1 | |
1620 | ||
1621 | provider_login_page_res = self._download_webpage_handle( | |
3d2623a8 | 1622 | urlh.url, video_id, 'Sending first bookend', |
d24734da W |
1623 | query=hidden_data) |
1624 | ||
1625 | provider_association_redirect, urlh = post_form( | |
1626 | provider_login_page_res, 'Logging in', { | |
1627 | mso_info['username_field']: username, | |
add96eb9 | 1628 | mso_info['password_field']: password, |
d24734da W |
1629 | }) |
1630 | ||
1631 | provider_refresh_redirect_url = extract_redirect_url( | |
3d2623a8 | 1632 | provider_association_redirect, url=urlh.url) |
d24734da W |
1633 | |
1634 | last_bookend_page, urlh = self._download_webpage_handle( | |
1635 | provider_refresh_redirect_url, video_id, | |
1636 | 'Downloading Auth Association Redirect Page') | |
1637 | hidden_data = self._hidden_inputs(last_bookend_page) | |
1638 | hidden_data['history'] = 3 | |
1639 | ||
1640 | mvpd_confirm_page_res = self._download_webpage_handle( | |
3d2623a8 | 1641 | urlh.url, video_id, 'Sending final bookend', |
d24734da W |
1642 | query=hidden_data) |
1643 | ||
9e0e6adb C |
1644 | post_form(mvpd_confirm_page_res, 'Confirming Login') |
1645 | elif mso_id == 'Suddenlink': | |
1646 | # Suddenlink is similar to SlingTV in using a tab history count and a meta refresh, | |
1647 | # but they also do a dynmaic redirect using javascript that has to be followed as well | |
1648 | first_bookend_page, urlh = post_form( | |
1649 | provider_redirect_page_res, 'Pressing Continue...') | |
1650 | ||
1651 | hidden_data = self._hidden_inputs(first_bookend_page) | |
1652 | hidden_data['history_val'] = 1 | |
1653 | ||
1f1df125 | 1654 | provider_login_redirect_page_res = self._download_webpage_handle( |
3d2623a8 | 1655 | urlh.url, video_id, 'Sending First Bookend', |
9e0e6adb C |
1656 | query=hidden_data) |
1657 | ||
1f1df125 | 1658 | provider_login_redirect_page, urlh = provider_login_redirect_page_res |
9e0e6adb | 1659 | |
1f1df125 C |
1660 | # Some website partners seem to not have the extra ajaxurl redirect step, so we check if we already |
1661 | # have the login prompt or not | |
1662 | if 'id="password" type="password" name="password"' in provider_login_redirect_page: | |
1663 | provider_login_page_res = provider_login_redirect_page_res | |
1664 | else: | |
1665 | provider_tryauth_url = self._html_search_regex( | |
1666 | r'url:\s*[\'"]([^\'"]+)', provider_login_redirect_page, 'ajaxurl') | |
1667 | provider_tryauth_page = self._download_webpage( | |
1668 | provider_tryauth_url, video_id, 'Submitting TryAuth', | |
1669 | query=hidden_data) | |
9e0e6adb | 1670 | |
1f1df125 C |
1671 | provider_login_page_res = self._download_webpage_handle( |
1672 | f'https://authorize.suddenlink.net/saml/module.php/authSynacor/login.php?AuthState={provider_tryauth_page}', | |
1673 | video_id, 'Getting Login Page', | |
1674 | query=hidden_data) | |
9e0e6adb C |
1675 | |
1676 | provider_association_redirect, urlh = post_form( | |
1677 | provider_login_page_res, 'Logging in', { | |
1678 | mso_info['username_field']: username, | |
add96eb9 | 1679 | mso_info['password_field']: password, |
9e0e6adb C |
1680 | }) |
1681 | ||
1682 | provider_refresh_redirect_url = extract_redirect_url( | |
3d2623a8 | 1683 | provider_association_redirect, url=urlh.url) |
9e0e6adb C |
1684 | |
1685 | last_bookend_page, urlh = self._download_webpage_handle( | |
1686 | provider_refresh_redirect_url, video_id, | |
1687 | 'Downloading Auth Association Redirect Page') | |
1688 | ||
1689 | hidden_data = self._hidden_inputs(last_bookend_page) | |
1690 | hidden_data['history_val'] = 3 | |
1691 | ||
1692 | mvpd_confirm_page_res = self._download_webpage_handle( | |
3d2623a8 | 1693 | urlh.url, video_id, 'Sending Final Bookend', |
9e0e6adb C |
1694 | query=hidden_data) |
1695 | ||
d24734da | 1696 | post_form(mvpd_confirm_page_res, 'Confirming Login') |
46f60529 | 1697 | else: |
0c7a631b S |
1698 | # Some providers (e.g. DIRECTV NOW) have another meta refresh |
1699 | # based redirect that should be followed. | |
1700 | provider_redirect_page, urlh = provider_redirect_page_res | |
1701 | provider_refresh_redirect_url = extract_redirect_url( | |
3d2623a8 | 1702 | provider_redirect_page, url=urlh.url) |
0c7a631b S |
1703 | if provider_refresh_redirect_url: |
1704 | provider_redirect_page_res = self._download_webpage_handle( | |
1705 | provider_refresh_redirect_url, video_id, | |
1706 | 'Downloading Provider Redirect Page (meta refresh)') | |
46f60529 | 1707 | provider_login_page_res = post_form( |
0c7a631b | 1708 | provider_redirect_page_res, self._DOWNLOADING_LOGIN_PAGE) |
fee5f0c9 | 1709 | form_data = { |
46f60529 | 1710 | mso_info.get('username_field', 'username'): username, |
add96eb9 | 1711 | mso_info.get('password_field', 'password'): password, |
fee5f0c9 | 1712 | } |
0c0b78b2 | 1713 | if mso_id in ('Cablevision', 'AlticeOne'): |
fee5f0c9 J |
1714 | form_data['_eventId_proceed'] = '' |
1715 | mvpd_confirm_page_res = post_form(provider_login_page_res, 'Logging in', form_data) | |
46f60529 | 1716 | if mso_id != 'Rogers': |
1717 | post_form(mvpd_confirm_page_res, 'Confirming Login') | |
1b6712ab | 1718 | |
b2a2d913 | 1719 | try: |
1720 | session = self._download_webpage( | |
1721 | self._SERVICE_PROVIDER_TEMPLATE % 'session', video_id, | |
1722 | 'Retrieving Session', data=urlencode_postdata({ | |
1723 | '_method': 'GET', | |
1724 | 'requestor_id': requestor_id, | |
1725 | }), headers=mvpd_headers) | |
1726 | except ExtractorError as e: | |
3d2623a8 | 1727 | if not mso_id and isinstance(e.cause, HTTPError) and e.cause.status == 401: |
b2a2d913 | 1728 | raise_mvpd_required() |
1729 | raise | |
1b6712ab | 1730 | if '<pendingLogout' in session: |
9809740b | 1731 | self.cache.store(self._MVPD_CACHE, requestor_id, {}) |
1b6712ab RA |
1732 | count += 1 |
1733 | continue | |
1734 | authn_token = unescapeHTML(xml_text(session, 'authnToken')) | |
1735 | requestor_info['authn_token'] = authn_token | |
9809740b | 1736 | self.cache.store(self._MVPD_CACHE, requestor_id, requestor_info) |
1b6712ab RA |
1737 | |
1738 | authz_token = requestor_info.get(guid) | |
1739 | if authz_token and is_expired(authz_token, 'simpleTokenTTL'): | |
1740 | authz_token = None | |
1741 | if not authz_token: | |
1742 | authorize = self._download_webpage( | |
1743 | self._SERVICE_PROVIDER_TEMPLATE % 'authorize', video_id, | |
1744 | 'Retrieving Authorization Token', data=urlencode_postdata({ | |
1745 | 'resource_id': resource, | |
1746 | 'requestor_id': requestor_id, | |
1747 | 'authentication_token': authn_token, | |
1748 | 'mso_id': xml_text(authn_token, 'simpleTokenMsoID'), | |
1749 | 'userMeta': '1', | |
1750 | }), headers=mvpd_headers) | |
1751 | if '<pendingLogout' in authorize: | |
9809740b | 1752 | self.cache.store(self._MVPD_CACHE, requestor_id, {}) |
1b6712ab RA |
1753 | count += 1 |
1754 | continue | |
febfe1e2 S |
1755 | if '<error' in authorize: |
1756 | raise ExtractorError(xml_text(authorize, 'details'), expected=True) | |
1b6712ab RA |
1757 | authz_token = unescapeHTML(xml_text(authorize, 'authzToken')) |
1758 | requestor_info[guid] = authz_token | |
9809740b | 1759 | self.cache.store(self._MVPD_CACHE, requestor_id, requestor_info) |
1b6712ab RA |
1760 | |
1761 | mvpd_headers.update({ | |
1762 | 'ap_19': xml_text(authn_token, 'simpleSamlNameID'), | |
1763 | 'ap_23': xml_text(authn_token, 'simpleSamlSessionIndex'), | |
1764 | }) | |
1765 | ||
1766 | short_authorize = self._download_webpage( | |
1767 | self._SERVICE_PROVIDER_TEMPLATE % 'shortAuthorize', | |
1768 | video_id, 'Retrieving Media Token', data=urlencode_postdata({ | |
1769 | 'authz_token': authz_token, | |
1fd6e309 | 1770 | 'requestor_id': requestor_id, |
1b6712ab RA |
1771 | 'session_guid': xml_text(authn_token, 'simpleTokenAuthenticationGuid'), |
1772 | 'hashed_guid': 'false', | |
1fd6e309 | 1773 | }), headers=mvpd_headers) |
1b6712ab | 1774 | if '<pendingLogout' in short_authorize: |
9809740b | 1775 | self.cache.store(self._MVPD_CACHE, requestor_id, {}) |
1b6712ab RA |
1776 | count += 1 |
1777 | continue | |
1778 | return short_authorize |