タグ検索の不具合を修正&最終取得タグ判別修正

前回のエントリーでgifnksmさんからご指摘のあった、
「最終取得タグを含めない」で検索した画面で、指定したタグを含む、1回しか取得されていない動画については最終取得であるかないかに限らず必ず表示されてしまう。
という現象を修正しました。たぶん正常に動作するようになったと思います。

そしてMnstさんからご指摘のあったタグ検索時の不具合も修正し、除外タグ条件も追加しました。
以下修正の概要です。
●検索システムを大幅に変えました。
●「動画検索(ほぼ一致検索)」を「動画検索(ニコニコ動画式検索)」と変え、ニコニコ動画のタグ検索となるべく同じような検索結果が得られるようにしています(いきます。)
●タグ検索時のレスポンスを改善しました。が、検索条件が増えると遅くなるのは変わっていないです。キャッシュ式にはしたくないのでサーバを変えるまではスピードがアップする可能性が低いかも。
●動画検索時のソート条件「Good投票が多い順」「Bad投票が多い順」はレスポンスが悪すぎたので廃止しました。
●検索文字列「/」と「#」が検索できるようになりました。これに伴い、URLがちょっと変わりました。
 「nicotag.jp/tag/〜」→「nicotag.jp/tag?s=〜」
 以前のURL形式でもアクセスできるようにしていますが、「/」か「%2f」を含むタグはサーバーエラーになります。
●除外タグは、検索タイプ(あいまいやニコニコ動画式)と同じ除外検索を行います。たとえば、
 →あいまい検索で除外タグを「アニメ」としたときは「ニコニコアニメチャンネル」も除外タグ条件に含まれます。
 →ニコニコ動画式で除外タグを「アニメ」としたときは「ニコニコアニメチャンネル」は除外タグ条件に含まれません。
 →完全一致式で除外タグを「アニメ」としたときは「アニメ」(半角)や「あにめ」は除外タグ条件に含まれません。
 →タグ検索時の除外タグは動画検索(あいまい検索)と同じあいまい除外です。

今回の修正で、タグの検索文字列は前回のエントリーのコメントでMnstさんから情報をいただいている、NFKC正規化という変換を行って検索しています。具体的には、

                                • -

【取得時】
タグ取得→NFKC正規化→大文字を小文字に→英数記号を全角に変換→検索用テーブルに保存
【検索時】
検索文字列を取得時と同じプロセスを経て変換し、検索用テーブルに保存している文字列と比較

                                • -

という風にしていますが、未熟者のプログラムなので期待通りの結果が得られないかもしれません。
でもなるべくニコニコ動画と同じ検索結果になるようにはしていきたいと思っていますので、検索できない文字やニコニコ動画との挙動の違いなどがあればご指摘ください!


だいたい今回の修正はこんな感じですが、いつものようにあんまりテストしていないので、どこかに欠陥が有るかと思いますが、そのときはまたコメントでつっこんでいただければうれしいです。

タグ検索機能更新&ロックタグの表示

タグ検索とnicotag/tag/〜の仕様を大きく変更しました。
【タグ検索ページに下記機能を追加しました。】
■検索タイプを変更しました。

・動画を検索(あいまい検索)
以前の動画検索とほぼ同じですが、複数キーワードでの検索時の検索方法を変更しました。
前)検索語句「アニメ ニコニコ」で検索した場合は、「ニコニコアニメチャンネル」のような一つのタグに対して複数の検索語句が含まれていればヒット
後)検索語句「アニメ ニコニコ」で検索した場合は、「ニコニコアニメチャンネル」も「ニコニコ」も「アニメ」もヒット
・動画を検索(ほぼ一致検索)
以前の/nicotag/tag/〜ページと同じで、検索語句と一致するタグから検索。半角全角大小文字を区別せずに検索。
・動画を検索(完全一致検索)
ほぼ一致検索とほぼ同じですが、こっちは半角全角大小文字を区別して検索。
・タグを検索
以前と変わらず。

■「削除された動画を含めない」オプションを追加しました。
■「ロックされているタグの扱い」オプションを追加しました。

いつの間にかロックパラメータが取得できるようになっていたので追加してみました。このアップデート後に更新された保管動画のみに適用されますので、過去に保管された動画は更新されるまではロック判定ができません。


【nicotag/tag/〜ページをタグ検索ページにまとめました】
以前はnicotag/tag/〜ページは動画タグをクリックしないとアクセスできなかったのですが、タグ検索ページで検索タイプを「動画を検索(ほぼ一致検索)」か「動画を検索(完全一致検索)」を選択して検索することで、nicotag/tag/〜ページの動画一覧を表示できるようにしました。

  • URLやクエリは今まで通りnicotag/tag/〜でアクセスできます
  • タグ検索機能にまとめたので、最終取得除外オプションや削除オプションが使えます。

検索スピードのことを考えずにガツガツと変更してしまったので、少しパフォーマンスが悪くなったかもしれません。特に複数キーワード検索でオプションをいろいろ選択した場合は遅くなってしまいますが、なんとかします。

