karing.jp iEPG service

このサイトはテレビ王国のiEPGサービス終了にともない、それを補完するために個人的に運用されています。このiEPGサービスは「Version 1」のみを扱い、検証を目的とした実験的な公開も行なっています。このiEPGサービスは、地上デジタル放送およびBS放送のEPGデータをiEPGデータに変換しているため、また、テレビ王国との運用環境の違いにより、テレビ王国で運用されていたiEPGサービスとは若干異なる部分があります。

EPG(Electronic program guide)はかなり広い概念ですが、ここでは地上デジタル放送、BS放送などの放送波に含まれる番組情報およびその仕様等のことを意味しています

2018-12-30 よしのぶ  
e-mail:yoshino@rita.karing.jp 

1. 対応視聴地域
2. 当iEPGサーバへのアクセス法
3. EPGとiEPGの仕様上の差異について
4. テレビ王国のiEPGとの差異について
5. まとめ
6. 免責
7. 技術情報


1. 対応視聴地域
EPGデータの取得には電波の受信という物理的制約があるため、現在、当サイトの対応視聴地域は私が個人的に受信環境を持つ山形、東京、BSになります。また、受信環境の状態により各放送局のデータの一部または全部が欠損する場合があります。この場合、欠損部分に関しては番組表およびiEPGサービスが利用できません。


2. 当iEPGサーバへのアクセス法
URL http://malva.karing.jp/iepg.tvpi?id=012345012301010101
各番組のidは最初の6文字(012345)が放送局の個別ID、その後に番組の開始時刻である西暦月日時分の12文字(012301010101)が続き、合計18字の数字で表現されます。

iEPGサービスへのリンクを持つ番組表もあります。
http://malva.karing.jp/iepg/epg.00.0.html
http://malva.karing.jp/iepg/week.012345.html
epg.00.0.htmlは、00が地域コード、次の0が日付を表し、0は当日、1は1日後(明日)、以下7まで続きます。week.012345.htmlは、012345は放送局の個別IDでその放送局の1週間の番組表になります。これらの番組表では番組毎のリンクがiEPGになっています。また、マウスを番組に合わせるとその番組の詳細情報が表示されます。

これらの番組表は毎朝6時頃に更新されます。

現実的には番組表とiEPGが連携しないとサービスとして完成しないと思われますが、個人的にiEPGに正式対応した機器を所持していないため、実際どのようなサービスが展開されていたのか未知の部分が多く、それらの対応に関しては今後の課題としています。

当サイトの場合、過去の番組表やiEPGデータにもアクセスは可能ですが、過去データの消去やその他の処理は管理上の問題として扱い、それらに関し予告や公表は行わず、一切の保証はありません。過去のiEPGデータの取得は過去の日付で指定するだけで通常通り可能です。要求した過去のデータが存在しなければエラーになります。番組表については、http://malva.karing.jp/iepg/pref.00/epg.YYYYmmdd.w.htmlでアクセスできます。pref.00の00は地域コード、YYYYmmddはその番組表の公開日(西暦月日)で、wはその日を0として以後7日間の番組表であることを表しています。また、http://malva.karing.jp/iepg/pref.00/week.YYYYmmddHHMM.012345.htmlでは、時刻YYYYmmddHHMM(西暦月日時分)に作成されたID012345を持つ放送局の8日間の番組表であることを表しています。


3. EPGとiEPGの仕様上の差異について
当サイトのiEPGデータはEPGデータを可能な限りそのまま変換したものです。iEPGはソニーの独自規格であり、その名称の印象とは異なり、EPGを拡張したものでも簡素化したものでもありません。よって、iEPGとEPGには仕様上の差異が存在します。なお、ここで扱うiEPGは全てVersion 1です。

・時間の単位がEPGでは秒単位、iEPGでは分単位になります。テレビ王国でどう対応していたのかはわかりませんが、当サイトでは分未満は切り捨てにしています。元データであるEPGの開始時刻等が秒単位で設定されている場合には開始時刻等が1分弱早まることになります。

・EPGでは文字コードはUTF-8ですが、テレビ王国のiEPGはShift-JISであり、文字コード変換の過程で文字化けする可能性があります。iEPGには文字コードの明示的な指定項目があるのでそれをShift-JISからUTF-8に変更する対応も考えられますが、現段階ではテレビ王国の仕様に準拠します。

