番組情報の検索は、単純にLIKE演算子を使用して、字幕情報の検索ではブール全文検索を使用しています。
次のようにして字幕検索結果のリスト表示をしています。
my $query = 'バイク -自転車'; search_caption($query); sub search_caption() { my $query = shift @_; my $sql = <<END; select c.dc_name, c.dc_ch, e.dv_start_time, date_format(addtime(e.dv_start_time, e.dv_duration), '%H%i%s'), e.dv_duration, e.dv_name, e.dv_favorite, timediff(a.dp_start_time, e.dv_start_time), time_to_sec(timediff(a.dp_start_time, e.dv_start_time)), a.dp_text from da_caption as a inner join (da_event as e inner join da_channel as c on c.dc_network_id = e.dv_original_network_id and c.dc_service_id = e.dv_service_id ) on a.dv_id = e.dv_id where match(a.dp_text) against(? in boolean mode) order by e.dv_start_time desc END my $dsn = 'DBI:mysql:database=oneseg24;host=localhost'; my $dbh = DBI->connect($dsn, 'user', 'password', {RaiseError => 1, AutoCommit => 0, mysql_enable_utf8 => 1}); my $sth = $dbh->prepare($sql); my $rv = $sth->execute("${query}"); my %program = (); my @order = (); while (my $ref = $sth->fetch()) { my @tmp = @$ref; my $key = "$tmp[1]-$tmp[2]"; if ($#{$program{$key}} < 0) { push(@order, $key); } push(@{$program{$key}}, [@tmp]); } $dbh->disconnect(); print "
- = 29);
print ">\n";
printf "
%d件の一致、キーワード: %s
< br />\n", $#order+1, $query; foreach my $k (@order) { my $i = 0; foreach my $a (sort {$a->[8] <=> $b->[8]} @{$program{$k}}) { my ($dc_name, $dc_ch, $dv_start_time, $end_time, $dv_duration, $dv_name, $dv_favorite, $dp_offset, $dp_offset_sec, $dp_text) = @$a; my $t = Time::Piece->strptime($dv_start_time, "%F %T"); my $start_time = $t->strftime("%y%m%d-%H%M%S"); my $link = join("-", ($start_time, $end_time, $dc_ch)); if ($i++ == 0) { print "<li"; print " data-icon='star'" if ($dv_favorite); print ">"; print "$dv_name
"; print "$dc_name $dv_start_time ($dv_duration)
\n"; } print "$dp_offset\t$dp_text
\n"; } print "\n"; } print "dv_duration
)が立っている番組は、アイコンを☆マークに変えています。(以前に書いたかもしれませんが、jQuery Mobileを利用しています。)また、お気に入りフラグが立っている番組は、ディスクの空き容量確保のためのデータ自動削除処理で、削除対象から除外されるようにしています。
<pre>
タグ内で、<br />
がうまく記述できないので、表記が少しおかしくなっています。
2012/5/1追記)
Internet Explorerで表示が崩れていたので修正しました。
<pre>~</pre>内でも、HTMLタグを解析するような動作をしているようなので、一部<を<としました。
0 件のコメント:
コメントを投稿