説明が下手なのでわかりにくいかと思いますが、意味不明なところやエラーやその他要望があればまたコメントください。

タグ検索のAPIを作りました。

ball89さんから要望のあった[www.nicotag.jp/tag/タグ名]ページのAPI版を作成しました。
複数タグ指定してのOR検索機能は搭載しませんでしたが、取得したいタグ分リクエストして頂ければ同じ結果が得られると思います。

【機能】
www.nicotag.jp/tag/〜のページと全く同じ。
・一度に取得できる動画タグは60件。
・ソート可能
・ページング対応

【パラメータ】
■sort
'a' => '投稿日が新しい順',
'aa' => '投稿日が古い順',
't' => 'タグられた日が新しい順',
'ta' => 'タグられた日が古い順',
'c' => '保管タグが多い順',
'ca' => '保管タグが少ない順',
'r' => 'タグのランクが高い順',
'ra' => 'タグのランクが低い順',
'g' => 'Good投票が多い順',
'b' => 'Bad投票が多い順',
■page
取得したいページ番号。

【例】
http://www.nicotag.jp/api/getvideosbytag/%E3%82%A2%E3%83%8B%E3%83%A1?sort=a&page=1

【レスポンスパラメータ】
Mnstさんから要望のあった、削除された動画を判別できるように、動画のステータスフラグをパラメータに含めてみました。
ok
このフラグはニコニコ動画からgetthumbinfoで取得したときのレスポンスステータスをそのままデータベースに保存し、使用しています。ですので動画が削除されたとき、ニコタグのデータが更新されていればfailがセットされます。
上記以外のパラメータは名前を見ればだいたいわかっていただけると思いますが、不明なところはコメントください。

ball89さん、要望ありがとうございます!
他に要望やエラーなどがありましたらまたコメントください。


余談:日記の投稿日がなぜか前日になる・・・。

複数の動画の保管情報を取得するAPIを追加しました。

gifnksmさんから要望のあった、複数の動画のタグ最終保管日時が取得できるAPIを作りました。

以下のようなリクエストで取得できます。
www.nicotag.jp/api/getvideosinfo/(パラメータ)/(ビデオID)
【パラメータ】
first_keep、last_keep、keep_countが指定でき、allにするとすべて取得できます。

【ビデオID】
カンマ区切りでビデオIDを複数指定できます。一回に取得できる数は20件までです。

【例】
http://www.nicotag.jp/api/getvideosinfo/all/sm3608358,nm3692997,sm3405456


エラーや要望などありましたらまたコメントください。

いろいろ更新&修正しました。

IEで投票機能がおかしかったので、修正しました。

  • アイコンも変更して、ランクを表示するようにしました。
  • 投票は1個の動画タグにつき、GoodとBadあわせて一人1日20回までに限定しました。
●タグ検索の動画検索機能にMnstさんから要望のあった「最終取得タグを含めない」条件を付けました。
  • 少し古い動画は最終取得フラグが判別できないのでひっかかってしまいますが、ページを表示して再取得すると機能するようになります。
  • タグを検索する場合には機能しません。


●それから、タグの投票機能もAPIから使えるようにしてみました。
www.nicotag.jp/api/updtagrate?type=good&vtid=1234567890
↑でアクセスするとJSON形式で帰ってきます。
【type】goodかbadか
【vtid】動画タグのID(動画タグAPIで取得したXML

watch以下のタグ保管ページでの投票機能もこのAPIからJSONP形式で取得するようにしています。汚いソースなので参考になればと思いますが、Javascriptが苦手なので変なところがあったら教えてください。

API作ってみました。

2008-06-04のエントリーでgifnksmさんから要望のあったAPIを実装してみました。

ニコニコ動画とよく似た仕様にしてますのでわかりやすいかと思います。
【1,動画の保管タグを取得】
http://www.nicotag.jp/api/gettagsinfo/動画ID
例:http://www.nicotag.jp/api/gettagsinfo/sm3591413

【2,ニコニコ動画のタグを取得・保管してから保管タグを取得】
http://www.nicotag.jp/api/updtagsinfo/動画ID
例:http://www.nicotag.jp/api/updtagsinfo/sm3591413

1の方は保管しているタグを取得するだけなので2よりちょっと軽いです。
2の方は動画が保管されていなくてもちゃんと取得できます。

動画ランキングのページをちょっと変えました。

タグが単調で読む気になれなかったので、生まれたてのタグと同じようにランダムで大きさを変えて表示するようにしました。懸案事項のタグランク計算方法が固まったら、タグランクで大きさを反映できるようにしたいです。
それから、読み込みが遅かったので少し改造しました。若干速くなったと思いますが、キャッシュ更新時に初回アクセスした方は少し遅いかもしれません。

タグランクどうしよう・・・。
まずはgifnksmさんから提案のあった存在時間でランクを出せるように考えてみようと思います。