・各番組を分類するジャンルが現行のEPGでは9通りしかなく、subgenreも設定されているiEPGとはジャンルの対応に大きな齟齬が生じています。単純にはジャンル分けが粗くなるという問題ですが、実際はジャンルの仕様上の問題以前に、EPGではジャンル分け自体が機能していない放送局(特にBS)が多いという運用上の問題こそが最大の問題です。なお、当サイトのiEPGのsubgenreは、EPGには対応する値がないので空文字列になっています。

・EPGとテレビ王国iEPGの番組情報(詳細な文字情報)は異なります。同じ場合もありますが、同異の差が何に起因するのかは不明です。

・EPGでは放送波からデータを取り出すという特性上、相互通信によるエラー補正などの機能はなく、電波状況により、一部または全部の番組情報を取りこぼすことがあります。ネット上で完結するiEPGよりは信頼性で劣ります。全部の情報が欠損した場合にはそれが何らかのエラーであることはすぐわかりますが、一部欠損した場合には、それが一部データの欠損なのか放送休止中で番組自体が存在しないのかを判別する確実な方法はありません。当サイトの番組表では「unknown program」と表示されている状態がそれに該当します。深夜であれば放送休止中、そうでなければ一部データの欠損と推測できますが、当サイトの番組表ではその推測で確定することは避けています。この場合、iEPGもエラーになります。

・データ通信の信頼性で劣るEPGですが、EPGには一次データとしての即時性があります。もっとも、iEPGもやる気になればEPGに即座に追随することぐらいできるのではないかと思いますが、実際にはそうなっていません。多くの録画機器は録画を開始する数分前くらいにEPGデータを確認し、開始時刻の確認後、録画を開始します。このように個別の録画機器では実際の録画に合わせてEPGデータの確認を行うだけで番組時間の変更に対応できますが、不特定多数に向けたサービスであるiEPGが番組時間の変更に対応するには、随時、元データの確認を要します。もしくは、番組情報の変更に際し即座に情報提供を受けるような仕組みが必要です。しかし、テレビ王国のiEPGではそのような対応をしておらず、一日毎に番組情報を更新するのみとなっています。なお、当サイトのiEPGはEPGデータを録画サーバの余剰リソースによって取得しているため随時EPGデータを確認、更新することは困難です。そのため、当サイトのiEPGの更新も1日1回(毎朝6時頃、更新)となっています。

放送番組を受信できる録画できるということはEPGデータも取得できるということであり、本来、現在のテレビや録画機器にiEPGは不要なはずで、iEPGが廃れたのも当然と言えるのでしょう。当サイトがiEPGに対応しているのはアナログ放送の時代から複数のビデオサーバを運用しており、その番組情報はiEPGに依存していたためで、デジタル放送に移行しても互換性の維持を優先したためです。また、個人運用なので複数のビデオサーバが個別に番組情報を持つよりiEPGとして一元管理できた方が何かと便利という考え方です。


4. テレビ王国のiEPGとの差異について
当サイトのiEPGと本家テレビ王国のiEPGには若干の差異があります。当サイトのiEPGは基本的にはテレビ王国の拡張になっていますが、互換性に問題が出た場合には修正することも予想されるので、下記の差異は後に変更される可能性があります。

・当サイトのiEPGはVersion 1のみです。Version 2(iEPG Degital, iEPG 1seg)には対応していません。Version 2では番組毎にユニークIDを設定する必要があり、無数にある番組のユニークIDを個人で管理するのは不可能というのがその最大の理由です。

・iEPGデータの取得に関し、エラーが生じた場合には、テレビ王国iEPGのエラー出力はテレビ王国全体で用いられている汎用のhtmlページ(sorry_notfound.html)となります。iEPGのContent-typeはapplication/x-tv-program-infoですが、エラー時にはtext/htmlで返すという変則的な仕様になっています。これに倣い、当サイトのiEPGでエラーが生じた場合にもhtmlファイルを返します。ただし、本家と同一のhtmlファイルではなく、エラーの状況を解析するための諸数値を含んだ独自のものとなっています。また、テレビ王国ではブラウザなどでエラーが生じるとエラーページへと遷移させられますが、当サイトでは現状を維持します。

