削除通知済ページ監視

ページ

削除予定ページ一覧
https://paranoiac-bb.com/view/watch-plant-to-delete.php

概要

評価の低い記事に描画されている「削除通知済み記事」の一覧を取得し、それぞれのページがどれだけの期間「削除通知済み記事」に存在しているかを監視する。

使用DB MySQL
サーバOS FreeBSD(UNIX)
使用言語 Perl / PHP

大まかな流れ

Phase 言語 動作 補足
1 Perl 評価の低い記事にHTTPリクエストを送り、取得したページ一覧をDBに書き込む 毎時0分に起動
2 PHP DBからデータを取得し、htmlとして画面に描画する Bootstrap使用

使用テーブル定義

Table名: ExecBatLog
カラム名 桁数 NULL許容 PK 説明
BAT_Name varchar 20 × 1 バッチ名
ExecTime datetime × 起動日
CreateUserId varchar 20 × レコード作成者
CreateTime datetime × レコード作成日
UpdateUserId varchar 20 × レコード更新者
UpdateTime datetime × レコード更新日
Table名: PlanToDelete
カラム名 桁数 NULL許容 PK 説明
CreateDate varchar 20 × 1 WikidotPageName
PageName varchar 50 × 2 ページ作成日
ExecTime datetime × Perl起動日時
Discoverd datetime × 初回発見時
Rate varchar 6 評価
Exist tinyint 1 × 存在フラグ

Perlソースコード

基本動作

  1. ExecBatLogテーブルにバッチ起動日を記録する
  2. http://ja.scp-wiki.net/lowest-rated-pagesにHTTPリクエストを送る
  3. 返って来たテキストデータを正規表現で解析し、「削除通知済み記事」に記述されたページ名(PageName)、評価(Rate)、作成日(CreateDate)を取得する
  4. PlanToDelete全レコードのExistを0にUPDATEする
  5. 下記の動作を行うストアドプロシージャを呼び出す
    1. 取得したPageName、CreateDateが「PlanToDelete」に存在しない場合 => INSERT処理(ストアドの仕様参照)
    2. 取得したPageName、CreateDateが「PlanToDelete」に存在する場合 => UPDTE処理(ストアドの仕様参照)
  6. 取得したPageName,CreateDateレコードのRateを更新する
  7. Exist=0のレコードを全てDeleteする

ストアドプロシージャ

レコードが存在しない時のINSERT

CreateTime = Perlで取得した値
PageName = Perlで取得した値
ExecTime = 現在時刻
Discoverd = 現在時刻
Exist = 1

レコードが存在する時のUPDATE

ExecTime = 現在時刻
Exist = 1
書き換え対象
PageName = Perlで取得した値
AND
CreateTime = Perlで取得した値

PHP

基本動作

  1. 「ExecBatLog」から条件「BAT_Name = 'WatchPlanToDelete'」でSELECTを行い、関連バッチの起動日を取得、及び表示する
  2. PlanToDeleteをSELECTする。この現在時刻とDiscoverdの差を計算する
  3. Discoverdと現在時刻の差が72時間以上の場合、経過時間表示セル(td)に背景を薄赤にする設定(class="red")を付与する
  4. ページ読み込み時に経過時間が72時間以上のページがある場合はHttpリクエストを発行し、ページの存在が確認できたものだけをリストに表示する
  5. javascriptによって半リアルタイムに経過時間を測定する
特に指定がない限り、このサイトのコンテンツには次のライセンスが適用されます: Creative Commons Attribution-ShareAlike 3.0 License