新機能実装の落とし穴

nicovideo Thumbinfo Popup 開発版(未公開)でコミュニティ限定動画と公式ch動画のポップアップに対応したよー!やったー!
今まで「Error! COMMUNITY」とか出てポップアップできなかった公式動画とかの情報をきっちり表示できるようになりました。
こんな感じに。

左側が旧バージョン,右側が新バージョンのポップアップです。
コミュニティ限定動画や公式ch動画の情報は,実際に動画再生ページにアクセスして入手しているため,たくさんの公式動画を連続でポップアップさせるとアクセス制限(短時間の連続アクセス云々)がかかってしまうかもしれません。このあたりの対策も行う必要があるかもしれません。
観覧する権限の無い動画はこんなメッセージが出ます。

ちなみに。一つ落とし穴が。
新機能できたー!って調子のってポップアップさせ続けていたら視聴履歴が大変な事に…。

公式動画のポップアップのしすぎにはご注意ください。
(※視聴履歴に残るのは公式動画・コミュニティ限定動画などの特殊な動画をポップアップした場合のみです。普通の動画をポップアップさせるだけならこのような現象は起きません。)

nicovideo Thumbinfo popup 現状のまとめその2

前回の記事 (d:id:gifnksm:20090329:1238328346) に追記を繰り返し過ぎて読みにくくなったので,新しく記事を作ってもう一度現状のまとめをします。
2009/05/10追記

やったこと

  • スクリプトのソースを全面的に書き換え
  • いくつかの新機能の実装

新機能

  • 動画・タグの大百科登録情報が表示されるようになった
  • コミュニティ限定動画もポップアップできるようになった
    • データ取得方法の都合上,コメント数,最新のコメントは表示できません
    • 視聴履歴にポップアップした動画が追加されるのは仕様です
  • 削除済み動画のポップアップに対応
  • エスケープキーで表示中のポップアップを全て消せるように

細かい仕様変更・改善

  • 非アクティブなポップアップは半透明に
  • 子ウインドウが消えてから親ウインドウが消えるまでに600ms間が開くようにした
    • 旧バージョンではマウスがウインドウ上から外れると,全ての祖先ウインドウが同時に消えた
  • area要素で表示されるポップアップの位置の改良
    • area要素のshape属性,coord属性をパースしてリンク範囲を適切に計算
    • 表示位置が著しく改善された例→ORGONE TOWER LABORATORY
  • position: fixed;な要素内のリンクをポップアップさせた場合の表示位置を正しくした
  • 全ページでポップアップそのものをposition: fixed; にした
    • Flash 広告などの前面に表示されるようになった
  • スタイルシートの外部ファイル化
  • 旧バージョンで出ていた謎のエラーが出なくなった
  • 投稿者名表示の改良
    • 公式動画の場合,動画IDから判断した適切なコンテンツホルダ名を表示するようにした
    • 動画IDの最初の2文字から判断
  • タグ表示の微妙な改善
    • カテゴリタグを示すマークを表示するように(nicovideo Add Stars to Tagsと同じ動作)
    • 自分の母国を指定できるようにした
      • 例:母国を'tw'にすると台湾のタグが最初に表示され,その後に日本語タグが続く,など
  • 海外サーバ対応(適当な実装)
    • http://tw.nicovideo.jp/watch/xxxのリンクでもポップアップするとかそんな感じ
  • 選択範囲ポップアップは動画ID選択後,「p」キーを押すと実行されるようにした

修正予定

  • 選択範囲のポップアップの改良 修正済み
    • 現状は意図せぬタイミングで表示されることがよくある。特定のキーを押したときのみ表示などの改良を行う
  • watchページにデータをとりに行った場合の動画説明文中のURLもリンクを張る
    • nicovideo Break Uploader Comments のソースをパクればOKかと

旧版の機能のうちまだ実装していないもの

  • 選択範囲ポップアップ 実装済み
    • 選択範囲内の動画IDのリンク化など,別の形で実装するかも。詳細未定

新機能予定(あくまでも予定)

  • ポップアップ対象ページの追加
    • YouTube
      • サムネイルのみ?実装するときに詳しく調べる
    • 大百科ポップアップ
    • マイリストポップアップ
    • タグ検索ポップアップ
      • 調子に乗ると「短期間での連続アクセスうんたらかんたら」言われそうではある
  • iframe ポップアップの位置を改良
  • 設定ウインドウ
  • ch000, lv000 への対応
    • 対応方法は未定。特に後者
  • どうしても情報が取得できない場合,watchページを見にいく 実装済み
    • 削除済み動画

要望とか

  • 選択範囲ポップアップのポップアップ数上限設定
  • キー入力によるポップアップの消去実装済み
  • コミュニティのポップアップ

nicovideo Thumbinfo popup の動画情報取得方法

自分用メモ。

リンク
  -> 動画ID(xx00000 形式) 
    -> getthumbinfo & 動画投稿者名取得
      -> ok (通常動画) => 出力・大百科取得
      -> error
        -> deleted (現状はエラーメッセージを出力して終了)
        -> community
          -> watch/xx00000
            -> データ取得成功 => 出力・大百科表示
            -> 失敗 => この動画IDではアクセスできないコミュニティ動画っぽい
  -> 動画ID(0000000000 形式)
    -> getthumbinfo
      -> ok(通常動画・マイメモリー) => 出力・大百科取得
      -> error
        -> deleted (現状はエラーメッセージを出力して終了)
        -> community
          -> getflv
            -> error => 削除済み・観覧権限無しなど
            -> optional_thread_id, url
              -> getthumbinfo & 動画投稿者名取得
                -> ok(コミュニティ動画) => 出力・大百科取得
                -> error (community) (コミュニティ限定動画)
                  -> watch/0000000000
                    -> データ取得成功 => 出力・大百科取得
                    -> 失敗 => ???(今のところ該当例無し。)

実際のソースコードではgetthumbinfo/getflv/watchの取得は全部同じメソッドが担っていたりするので,この構造は陽に現れてはいない。