・テレビ王国のiEPGで番組情報を取得するためにはその番組の正確な開始時刻でリクエストしないとエラーになりますが、当サイトのiEPGではその時間に放送中の番組情報を返します。放送中の番組を返すことは技術的にも何ら難しいことはなく、利便性合理性の上でも妥当に思えるものの、敢えてテレビ王国がそのような対応をしていないのには何か深い理由があると推測されますので、これは要注意の仕様変更です。

・テレビ王国のiEPGではUser Agentによるアクセス制限があります。通常のブラウザでアクセスする場合には問題にならないと思いますが、多くの場合、iEPGを利用するのは非対話的で簡易なユーティリティ(wgetなど)で、この場合、適切なUser Agentで偽装しないとエラーになります。このエラーは前述したsorry_notfound.htmlではなく、障害を示すsorry.htmlで返されます。当サイトにはこのようなアクセス制限はありません。

・iEPGで返される放送局名とテレビ王国の番組表に表示されている放送局名は必ずしも一致しません。この放送局名の扱いに関して当サイトはテレビ王国と同一の対応をしています。また、テレビ王国の番組表ではBSのいくつかの放送局でiEPGのリンクがありません。ただし、リンクがなくともiEPGデータの取得は可能であり、この場合には、原因は不明ですが、iEPGデータの放送局名が空文字列になっています。これらに関し、当サイトの番組表ではすべての放送局の全番組にiEPGのリンクを設けている以外はテレビ王国の仕様に準じています(つまり、iEPGデータでいくつかの放送局名が表示されません)。


5. まとめ
テレビ放送は完全にデジタルへと移行し、EPGが標準装備となった今、iEPGは過去の遺物となりました。もっとも、EPGデータのデータとしての有用性はあいかわらず酷いもので各放送局のEPGに対する冷たい態度がよくわかります。放送局が自己の商品である番組の情報を他者に預け、勝手に評価批評される状況は極力避けたいと考えるのは企業本能としては理解できます。一般的に「まとめサイト」は企業側の利益に相反する場合が多く、番組の「まとめサイト」であるiEPGもまた同じ危険をはらみます。その元凶にもなりえるEPGに企業側が消極的なのは当然で、放送局にとって番組情報は自己のサイトで独占的に扱うのが理想なのでしょう。

しかし、だからこそ一種の「まとめサイト」であるiEPGには意味があるわけです。一方通行で流される情報や情報の独占に対する抵抗、そして放送波では成し得ない相互通信による付加価値の創造、iEPGには夢がありました。もっとも、現実的にはテレビ王国は企業側の存在でしかありえず、それはまさに夢想でしかなかったわけですが…。

ただ、そこまでは仕方がないとして、iEPGもVersion 2では番組IDというEPGが見て見ぬふりをしているところまで進んでおり、消えるのがもったいないと思わせるぐらいの結末にはなりました。EPGも少しは見習ってほしいものですが、期待すべくもないのでしょう。新幹線は技術以上にその運用こそが素晴らしいと言われますが、4K8Kで騒いでいるだけの放送界にも少しはマネしてほしいものです。いずれにせよ、テレビ放送というメディアの限界が垣間見える昨今、その行く末をぼんやり眺めながらできるだけ長く、このiEPGサイトを維持して行きたいと思っております。


6. 免責
当サイトのiEPGサービスでは、EPGおよびiEPGの仕様、データ等についてはパブリックドメインとして扱っています。ただし、この方針は、これらの仕様やデータ等はパブリックドメインである、あるべきであると主張しているわけではありません。当サイトは何人の利益も侵害しない運用を目指しています。

また、当サイトのiEPGサービスは利用、複製等も自由ですが、それらによって生じた損害、障害等については何ら責任を負いません。


7. 技術情報
当サイトのiEPGサービスは、Linux上のWebサーバ(apache)により運用されています。このiEPGサーバは受信環境を有しておらず、EPGデータを山形および東京に設置されたビデオサーバに依存しています。各ビデオサーバはそれぞれ放送波からEPGデータを取得、xmlファイルを生成し、それを共有領域に書き込みます。iEPGサーバは共有領域に書き込まれたxmlファイルのEPGデータを参照し、すべての処理を行ないます。このEPGデータの更新は、iEPGサーバが各ビデオサーバにCGIリクエストを送ることにより実行され、更新終了後、番組表が新規作成されます。iEPGサービスはxmlファイルが更新されると直ちにその更新が有効になります。この更新は毎朝6時頃に実行されます。

