アニメ人気ランキング
放送中アニメの人気ランキングについて。
時間がないのでいちいち書いてませんが随時改良を重ねています。
特に先月と先々月には内部処理にかなり大幅な改良を行いました。
見た目的にはリリース情報がないものをわかるようにしたぐらいかな。
レンタルは有るけどセルが出てないのもわかるようにしました。
どちらも前から気にはなってたので大幅改修のついでに実装しました。
内部処理の大幅な改良については使う側はあまり関係がないですが
参考になる人がいるかもしれないのでメモがわりに書いておきます。
改良点の1つ目は
メモリーリークを無くしたこと。
ランキング情報は30分毎にデータを取得して更新してるわけですが、
この処理で大量にメモリーリークしてる事に今さらに気づきました(汗)。
300~500Mbyteぐらい大量にメモリー消費してるのは知っていたけど、
大量にデータを取得して加工してるからそーいうもんだと思ってました。
でもメモリー使用量が増えないはずのところで増えたので気づきました。
XMLを解析してるとこでDOMツリーを毎回明示的に破棄してなかったので、
Amazonから取得したデータのDOMツリーが
全てメモリーに残ってたという。
一度に150回ぐらいデータを取得してるのでえらい事になってたわけです。
そーいや動画配信サービスナビで全く同じところでハマってたなと……
XMLパースのモジュールは既存のモノなので問題に思い至らなかったよ。
なんか上手いことデータを破棄してくれると勝手に思い込んでたみたい。
てゆーかネットのサンプルソースでツリーを破棄してるの見た事ないぞ。
まぁ、PerlのCGIはリクエスト処理して結果を返せばプロセス終了だから
多少のメモリーリークなんてほとんど問題にはならないとは言えるけど。
150回もXMLをパースするのが尋常じゃないだけで。
と言うわけで毎回DOMツリーを破棄してメモリーリークを無くしました。
結果としてメモリー使用量が数10MByteまで減りました。
そして更新プロセスが
途中で勝手に打ち切られる事も無くなりました。
プロセスが止められてたのは時間が長すぎたせいじゃなかったんだ……
長すぎるんだと思って処理を分割したのは無駄な努力だったのねん(泣)。
まぁ、処理を分割する事でメモリーリーク量も抑えられてたわけですが。
この改修作業をやった10月頃には毎日のように更新が止められていたので
改修によってそれが無くなったのが予想外のメリットだったすね。
しかし平穏な更新処理は長くは続かなかったのでした。
Amazonから新たな不具合という刺客が!(詳しくは後述)
改良の2つ目はデータ更新処理の最適化。
ランキング更新処理で取得したデータを過去のランクと合成してますが
この時にデータの検索処理を最適化してみたら
驚くほど速くなりました。
まぁ、最適化以前は単にリストを順にチェックしてただけですが。
これを検索対象のリストを予めASINをキーにしてハッシュに入れてみた。
そしたら10秒以上かかってたリスト合成処理が1秒かからなくなった……
書き方次第でパフォーマンスが天と地ほども違うといういい例ですね(汗)。
実は処理の非効率さには前から気づいてはいたのです。
でも
なし崩しで拡張を重ねたコードなので構造が凄く汚くなってまして。
何しろ最初のバージョンには非同期のデータ更新処理すら無かったので。
なので内部構造のリファクタリングを先んじてやってたわけです。
そしてやっとデータ処理の非効率な箇所に手を入れる事ができたわけで。
メモリーリークもその作業の過程で気づいたようなもんです。
ランキング更新処理が210秒から200秒になっても大差はなかったりする。
(Amzaonと通信してる部分で200~250秒ほどかかってます)
ぶっちゃけ今まで放置してたのも実害が無かったからにほかないわけで。
手間かけてまで処理を最適化したのには切羽詰った事情が有りました。
それは、今現在サーバーリソースをかなり消費してるという事情です。
レンタルサーバーの負荷が
追い出されかねない状況に近づいてるのです。
サーバーログによると放送中アニメの人気ランキングのスクリプトは
いつのまにやら1日4000アクセス(500ユニーク)ぐらい行ってるご様子。
しばらく安定してたけどここ数ヶ月でアクセスが倍増してるみたい。
ちなみにブログパーツのアクセス数は一日20000アクセスぐらい。
ブログパーツも含めた1日の転送量が先月の平均で
1GByteに達してます。
500Mbyteぐらいで数ヶ月安定したのにここ最近また上昇し始めた模様。
先月のピークだと2GByte近くまで行ってる日があります……
ライトコースだと転送量3Gbyteぐらいが上限の目安なのでそろそろヤバイ。
まぁ、月100円コースでこんだけ使えれば十分だと思いますが。
サーバーの負荷は転送量とは別にCPU使用時間というのが有ります。
恐らく動的生成のスクリプト(CGI)が占有してる時間だと思われます。
ものすごい転送量になってるブログパーツは固定したファイルなので
こちらの負荷はほぼアニメランキングがかけてると思われるわけで。
(アニメ動画配信サービスナビは問題になるほどアクセスが無い)
そしてCPU使用時間も既に予断を許さないレベルに達してたのでした。
いずれは上位プランに引っ越すにしても
多少は足掻いてみようかなと。
更新処理の効率化はつまりそーいう意図で実行されました。
改良の3つ目は表示のキャッシュ処理。
今まではリクエストが有るたびにランキングページを生成してましたが、
一度生成したページをデータが更新されない限り流用するようにしました。
これも以前からずっと考えてたのだけどどう実装するか悩んでたわけです。
データ更新時にアクセスの多いページを一緒にに生成してしまうかとか。
とりあえず
リクエスト内容で判断して必要なら生成する仕様にしました。
これならキャッシュ生成したけど実際には使わないみたいにならないし、
アクセスの多いページなら確実にキャッシュが効くはずなので。
最適化とキャッシュ処理でだいたい3割ぐらい負荷が軽減されました。
これで上位プランへの引っ越しが少し先延ばしできればいいけど。
最後に改良の4つ目。
ここ最近ランキング情報がごっそりと欠落することが頻発してます。
昔から一部のアイテムのランク情報が一時的に欠落する事は有ったけど
ここ最近数100~1000アイテムという
大量のランク欠落が発生してます。
この1週間なんか毎日のようにランク情報欠損状態になっています。
※この文章を書いたのは1週間ぐらい前です
履歴のグラフで線が切れてる箇所がランク情報が欠落してるところです。
(作品の履歴でいきなり下に落ちてるのは一番上が欠落してる状態)
さすがにここまで頻発すると
アニメランクの信頼に関わるということで
大規模に欠落する時は一つ前のランク情報を流用するようにしました。
今のところ2回連続して大規模欠落は発生してないので行けるかなと。
お店側で表示されてるランクと微妙にずれてしまう可能性はあるけど、
今までもAPIで返ってくる情報は半分ずつ更新みたいなことが有ったし、
欠損するよりは少し前のランク情報のほうがマシだろうと言うわけで。
(個別にデータが欠落してるのも一定の法則で補完するようにしました)
ちなみに最初はリトライして何とか情報を取れないか考えてました。
しかしリクエストを変えて再度試してもやっぱり取れないようで。
(ある程度時間をあければ取れるかもしれないけどやりようが無い)
どーやらAPI側で持ってるデータからランク情報が欠落してるみたい。
お店側サーバーとのデータのやり取りに不具合が混入してるみたいです。
半分ずつランク情報が更新されてたのも似たような不具合だろうなと。
しかしAmazonは
定期的に不具合を混入しないと気がすまないのかね……
もう一つ。これは最近追加した機能ではないけど告知してなかったので。
順位履歴のグラフに一日の平均値(長期)のグラフが追加されてます。
実は1週間の詳細順位のグラフを作った時に一緒に実装してたのですが、
グラフを表示してみたら
平均値の計算が間違ってたのが発覚しまして(爆)。
1週間のグラフは1週間すれば入れ替わるので間違いもすぐ消えるけど
長期グラフは半年ぐらい残るので間違ったデータもずっと残ってしまう。
さすがにそれはまずいとデータを一度全消去して最初からやり直しました。
そしてグラフはデータがある程度たまってから表示するようにしました。
最初から長期のグラフが見れたのは確か今年の4月組からだったはず。
この長期の変動グラフはいろんな情報が読み取れてとても面白いです。
「STAR DRIVER」なんか放送日に跳ね上がりずるずる落ちていくので
1週間周期で尖った山ができる
実にわかりやすいグラフになってたり。
(放送周期の上下がここまで極端なグラフはあまりない)
ヨスガノソラは1話と4話のあたりでものすごく順位が上がってるとか。
自分作っといてなんだけどこれはランクそのもの以来のヒットだと思う。
見たことない人は試しに眺めてみてください。
(ランク変動の)範囲の右にある「→」で見れます。
スポンサーサイト
やられた……
さくら(のレンサバ)に人気ランキングの
データをぶっ壊された(激怒)。
CGIの処理時間に制限があって5分程度で打ち切られてしまうので
処理が終わらないで更新が飛んでしまうことが最近多かったけど
ランキングデータの保存の真っ最中に打ち切られてしまうとは。
ちなみに処理時間はAmazonへのリクエストの待ち時間が大半です。
※ランキングをアップした当初は10分ぐらい平気で動いてた
保存前か保存後なら打ち切られても更新が飛ぶ以外の実害はないけど、
まさに
ファイルの保存処理の途中で打ち切られてしまってるのでした。
1秒もかからない処理の途中で。
おかげで蓄積した順位データが破損して使えなくなってしまいました。
(今まで壊れなかったのは運が良かっただけかもしれん)
偶然にも1日少し前のデータが手元に有ったのでそれをアップしたけど。
1日ほどデータが巻き戻ってしまう悲しい状態に……
これからはファイル保存処理の途中で打ち切られることを想定して
保存が終了してから前のと差し替えるようにした方がイイのかな。
あと数回分の前のデータを念のために残しておいた方がいいかも。
ランクデータファイルが壊れると更新処理が動かなくなるので
1つ前だけ残ってれば大丈夫な気もしますが。
Amazonから返ってきたデータが壊れてて処理が途中で終わっちゃったり、
5分でスクリプトが打ち切られるから処理を何回にも分散してみたり、
で今度は
データが破損することを想定した対策をたてたり、とか……
本来の機能とは別のところに手間がかかりすぎでイヤになります。
と言うわけで今週のメインのブログパーツの話に続きます。
以前から自サイトとブログに埋め込んでいたランキングのパーツですが、
やっと
一般向けで公開しても大丈夫そうな仕様になりました。
使う人にもメリットが有るようにしたので良かったら使ってください。
→
表示イメージ パーツの特徴 パーツの(貼り付け)ソース
パーツの使い方(FC2の場合) 表示内容を変える 表示の調整方法
※内容を一部移動・追加・修正しました。
■ この(プラグイン)パーツで何ができるか
最初にこの(プラグイン)パーツで何ができるかを改めて説明します。
※(プラグイン)パーツの解説なのでくどいようだけど悪しからず
これはAmazonのDVD/BDランキングデータを大量に収集して再構築した
放送中アニメの人気ランキングという私が運営してるサイトの内容を
ブログやサイトのサイドにパーツとして埋め込めるようにしたものです。
Amazonの公式パーツよりも
実態に近いランキングなのがポイントです。
実は埋め込みバージョン自体は3年近く前から有ったのですが……
サーバー負荷の問題と埋め込む人のメリットの関係で自分専用でした。
(ソースを見てパクれば埋め込めたけど仕様は公開してませんでした)
今回、
埋め込む仕様を根本的に変えることでその問題を解消しました。
にしても当初のパーツ公開の予定からどんだけ遅れてんだか(汗)。
自分専用版から大きく変わったのは以下の二つのポイントです。
(1) 自分専用版では毎回表示するたびにスクリプトを生成したけど
一般公開版は(30分毎の)
定期更新でスクリプトを生成するようにした。
これで利用する人が増えてもサーバー負荷はあまり問題にならない(はず)。
利用者が増えたら使い物にならなくなるなんて間抜けすぎるからね。
(2) 自分専用版ではパラメータに従って毎回リストを生成してたけど、
一般公開版はJavaScriptを使って
ブラウザ側で改変するようにした。
結果的に画面デザインも含めて従来より設定で変えられる要素が増えた。
特にAmazonアソシエイトIDを設定できるようになったのが大きいかも。
(キャシュ機構とそのパラメータ書き換えの両立で悩んでました)
■ (プラグイン)パーツの表示イメージ
表示イメージは以下のとおり
------------ここから-------------
------------ここまで-------------
■ (プラグイン)パーツの特徴
この(プラグイン)パーツには以下の特徴が有ります。
(1) 30分毎に自動的に
最新のランキングに更新されます。
(2) 人気ランキングは今期(の新番組)・今期と前期・ここ1年の3種類で
並び順は現在の順位か1週間の平均順位のどちらかが選べます。
(4) 表示するジャケ絵の数を設定できます(0から15まで)。
(3) ランキングのリンクに
AmazonのアソシエイトIDを設定できます。
(4) スタイルシートを変更しなくても簡単な見た目の調整ができます。
(5) FC2のプラグインとして利用する場合は
ほぼそのままで使えます。
■ (プラグイン)パーツの貼り付けソース
まず(プラグイン)パーツを貼り付けるソースです。
以下をそのままサイドバーとかに埋め込めば使えます。
※
JavaScriptが使える必要が有ります
ブログ毎の具体的な使用方法はこの下にあります。
■ プラグインの設定方法(FC2の場合)
FC2のブログに追加する場合は以下のとおりです。
(1) 共有プラグインの追加で「放送中アニメの人気ランキング」を検索する。
(2) プラグインをダウンロードする。
(3) プラグインの詳細で表示内容を調整する
タイトルが長い場合は「アニメ人気ランキング」とかそんな感じに。
表示内容を変えたりデザインの調整をする場合は
プラグインの改造(HTML編集)から直にソースを書き換えてください。
※そのうち質問回答形式で一部を設定できるようにするかも。
■ プラグインの設定方法(FC2以外)
気が向いたら追記するかも。
■ (プラグイン)パーツの表示内容を変える
表示内容を変えたい場合はソースの以下の部分を書き換えてください。
※範囲外のパラメータを指定した場合は初期値になります。
shunlist.
range =0;
shunlist.
sortmode ='rank';
shunlist.
image =5;
shunlist.
assid ='アソシエイトID';
rangeは人気ランキングの集計範囲です。1(クール)で今期(の新番)のみを、
2で今期と前期を、4でこの1年を対象にします。0はランダム表示になります。
sortmodeは並び順です。rankで現在順位にaverageで平均順位になります。
averageの方がそれっぽくなりますが順位変動が少なくて面白くないかも。
imageはジャケ絵を表示する数です。0でジャケ絵なしになります。
ランキングは15位までなので0~15を指定してください。
assidはAmazon.co.jpのアソシエイトIDです。自分のを設定してください。
持ってない場合は私のID(aaa0e0b-22)を書いて頂けると喜びます(おい)。
ちなみにここを空白('')にしておくとアソシエイトIDはつきません。
■ (プラグイン)パーツ表示の調整方法
大概の場合はそのままでも使えますが、テンプレートやデザインにより
表示に不具合が出る場合があります。その場合の調整方法について。
※意味がわからない場合は下手にいじらないように
(プラグイン)パーツのソースの以下の部分が表示を調整する箇所です。
shunlist.
nolistmark =false;
shunlist.
nolistbgimage =true;
shunlist.
imageoffset ='20px';
shunlist.
noimageborder =true;
nolistmarkはランキングリストにリストマークを出さなくする設定です。
リストマークがウザイと感じた場合はtrueにすれば消えるはずです。
nolistbgimageはリストの背景が抜ける場合にfalseに変えてください。
※IE(IE6)以外では症状が出ないと思われる
通常はtrueにした方が意図したデザインに近くなるはずです。
一部にアンカーの背景画像をリストマークにするテンプレートがありますが、
そのへんを自動調整すると副作用が大きいので自分でCSSを変えてください。
imageoffsetはジャケ絵イメージの左オフセット(margin)です。
表示位置を微調整したい場合はここを変えてください。
左margin以外はスタイルシートのままなので自分でCSSを設定してください。
noimageborderをtrueにするとジャケ絵イメージの枠を消します。
ボーダースタイルを変更して欲しくない場合はfalseにしてください。
nolistmark、
nolistbgimage、
noimageborderの全てをfalseにすると
内部処理でのスタイル変更が必要最低限になります。
ちなみにFC2の公式・共有テンプレートでざっと試してみた限りは
好みでリストマークをON/OFFする以外は
大半がそのままで大丈夫でした。
もしも使用する人が多くなって見た目の調整を期待する人が増えたら
CSSで調整し易いように出力するタグ構造の説明を書いたりするかも。
その気が有る人ならソースを見れば済んだりしますが。
一昨日に放送中アニメの人気ランキングに
1月の新番組を追加しました。
そしてそれとは別に新機能が幾つか追加されています。
って言っても機能を追加したのは1ヶ月ぐらい前だったりしますが。
せっかくなので紹介しておきます。
1つ目は順位履歴のグラフ機能。
表の「→」をクリックすると1週間分の順位の履歴が出てたけど、
そこに
変動のグラフを一緒に表示するようにしたわけです。
ずっと前からやりたいと思ってた機能でやっと実装したのです。
数字よりも視覚的で一目瞭然で変化がわかるようになってます。
まぁ、1週間分だと長期的な傾向は全くわからないですが……
それでもグラフの形から見えてくるものがあります。
実は上位の作品と下位の作品ではグラフの形が全く違うのです。
平均値が数千以上の作品だと顕著だけどグラフが鋸型なのです。
売れるとドンと上がって緩やかに下がるのが見えるわけですよ。
(上位のは売れる間隔が狭いので鋸の形がほとんど見えない)
下位の作品ほど順位変動が大きい理由も実によくわかるのです。
このグラフは対数で縦を圧縮してるので下ほど順位が詰まるのに、
それでも下位の作品ほど変動が大きく見えるのだから。
ちなみにこの
グラフはJavaScriptで描画しています。
わりと新しい機能を使ってるので古いブラウザでは表示できないです。
※IE6~/FF1.5~/Opera9~/Safari3~/Chromeに対応
PC用で未対応のブラウザを使ってる人はほとんどいないでしょうが。
未対応ブラウザや携帯の人はごめんなさいということで。
グラフを描画する方法はJavaScript以外にもいくつか有ったけど
それぞれを検討して
実装の手間と対応範囲のバランスで決めました。
もしかしたら他の方法も研究という名目で実装するかもしれないけど、
予定は未定で実装の保証はしかねます。
二つ目はジャケットイメージの拡大機能。
この機能に至っては
実装したの半年以上前だったかもしれない。
さりげなく実装したけど一切の告知をしなかったという……
(今はトップページに機能の説明をしてありますが)
そもそも自分が欲しかった機能だから気付かなくてもいいかなと(爆)。
ランキングに表示してるジャケ絵は小さくて絵がよくわからないし
かといって一回り大きい絵に変えると全体のバランスが悪くなるし。
だったらクリックした時にポップアップすればいいじゃないか!と。
マウスを止めるとポップアップするのはウザイので能動型にしました。
この機能もJavaScriptなので古いブラウザだと動きません。
※IE5~/FF1~/Opera7~/Safari3~/Chromeに対応
動かないブラウザを使ってる人はまずいないと思うけど。
アニメランキングだけでなくブログにも少し機能を追加してあります。
全ての注目タイトルを表示する機能を。
サイドの注目タイトルの一番下の「全ての注目タイトル」をクリックすると
全ての注目タイトルが
ポップアップで表示されるようにしたわけです。
この機能を追加したのは3週間ぐらい前だったかな。
実はずっと前から注目タイトルの部分は何とかしたかったのです。
新しい注目タイトルを追加していくとリストが長くなってしまうから
今まで
適当にタイトルを追い出して体裁を整えていたのです。
でもそうするとそれまでは簡単に飛べたそれらのページへの移動が、
タイトル一覧を経由した面倒な移動しか出来なくなってしまうわけで。
余分なページ遷移をしないで移動する手段を検討してのでした。
イメージはずいぶん前に固まってたのでこの機会に実装してみました。
去年の12月頃に作ったアニメの人気ランキングですが、
その後もちまちま改良を重ねて安定して動作するようになりました。
Amazonのサーバーの方は時々変になってることがあるけど……
そのへんもいろいろ対策をして
表面上は問題なく動くようにしたよ。
しかし、手間をかけたわりにあまり見てる人がいません(爆)。
本サイトとブログからしかリンクしてないから仕方ないんだけどさ。
なのでこのランキングがもっと人目に触れるようにしてみました。
よーするにブログのサイドバーに
ランキングを埋め込んでみたのです。
※トップ及びカテゴリー&アーカイブにしか表示されません
元からあるランキング表示の機能を埋め込み用にカスタムしたのです。
ページへの埋め込みスクリプトなので
ここにも入れられたりする。
[追記] 新方式に差し替えました
このランキングには作品の放送時期で区切った3通りの表示があります。
今期の作品のみと今期&前期の作品と1年以内(去年の7月以降)の作品の。
よーするに1クール、2クール、4クールで区切ってるってことです。
実際の2クールや4クール作品の区切りと違うけど
全自動なのでご容赦を。
それぞれの表示はパラメータで選べるけど今はランダムに表示してます。
つまりリロードするたびに表示が変わったりするわけです。
実は元のランキングと同様に平均値でのソート表示もできたりします。
平均値の方が実感として
作品の本来の人気に近い順位が出るんだけど
見るたびに並びが違ってたほうが面白いかなと今の設定にしました。
リリースが終わって順位が下落してるのも結構あるけど全自動な(以下略)
あと上位の数タイトルは
DVDのジャケ絵を表示するようにしたいなと。
今のところジャケ絵を取得してないので表示のしようがないのです。
最初からこの用途で使うことを想定してたわけじゃないので。
ついでに横モードを作ってブログの固定ページの下につけようかなと。
(既にサイドメニューが長すぎるので固定ページには表示してない)
こればかりやってるわけには行かないので時間と相談しつつやります。
ある程度出来あがったらFC2の共有プラグインにでも登録してみるかな。
使う人が増えれば(ランキングへの)リンクが増えるわけだし。
先週書いた
人気ランキングですが大幅にパワーアップしました。
懸案の機能は一通り盛り込んだので
ほぼ完成版と言っていいかも。
先週と変わった点はというと。
・裏で30分毎に自動更新するようにした
・順位データを(最大で1週間)蓄積するようにした
・
平均順位と変動範囲を表示するようにした
・平均順位で並べられるようにした
・蓄積した過去順位を表示できるようにした
・作品名をクリックすると全アイテムを表示するようにした
(これはリンクする位置を先週と変えただけです)
最初のバージョンは現在の順位が一覧できるだけだったけど、
(それだけでも十分に便利ですが)
新しいバージョンは過去の履歴や平均まで一覧できるのです!
平均値や順位の履歴は
Amazonでも見れないので貴重ではないかと。
80秒とか待たされなくなったのも大きいポイントっすね。
後はアイテムの追加が楽になる機能が欲しいけど、そのうちかな。
(今は該当アイテムを手で追加してるから)
こればっかりやってるわけにもいかないし。
今回追加された平均順位ですが、
やっぱりその瞬間の順位よりも本来の人気度に近い感じです。
変動範囲や順位の履歴を見てても順位の変動が大きすぎるので。
偶然にも見た瞬間だけ上に跳ね上がってるかもしれないし。
(過去に売れた数が少ないほど急降下するので)
ある程度のデータを蓄積して初めて
順位で何かを語れそうな感じ。
しかし、1クール番組はそろそろ終わる時期です……
ちなみに新しい版のテスト運用を始めてまだ1週間経ってないので
過去データが1週間分ありません。なので平均データはまだ参考値。
(古いのと平行して新しいのも動かしてたので数日分はありますが)
あと、たまに
更新が正常に終わらないことがあるようです。
なんかAmazonが返してくるデータを処理してる最中に落ちてる模様。
新しい版の初期には異常終了した以降は更新処理が止まってました(爆)。
履歴を含めたデータがロックされたまんまになってたので……
そのへんは対策をして次の更新時には動作するようにしてあります。
(Amazonのデータが起因の場合は2回連続で失敗するけどね)
実は先週さりげなくアップしたのを気づいた人もいるかもだけど、
Amazonのランキング情報を元にした人気ランキングなぞを作ってみました。
アイデア自体はずいぶん前からあって
手で調べたこともありました。
ただ手で調べるのは激しく手間がかかるのにイマイチ確実じゃなかったり。
それは該当アイテム(巻)を全て調べるのが不可能に近いからってこと。
消費行動上、発売日が最も近いアイテムが一番上にある可能性が高いけど、
誤差の大きい500位以降になるとそうでないことも結構有ったりする。
それから詳しいことは後述するけど順位の変動もかなり大きかったり。
そんなわけでプログラムの力を借りて自動化してみたわけです。
実のところやってることは単純かつ膨大で「力技」と呼ぶに相応しい(笑)。
なにしろランクを作成するために取得してるアイテム数はなんと750ほど。
AmazonのECS(E-Commerce Service)は同時に10アイテムまで取得できるので
リクエスト数は75回ほどで済みますが……
実行時間が80秒ほどかかる(爆)。
まぁ、手でいちいち調べてるよりは劇的に早いですが。
その
放送中アニメの人気ランキングはこちら
(ブログはサイドバーにもあります)
この人気ランキングはAmazonのDVDのセールスランキングが元なので
よーするにベストセラーページとほぼ同じといっていいかも。
特にTop100に入ってる作品に関してはAmazonでもそのまま出てくるし。
250~300位ぐらいまではアニメのランクを開けばだいたい出てきます。
ページをめくったりスクロールしたりと一望できないのが面倒だけど。
それと実際にこの自動生成ランクを見てもらえばわかると思うけど
250~300位までだとかなり上位の作品しか見ることができません。
あとアニメのランクは
さりげなくタイトルが抜けてたりするし。
(おそらく該当アイテムのジャンル属性が入ってないか間違ってる)
実際にランキングを作って思ったけど、
凄くシビアな結果が出てるなと。
DVDを買いたいと思うほどに支持してる人がストレートに出てるわけで。
テレビの視聴率やブログの記事数よりも人気度に相応しい気がするよ。
少なくとも今のアニメの大半を占める深夜アニメのビジネスモデルは
DVDが売れて初めて成り立つわけで、そーいう意味で有用なデータだね。
シビアと言えば、好きな作品の人気のなさまではっきり見れます(爆)。
よーするに「あさっての方向。」のことですが。
あまり受けないだろうなとは思ったけど、順位が低すぎだ……
最初に見たときは3000位台でちょっと唖然としたのを覚えてるよ。
(順位は300~4000位ぐらいを上がったり下がったりしてる)
「よみがえる空」もそんなに人気なかったけど、まだマシだったのは
男くささとか渋さとか硬派なとこがそれなりに支持されたからかも。
ランキングを作ってもうひとつハッキリわかったことが有りました。
それは
ランキングの変動がかなり大きいってこと。
手で調べてた時も調べるたびにずいぶん結果が変わってたけど、
簡単に調べられるうえに一覧できるのでよりハッキリと実感したよ。
ハルヒの限定DVDが品切れしてもすぐにはランクが落ちなかったので、
リアルタイムランクと言っても単純な売れ行きではないとは思ってた。
直近の24時間の売れ行きで順位付けしてるのかな?と推測したりもした。
でもチャートの動きを追う限りそんな簡単ではないようで。
順位変動の傾向としては売れると順位が上がる。当然ですが。
そして上がった順位は時間とともにじわじわと落ちていく。
そこから推測したのは、より近い時間の売上ほど高いポイントにして
今までの全ての販売数をポイントとして順位付けしたのではないかなと。
つまりずっと上にいるのはコンスタントに売れ続けてるってこと。
そして上がり下がりが激しいのは
売れる間隔が開いてるってこと。
10000位以降のは最後に売れてからかなり時間が経ってるっぽいね。
だから1個でも売れると一気に1000位ぐらいまで上がったり。
順位変動は400位ぐらいから下のタイトルだと特に顕著だったりして。
表示されるランクはあくまで今現在の順位に過ぎないって感じで。
これだと人気度を調べるって意味ではちょっと厳しいっすね。
1週間分ぐらいの変動データを蓄積して平均や偏差を出さないと。
(放送直後にランキングが大きく跳ね上がる傾向もあるから)
しかしそれには
定期的にデータ更新する仕組みが必要になってくる。
このランキングを置いてるsakuraにはcronが使えるコースも有るけど、
今使ってる一番安い約100円/月コースでは使えないのであった。
もともとこの用途で借りてたわけじゃないから。
(コースを変えるには解約して契約しなおさないといけない)
にしてもレンタルサーバーも安くなったもんだねぇ。
傾向を出すのは別として定期的なデータ更新は入れたいっすね。
今はアクセスした人が80秒ほど待つことになるから……
※30分以内の連続アクセスならすぐに表示します
アクセスとは非同期にデータを更新すれば
見てる人は待たすに済むし。
やっぱりcronだけでも使えるとこをもう一つ契約するかな。
[追記] 現在は裏で自動更新しています
ちなみに何故sakuraに置いてあるかというと、
今回のスクリプトはperlモジュールを使いまくりだからです。
特にXMLのパースなんて
自前でなんかやりたくねぇっす。
(AmazonのECSが返してくるのでXMLデータなのです)
あと今回は画面デザインがテンプレート方式になってます。
デザインを決めるのが面倒でBGMテーブルに見た目そっくりですが。
プロバイダーのスペースでもモジュールを選べば使える(らしい)けど
とにかく省力化を目指してたので楽な方法を選びました。
楽をするためのスクリプトに手間をかけすぎるのは本末転倒だし。
スクリプトの中身もやってる内容に比べるととてもシンプルだよ。
てなわけで興味があったら見てやってください。