ホーム » 「EPG」タグがついた投稿
タグアーカイブ: EPG
EPG番組表ふたたび
EPGデータの取得処理
以前運用(EPG番組表とリモコンの連動)していた自宅でよく見るチャンネルを優先する EPG 番組表だけど、番組表が Cable Gate に変わって、番組表情報が取得できなくなっていた。今回、agy (Gemini) にて「このプログラムを参考にEPG情報をとれるように直して」と命令したら、スクレイピングしていたプログラムを、内部で json 形式で読みだす API を見つけてくれたようで、無事元通り。
番組名をクリックすれば、チャンネル変更もできる機能も元通り。
追記 loading 表示
EPG の取得には時間がかかるため、loading… の表示をするように処理中に ob_flush() など埋め込んでいた。しかしながら、今回の修正で機能が復活したけど loading… の表示が正しく動いていなかった。HTTP2の機能を導入する過程で、出力データはバッファリングして一括送付するようになり、PHP の出力バッファリングで、ob_flush() などの効果がなくなっていた。
そこで、以下のような処理を PHP の先頭に埋め込んで、出力バッファリングを抑止して、loading 表示機能も復活。
// EPG取得に時間がかかるのでloading表示したい。
// このため出力バッファリングをさせない
if ( true ) {
// 1. PHPの出力バッファリングをクリア
while( ob_get_level() > 0 )
ob_end_flush() ;
// 2. mod_deflate による圧縮を回避
if ( function_exists( 'apache_setenv' ) )
apache_setenv( 'no-gzip' , '1' ) ;
// 3. PHP の zlib 圧縮をオフ
ini_set( 'zlib.output_compression' , 'Off' ) ;
// Nginx でのみ有効
header( "X-Accel-Buffering: no" ) ;
// 4. キャッシュや圧縮をさせないヘッダ
header( 'Content-Encoding: identify' ) ;
header( 'Cache-Control: no-cache, no-store, must-revalidate' ) ;
}



