-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent_script.js
740 lines (658 loc) · 21.6 KB
/
content_script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
// .tvpid フォーマット 参考: https://350ml.net/labo/iepg2.html
var SelectedArea = '';
var ServiceID = MakeServiceIdTbl(( function (){/*
/// BS https://www.yuhisa.com/tv/bs-list/
BSDT101 NHKBS
BSDT103 NHKBSプレミアム
BSDT141 BS日テレ
BSDT142 BS日テレ2
BSDT143 BS日テレ3
BSDT151 BS朝日
BSDT152 BS朝日2
BSDT153 BS朝日3
BSDT161 BS-TBS
BSDT162 BS-TBS2
BSDT163 BS-TBS3
BSDT171 BSジャパン BSテレ東
BSDT172 BSジャパン2
BSDT173 BSジャパン3
BSDT181 BSフジ
BSDT182 BSフジ・182
BSDT183 BSフジ・183
BSDT191 WOWOWプライム
BSDT192 WOWOWライブ
BSDT193 WOWOWシネマ
BSDT200 スター・チャンネル1
BSDT201 スター・チャンネル2
BSDT202 スター・チャンネル3
BSDT211 BS11
BSDT222 TwellV BS12 トゥエルビ
BSDT231 放送大学BS1
BSDT232 放送大学BS2
BSDT233 放送大学BS3
BSDT234 グリーンチャンネル
BSDT236 BSアニマックス
BSDT238 FOXbs238 FOXスポーツエンタ
BSDT241 BS スカパー!
BSDT242 J SPORTS 1
BSDT243 J SPORTS 2
BSDT244 J SPORTS 3
BSDT245 J SPORTS 4
BSDT251 BS釣りビジョン
BSDT252 IMAGICA BS シネフィルWOWOW WOWOWプラス
BSDT255 BS日本映画専門Ch
BSDT256 ディズニーチャンネル
BSDT258 ディーライフ
BSDT260 BS松竹東急
BSDT263 BSJapanext
BSDT265 BSよしもと
// 難視聴対策 {
//BSDT291 NHK総合・東京
//BSDT292 NHKEテレ東京
//BSDT294 日テレ
//BSDT295 テレビ朝日
//BSDT296 TBS
//BSDT297 テレビ東京
//BSDT298 フジテレビ
// }
BSDT531 放送大学ラジオ
BSDT700 NHKデータ1
BSDT701 NHKデータ2
BSDT707 707チャンネル
BSDT755 BS朝日データ
BSDT768 Gガイドサービス
BSDT778 BSジャパン778
BSDT791 WOWOW navi
BSDT800 スター・チャンネル データ800
BSDT840 e2ガイド
BSDT841 BS スカパー!データ
BSDT910 WNI・910
BSDT929 Dpaダウンロード
CSDT218 東映チャンネル
CSDT219 衛星劇場
CSDT223 チャンネルNECO
CSDT227 ザ・シネマ
CSDT240 ムービープラス
CSDT250 スカイA
CSDT254 GAORA
CSDT257 日テレG+ HD
CSDT262 ゴルフネットワーク
CSDT290 TAKARAZUKA SKY STAGE
CSDT292 時代劇専門チャンネル
CSDT293 ファミリー劇場HD
CSDT294 ホームドラマチャンネル
CSDT295 MONDO TV
CSDT296 TBSチャンネル1
CSDT297 TBSチャンネル2
CSDT298 テレ朝チャンネル1
CSDT299 テレ朝チャンネル2
CSDT300 日テレプラス
CSDT301 エンタメ~テレHD☆シネドラバラエティ エンタメ〜テレ☆シネドラバラエティ
CSDT305 チャンネル銀河
CSDT307 フジテレビONE
CSDT308 フジテレビTWO
CSDT309 フジテレビNEXT
CSDT310 Super!drama TV HD スーパー!ドラマTV
CSDT311 AXN アクションチャンネル
CSDT312 FOX Dlife
CSDT314 女性チャンネル♪LaLa TV
CSDT316 AXNミステリー
CSDT317 KBS World
CSDT318 Mnet
CSDT321 100%ヒッツ!スペースシャワーTVプラス
CSDT322 スペースシャワーTV
CSDT323 MTV
CSDT324 ミュージック・エア
CSDT325 MUSIC ON! TV(エムオン!)HD
CSDT329 歌謡ポップスチャンネル
CSDT330 キッズステーションHD
CSDT331 カートゥーンネットワーク
CSDT333 アニメシアターX(AT-X)
CSDT339 ディズニージュニア
CSDT340 ディスカバリーチャンネル
CSDT341 アニマルプラネット
CSDT342 ヒストリーチャンネル
CSDT343 ナショナル ジオグラフィック
CSDT349 日テレNEWS24
CSDT351 TBS NEWS
CSDT353 BBCワールドニュース
CSDT354 CNNj
CSDT363 囲碁・将棋チャンネル
CSDT800 スカサカ! スポーツライブ+
CSDT801 スカチャン 1
CSDT821 J SPORTS 1 (4K)
CSDT822 J SPORTS 2 (4K)
CSDT823 J SPORTS 3 (4K)
CSDT824 J SPORTS 4 (4K)
CSDT880 日本映画+時代劇 4K
CSDT881 スターチャンネル 4K
CSDT882 スカチャン1 4K
CSDT883 スカチャン2 4K
// 地デジ
// http://soranikakaruhashi.blog.fc2.com/blog-entry-71.html
DFS00400 NHK総合・東京
DFS00408 NHK教育・東京
DFS00410 日本テレビ 日テレ
DFS00418 TBS
DFS00420 フジテレビジョン フジテレビ
DFS00428 テレビ朝日
DFS00430 テレビ東京
DFS00440 放送大学
DFS00808 NHK教育・大阪
DFS00810 MBS毎日放送
DFS00818 ABCテレビ
DFS00820 関西テレビ
DFS00828 読売テレビ よみうりテレビ
DFS00C08 NHK教育・名古屋
DFS00C10 東海テレビ
DFS00C18 CBC
DFS00C20 メ~テレ
DFS00C28 中京テレビ
// どの地域で有効なのかわからない.とりあえず外す {
//DFS01010 HBC北海道放送
//DFS01018 STV札幌テレビ
//DFS01020 HTB北海道テレビ
//DFS01028 UHB
//DFS01030 TVH
// }
DFS01410 RNC西日本テレビ
DFS01418 KSB瀬戸内海放送
DFS01420 RSKテレビ
DFS01428 TSCテレビせとうち
DFS01430 OHKテレビ
DFS01810 山陰中央テレビ
DFS01818 BSSテレビ
DFS01820 日本海テレビ
DFS02800 NHK総合・札幌
DFS02808 NHK教育・札幌
DFS02810 HBC札幌 HBC北海道放送・札幌
DFS02818 STV札幌 札幌テレビ・札幌
DFS02820 HTB札幌
DFS02828 UHB札幌 北海道文化放送・札幌
DFS02830 TVH札幌
DFS02C00 NHK総合・函館
DFS02C08 NHK教育・函館
DFS02C10 HBC函館 HBC北海道放送・函館
DFS02C18 STV函館 札幌テレビ・函館
DFS02C20 HTB函館
DFS02C28 UHB函館 北海道文化放送・函館
DFS02C30 TVH函館
DFS03000 NHK総合・旭川
DFS03008 NHK教育・旭川
DFS03010 HBC旭川 HBC北海道放送・旭川
DFS03018 STV旭川 札幌テレビ・旭川
DFS03020 HTB旭川
DFS03028 UHB旭川 北海道文化放送・旭川
DFS03030 TVH旭川
DFS03400 NHK総合・帯広
DFS03408 NHK教育・帯広
DFS03410 HBC帯広 HBC北海道放送・帯広
DFS03418 STV帯広 札幌テレビ・帯広
DFS03420 HTB帯広
DFS03428 UHB帯広 北海道文化放送・帯広
DFS03430 TVH帯広
DFS03800 NHK総合・釧路
DFS03808 NHK教育・釧路
DFS03810 HBC釧路 HBC北海道放送・釧路
DFS03818 STV釧路 札幌テレビ・釧路
DFS03820 HTB釧路
DFS03828 UHB釧路 北海道文化放送・釧路
DFS03830 TVH釧路
DFS03C00 NHK総合・北見
DFS03C08 NHK教育・北見
DFS03C10 HBC北見 HBC北海道放送・北見
DFS03C18 STV北見 札幌テレビ・北見
DFS03C20 HTB北見
DFS03C28 UHB北見 北海道文化放送・北見
DFS03C30 TVH北見
DFS04000 NHK総合・室蘭
DFS04008 NHK教育・室蘭
DFS04010 HBC室蘭 HBC北海道放送・室蘭
DFS04018 STV室蘭 札幌テレビ・室蘭
DFS04020 HTB室蘭
DFS04028 UHB室蘭 北海道文化放送・室蘭
DFS04030 TVH室蘭
DFS04400 NHK総合・仙台
DFS04408 NHK教育・仙台
DFS04410 TBCテレビ
DFS04418 仙台放送
DFS04420 ミヤギテレビ
DFS04428 KHB東日本放送
DFS04800 NHK総合・秋田
DFS04808 NHK教育・秋田
DFS04810 ABS秋田放送
DFS04818 AKT秋田テレビ
DFS04820 AAB秋田朝日放送
DFS04C00 NHK総合・山形
DFS04C08 NHK教育・山形
DFS04C10 YBC山形放送
DFS04C18 YTS山形テレビ
DFS04C20 テレビユー山形 TUY
DFS04C28 さくらんぼテレビ
DFS05000 NHK総合・盛岡
DFS05008 NHK教育・盛岡
DFS05010 IBCテレビ
DFS05018 テレビ岩手
DFS05020 めんこいテレビ
DFS05028 岩手朝日テレビ
DFS05400 NHK総合・福島
DFS05408 NHK教育・福島
DFS05410 福島テレビ
DFS05418 福島中央テレビ
DFS05420 KFB福島放送
DFS05428 テレビユー福島
DFS05800 NHK総合・青森
DFS05808 NHK教育・青森
DFS05810 RAB青森放送
DFS05818 ATV青森テレビ
DFS05820 青森朝日放送
DFS05C38 TOKYO MX1
DFS05C3A TOKYO MX2
DFS06038 tvk
DFS06400 NHK総合・前橋
DFS06438 群馬テレビ
DFS06800 NHK総合・水戸
DFS06C38 チバテレビ
DFS07000 NHK総合・宇都宮
DFS07038 とちぎテレビ
DFS07438 テレ玉
DFS07800 NHK総合・長野
DFS07808 NHK教育・長野
DFS07810 TSB テレビ信州
DFS07818 abn長野朝日放送
DFS07820 SBC信越放送
DFS07828 NBS長野放送
DFS07C00 NHK総合・新潟
DFS07C08 NHK教育・新潟
DFS07C10 BSN
DFS07C18 NST 新潟総合テレビ
DFS07C20 TeNYテレビ新潟
DFS07C28 新潟テレビ21
DFS08000 NHK総合・甲府
DFS08008 NHK教育・甲府
DFS08010 YBS山梨放送
DFS08018 UTY
DFS08400 NHK総合・名古屋
DFS08430 テレビ愛知
DFS08800 NHK総合・金沢
DFS08808 NHK教育・金沢
DFS08810 テレビ金沢
DFS08818 HAB 北陸朝日放送
DFS08820 MRO
DFS08828 石川テレビ
DFS08C00 NHK総合・静岡
DFS08C08 NHK教育・静岡
DFS08C10 SBS
DFS08C18 テレビ静岡
DFS08C20 Daiichi-TV だいいちテレビ
DFS08C28 静岡朝日テレビ
DFS09000 NHK総合・福井
DFS09008 NHK教育・福井
DFS09010 FBCテレビ 福井放送
DFS09018 福井テレビ
DFS09400 NHK総合・富山
DFS09408 NHK教育・富山
DFS09410 KNB北日本放送 KNBTV
DFS09418 BBT富山テレビ
DFS09420 チューリップテレビ
DFS09800 NHK総合・津
DFS09830 三重テレビ
DFS09C00 NHK総合・岐阜
DFS09C30 ギフチャン ぎふチャン
DFS0A000 NHK総合・大阪
DFS0A030 テレビ大阪
DFS0A400 NHK総合・京都
DFS0A430 KBS京都
DFS0A800 NHK総合・神戸
DFS0A830 サンテレビ
DFS0AC00 NHK総合・和歌山
DFS0AC30 WTV テレビ和歌山
DFS0B000 NHK総合・奈良
DFS0B030 奈良テレビ
DFS0B400 NHK総合・大津
DFS0B430 BBCびわ湖放送
DFS0B800 NHK総合・広島
DFS0B808 NHK教育・広島
DFS0B810 RCCテレビ
DFS0B818 広島テレビ
DFS0B820 広島ホームテレビ
DFS0B828 TSS テレビ新広島
DFS0BC00 NHK総合・岡山
DFS0BC08 NHK教育・岡山
DFS0C000 NHK総合・松江
DFS0C008 NHK教育・松江
DFS0C400 NHK総合・鳥取
DFS0C408 NHK教育・鳥取
DFS0C800 NHK総合・山口
DFS0C808 NHK教育・山口
DFS0C810 KRY山口放送 山口放送1
DFS0C818 tysテレビ山口
DFS0C820 yab山口朝日
DFS0CC00 NHK総合・松山
DFS0CC08 NHK教育・松山
DFS0CC10 南海放送
DFS0CC18 愛媛朝日
DFS0CC20 あいテレビ
DFS0CC28 テレビ愛媛
DFS0D000 NHK総合・高松
DFS0D008 NHK教育・高松
DFS0D400 NHK総合・徳島
DFS0D408 NHK教育・徳島
DFS0D410 四国放送
DFS0D800 NHK総合・高知
DFS0D808 NHK教育・高知
DFS0D810 高知放送
DFS0D818 テレビ高知
DFS0D820 さんさんテレビ
DFS0DC00 NHK総合・北九州
DFS0DC00 NHK総合・福岡
DFS0DC08 NHK教育・北九州
DFS0DC08 NHK教育・福岡
DFS0DC10 KBC九州朝日放送 KBCTV
DFS0DC18 RKB毎日放送
DFS0DC20 FBS福岡放送
DFS0DC28 TVQ九州放送
DFS0DC30 TNCテレビ西日本
DFS0E000 NHK総合・熊本
DFS0E008 NHK教育・熊本
DFS0E010 RKK熊本放送
DFS0E018 TKUテレビ熊本
DFS0E020 KKTくまもと県民
DFS0E028 KAB熊本朝日放送
DFS0E400 NHK総合・長崎
DFS0E408 NHK教育・長崎
DFS0E410 NBC長崎放送
DFS0E418 KTNテレビ長崎
DFS0E420 NCC長崎文化放送
DFS0E428 NIB長崎国際テレビ
DFS0E800 NHK総合・鹿児島
DFS0E808 NHK教育・鹿児島
DFS0E810 MBC南日本放送
DFS0E818 KTS鹿児島テレビ
DFS0E820 KKB鹿児島放送
DFS0E828 KYT鹿児島読売TV 鹿児島讀賣テレビ
DFS0EC00 NHK総合・宮崎
DFS0EC08 NHK教育・宮崎
DFS0EC10 MRT宮崎放送
DFS0EC18 UMKテレビ宮崎
DFS0F000 NHK総合・大分
DFS0F008 NHK教育・大分
DFS0F010 OBS大分放送
DFS0F018 TOSテレビ大分
DFS0F020 OAB大分朝日放送
DFS0F400 NHK総合・佐賀
DFS0F408 NHK教育・佐賀
DFS0F410 STSサガテレビ
DFS0F800 NHK総合・那覇 NHK総合・沖縄
DFS0F808 NHK教育・那覇 NHK教育・沖縄
DFS0F810 RBCテレビ
DFS0F820 QAB琉球朝日放送
DFS0F838 沖縄テレビ(OTV)
*/}).toString());
//console.log( Object.keys( ServiceID ).join( " " ));
// iEPG オブジェクト /////////////////////////////////////////////////////////
function Iepg(){
this[ "Content-type" ] = "application/x-tv-program-digital-info; charset=shift_jis";
this.version = 2;
this.station = '';
this[ "station-name" ] = '';
this.year = 0;
this.month = 0;
this.date = 0;
this.start = '';
this.end = '';
}
// 放送局のパース
Iepg.prototype.SetStation = function( Station ){
// Station ID 取得
this[ 'station-name' ] = Station
.replace( /^\s+/, '' )
.replace( /\s*\(Ch\.\d+\)\s*$/, '' )
.replace( /\s+$/, '' );
var Id = GetServiceID( this[ 'station-name' ]);
if( Id === undefined ){
this.ErrorMsg = "「" + this[ 'station-name' ] + "」の Service ID が不明です";
}
this.station = Id;
}
// prog-id 下 12 桁から開始日時を設定
Iepg.prototype.SetStart = function( ProgID ){
if( ProgID ) this[ 'program-id' ] = ProgID;
if( this[ 'program-id' ].match( /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/ )){
this.year = RegExp.$1;
this.month = RegExp.$2;
this.date = RegExp.$3;
this.start = RegExp.$4 + ':' + RegExp.$5;
}else{
this.ErrorMsg = "program-id から開始日時を認識できません";
}
}
// 終了時刻設定
Iepg.prototype.SetEnd = function( Time ){
if( Time.match( /\d+:\d+.*?(\d+:\d+)/ )){
this.end = RegExp.$1.length < 5 ? '0' + RegExp.$1 : RegExp.$1;
}else{
this.ErrorMsg = "終了時刻を認識できません";
}
}
Iepg.prototype.GetFile = function(){
var Ret = '';
for( var key in this ){
if( typeof( this[ key ] ) != 'function' ) Ret += key + ": " + this[ key ] + "\n";
}
//console.log( Ret );
// SJIS に変換
return new Uint8Array( Encoding.convert(
Encoding.stringToCode( Ret ),
{ from: 'UNICODE', to: 'SJIS' }
));
}
// iEPG リンク作成
Iepg.prototype.CreateLink = function(){
var Element;
if( this.ErrorMsg ){
var Element = document.createElement( 'span' );
console.log( "ErrorMsg:" + this.ErrorMsg );
Element.textContent = "★Error: " + this.ErrorMsg;
Element.setAttribute( 'style', "color:white; background-color: red" );
}else{
var Element = document.createElement( 'a' );
Element.textContent = 'iEPG';
Element.setAttribute( 'download', 'iepg.tvpid' );
Element.setAttribute( 'href', window.URL.createObjectURL( new Blob( [ this.GetFile()], { type: 'text/plain' })));
Element.setAttribute( 'downloadurl', [ 'text/plain', Element.download, Element.href ].join( ':' ));
Element.setAttribute( 'title', "iEPG データをダウンロード" );
Element.setAttribute( 'style', "color:white; background-color: #056BCD" );
}
return Element;
}
// 番組検索ページ ////////////////////////////////////////////////////////////
function OverwriteSearchList(){
var ProgElements = document.getElementsByClassName( 'utileList' ); // utileList bl も対象
GetArea();
for( var i = 0; i < ProgElements.length; ++i ){
var Prog = new Iepg();
var AElements = ProgElements[ i ].getElementsByTagName( 'a' );
// 番組タイトル
Prog[ 'program-title' ] = AElements[ 0 ].textContent;
// 適当にユニークそうな数字を ID に
if( AElements[ 0 ].href.match( /(\d+)/ )){
Prog.SetStart( RegExp.$1 );
}
// 放送時間・CH
var DateTimeCh;
if(
( DateTimeCh = ProgElements[ i ].getElementsByClassName( "utileListProperty" )[ 0 ] ) &&
DateTimeCh.textContent.match( /\d:\d.*?\n(.*)/ )
){
Prog.SetStation( RegExp.$1 );
Prog.SetEnd( DateTimeCh.textContent );
}else{
Prog.ErrorMsg = "HTML フォーマットを認識できません";
}
// iEPG ボタン追加
ProgElements[ i ].getElementsByClassName( 'utileListIcon' )[ 0 ].appendChild( Prog.CreateLink());
}
}
// 1番組ページ ///////////////////////////////////////////////////////////////
function OverwriteOneProg(){
var Prog = new Iepg();
GetArea();
var ProgElement = document.getElementsByClassName( "contBlock utileSetting" );
var Element = ProgElement[ 0 ].getElementsByTagName( "dd" );
for( var i = 0; i < Element.length; ++i ){
console.log( i + ":" + Element[ i ].textContent );
}
// 適当にユニークそうな数字を ID に
if(( "" + window.location ).match( /(\d+)\.action/ )){
Prog.SetStart( RegExp.$1 );
}
Prog[ 'program-title' ] = ProgElement[ 0 ].getElementsByClassName( "basicContTitle" )[ 0 ].textContent;
Prog.SetStation( Element[ 1 ].textContent );
Prog.SetEnd( ProgElement[ 0 ].textContent );
console.log( Prog );
// iEPG ボタン追加
Element = ProgElement[ 0 ].getElementsByClassName( 'basicTxt' );
if( Element.length >= 1 ){
Element[ 0 ].appendChild( Prog.CreateLink());
}else{
dd = document.createElement( 'dd' );
Element = ProgElement[ 0 ].getElementsByClassName( 'scheduleinfodetail' )
Element[ 0 ].appendChild( dd );
dd.appendChild( Prog.CreateLink());
console.log("len:" + Element[0].length)
}
}
// 番組表ページ /////////////////////////////////////////////////////////
function OverwriteProgTable(){
var Doc = document.getElementById( 'chartColumn' );
if( Doc == null ){
console.log( "番組表なし" );
return;
}
GetArea();
Doc = Doc.getElementsByTagName( "div" );
var Station;
var PrevProgTag;
for( var i = 0; i < Doc.length; ++i ){
// 放送局
if( Doc[ i ].getAttribute( "class" ) == "cell-station cell-top" ){
Station = Doc[ i ].title;
console.log( "Station:" + Station );
PrevProgTag = undefined;
}
// 番組
else if(
Doc[ i ].getAttribute( "class" ).match( /^cell-schedule\b/ )){
var ProgName =
Doc[ i ].getElementsByClassName( "schedule-title" )[ 0 ] ||
Doc[ i ].getElementsByClassName( "schedule-titleC" )[ 0 ];
if( ProgName !== undefined ){
console.log( "ProgName:" + ProgName.textContent );
// id
Doc[ i ].getAttribute( "id" ).match( /(\d+)/ );
var Id = RegExp.$1;
// 前の番組の終了時刻が決定
if( PrevProgTag && Id.match( /(\d{2})(\d{2})$/ )){
Prog.end = RegExp.$1 + ':' + RegExp.$2;
// リンク生成
PrevProgTag.appendChild( document.createElement( 'br' ));
PrevProgTag.appendChild( Prog.CreateLink());
}
// iEPG データ生成
var Prog = new Iepg();
// 番組タイトル
Prog[ 'program-title' ] = ProgName.textContent;
Prog.SetStation( Station );
Prog.SetStart( Id );
// iEPG ボタン挿入場所
PrevProgTag = Doc[ i ].getElementsByClassName( "schedule-link" )[ 0 ];
}
}
}
}
// 地域取得 //////////////////////////////////////////////////////////////////
function GetArea(){
var Select = document.getElementById( "area-selector" );
SelectedArea = Select.options[ Select.selectedIndex ].text;
console.log( "Selected Area:" + SelectedArea );
}
/////////////////////////////////////////////////////////////////////////
// 放送局名→サービス ID テーブル生成
function MakeServiceIdTbl( str ){
var List = str.split( /\n+/ );
var Tbl = {};
for( var i = 0; i < List.length; ++i ){
if( List[ i ].match( /^\w/ )){
var tmp = List[ i ].split( /\t+/ );
for( j = 1; j < tmp.length; ++j ){
var StationName = RegularizeStationName( tmp[ j ]);
if( Tbl[ StationName ] === undefined ){
Tbl[ StationName ] = tmp[ 0 ];
}else{
console.warn( "放送局名重複: " + StationName );
}
}
}
}
return Tbl;
}
// 放送局名正規化
function RegularizeStationName( Name ){
Name = Name
.replace( /[ ]\S+・\S+$/, '' )
.replace( /[\s ・]/g, '' )
.replace( /チャンネル/g, "CH" )
.replace( /テレビ/g, "TV" )
.replace(
/[A-Za-z0-9!”#$%&’()*+,-./:;<=>?@[¥]^_‘{|} ̄]/g,
function( s ){
return String.fromCharCode( s.charCodeAt( 0 ) - 0xFEE0 );
}
)
.toUpperCase()
.replace( /TV放送/, "TV" )
.replace( /NHK総合\d+/, "NHK総合" )
.replace( /NHK(?:Eテレ|教育)\d*/, "NHKEテレ" );
return Name;
}
// ServiceID 取得
function GetServiceID( Name ){
var RegularizedName = RegularizeStationName( Name );
// 北海道スペシャル
if(
RegularizedName.match( /HBC|札幌TV|HTB|TVH|北海道文化放送/ ) &&
SelectedArea.match( /北海道((.*))/ )
){
RegularizedName += RegExp.$1;
}
var Id = ServiceID[ RegularizedName ];
console.log( Name + ":" + RegularizedName + ":" + Id );
if( Id ) return Id; // テーブルに載っていたら return
// ダイレクトマッチしないので,一部検索をする
for( Key in ServiceID ){
if(
Key.indexOf( RegularizedName ) >= 0 ||
RegularizedName.indexOf( Key ) >= 0
){
console.log( "match:" + RegularizedName + ":" + Key );
if( Id ){
// 2つ以上にマッチしたので,undefined
return undefined;
}
Id = ServiceID[ Key ];
}
}
return Id;
}
// メイン処理起動 ////////////////////////////////////////////////////////////
if(( '' + window.location ).indexOf( "/schedule/" ) >= 0 ){
OverwriteOneProg();
}else if(
( '' + window.location ).indexOf( "/schedulesBySearch." ) >= 0 ||
( '' + window.location ).indexOf( "/schedulesByFilter." ) >= 0
){
OverwriteSearchList();
}else{
OverwriteProgTable();
}