インフィニットループ 技術ブログ

2012年11月13日 (火)

著者 : matsui

ソーシャルゲームのサービス監視のため、2chスレの勢いをグラフ化するスクリプトを作成してみました

社内見える化委員会のmatsuiです。
前回は社内温度のグラフ化を行いましたが、今回もまたグラフ化ネタです。
弊社インフィニットループでは、ソーシャルゲームの開発を行っており、サーバやゲーム内のプログラムで異変が起こった場合には、いち早く気づく必要があります。
ソーシャルゲームの場合、大抵2chに専用のスレッドが立っており、そのスレの勢いを監視することで、祭りの発生を検知するための仕掛けを作成することになりました。
ゼロからスレッドの勢いを監視する仕掛けを作成するのは大変なので、何かよいサービスはないかなと探したところ、「2ch勢いランキング」さんというサイトがAPIサービスを提供してくれていたため、これを利用させていただきました。ありがとうございます。
→ 2ch勢いランキング API

http://2ch-ranking.net/ranking.json?board=[板名(半角英数)]&callback=callback

のように板名を引数にアクセスすることで、その板にあるスレの勢いランキングがJSON形式で取得できます。カンタンですね。
さて、あとは指定したキーワードでスレ名を引っかけるPHPプログラムを書きましょう。
100行程度の短いプログラムですが、ここに全文を貼るのも不毛なので、githubにアップしておきました。

→ github ketaiorg / Ranking2chWatcher
2chにはレス番1000まで到達するとスレッドを立て直すという通例がありますが、この2ch勢いランキングさんのAPIでは、勢いの高いものから順に並んでいるので、それを上から舐めて一番最初に見つかったものを返すというロジックとすることで、問題なく運用することができました。
設置方法は以下の通りです。

define('BOARD_NAME', 'gameswf');	// 板の名前
define('SEARCH_KEYWORD', '/^.*ブラウザ.*part.*$/');	// 検索キーワードを正規表現で定義(通常はタイトル名を定義)

まず定数BOARD_NAMEに板の名前をセットします。URLの「http://*.2ch.net/」に続く部分の文字列が板名です。
続いて定数SEARCH_KEYWORDに対象としたいスレを検索するための正規表現を定義します。
もし複数のスレが引っかかった場合は、一番勢いのあるスレを対象とします。
設定したらPHPに実行権をつけて実行してみましょう。
勢いを表す数字が出力されるはずです。

$ ./Ranking2chWatcher.php
50

動作確認ができたので、cactiに登録してグラフ化してみましょう。
グラフの登録方法はこちらのページを参考にさせていただきました。
グラフを登録し、しばらく待つとこんな感じになります。
あとはcactiの閾値監視機能でアラートを飛ばせば、祭りを監視でき、バグやサーバダウンの兆候を察知できます。

2chにスレがあるようなサービスであれば、何にでも応用可能なので、みなさんもぜひ試してみてください。

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!