以下、実際に使用されているCGIスクリプト、ユーティリティツールです。すべてシェルスクリプトで書かれています。

iepg.tvpi
このiEPGサービスのメインプログラムであるCGIスクリプト。EPGのxmlファイルを参照し、指定された番組のEPGデータをiEPGデータとして出力する。

mkepgtab.sh
EPGのxmlファイルを参照し、番組表を作成するプログラム。

テレビ王国における地域設定一覧 

上記、iepg.tvpiおよびmkepgtab.shはxmlデータを加工するだけのプログラムなので多少の汎用性がありますが、以下のtsファイルからxmlファイルを生成する一連のプログラムは当環境と不可分なためもっぱら汎用性はありません。

setiepg.malva.sh
iEPGサーバで実行され、ビデオサーバにEPGデータの更新を指示するプログラム。更新終了後、mkepgtab.shを実行し、番組表を更新する。その指示は、CGIリクエストによって行われる。cronにより毎朝6時頃に実行されている。

mkts2xml.cgi
ビデオサーバがsetiepg.malva.shからのCGIリクエストを受け、mkts2xml.shを実行するCGIスクリプト。なお、このCGI(実質はmkts2xml.sh)の実行には長時間を要するためapacheのTimeout値はデフォルトの900秒から1800秒に変更してある。

mkts2xml.sh
TVキャプチャデバイスからtsファイルを取り出し、EPGのxmlファイルを生成するスクリプト。xmlファイルは共有領域に書き込まれ、即時にiEPGサーバから利用可能になる。

check_xml.sh
tsファイルから生成されたxmlファイルのEPGデータに欠損がないかを調べるスクリプト。EPGデータの欠損は、放送休止のために番組情報(EPGデータ)が存在しないのか、本当にEPGデータが欠損しているのかを確定させる方法がないので経験的に判断している。

merge_xml.sh
EPGデータに欠損がある複数のxmlファイルを合わせて一つの欠損のないxmlファイルを生成するスクリプト。


このiEPGサーバは専用機ではなく、当ネットワークのメインサーバであり、他にも様々な処理を行なっています。また、インターネット接続に関し、このサーバのIPアドレスは約一週間に一度変更され、その変更後、DDNSの更新が完了するまでのおよそ30分程度接続できなくなる時間帯が存在します。

iEPG server(malva.karing.jp)
CPU Intel Core2 6600 2.40GHz
M.B. FOXCONN 45CM-S
chip set i945GC+ICH7
RAM DDR2 SDRAM 1024MBx2
on board video i945GC
on board ethernet RealTek RTL8139
on board sound Intel HD Audio
PCI USB2.0 CARD IO data 1394US2-PCI
HDD HITACHI HDT72502 250GB
HDD WDC WD10EACS-00D 1TB
Software RAID(HDD case) MARSHAL MAL-3035SBKU3
HTSG 2TBx4 4TB(RAID5+1spare)
DVD-RAM MATSHITA DVD-RAM SW-9587S
OS Vine Linux 6.5


ビデオサーバは2台ともPT3の二枚刺しです。BSは主に山形で受信しています。

video server in Yamagata(asagao.karing.jp)
CPU Intel Core i3 4130 3.40GHz
M.B. GIGABYTE GA-H81M-D3V
chip set Intel H81
RAM DDR3 SDRAM 2048MBx2
video card NVIDIA GeForce 6200
on board ethernet RealTek RTL8168
on board sound Intel HD Audio
TV caputure card Earth soft pt3 x2
HDD HITACHI HDS721616PLA380 160GB
HDD Seagate MB2000ECWCR 2TB
DVD-RAM HL-DT-ST DVDRAM GH24NSB0
OS Vine Linux 6.5

video server in Tokyo(nadesico.karing.jp)
CPU Intel Core2Duo E8400 3.00GHz
M.B. ASUSTeK P5Q-EM
chip set Intel G45
RAM DDR2 SDRAM 2048MBx2
onboard video GMA X4500HD
on board ethernet RealTek 8111C
on board sound Realtek ALC 1200
TV caputure card Earth soft pt3 x2
HDD WDC WD2500JD 250GB
HDD Seagate ST2000DM001 2TB
DVD-RAM HL-DT-ST DVDRAM GH20NS10
OS Vine Linux 6.5




iEPG番組表


2018-12-30 Sun 22:31