#4928

文字数統計全自動化


web制作


このブログは文字数をカウントするために、テキストファイル形式でアーカイブを取っています。
もともとはガラケー時代に携帯で自分で読み返すことが割とよくあったので、
携帯でもネットに繋がずに読めるようにということで重宝していたのですが、
スマホになった今は読みたければ自分で自分のサイトに行けばいいだけなので、
アーカイブはその意味では形骸化しています。

しかし文字数はWordPressプラグインでもカウントしてくれるものがなく、
スマホ時代はこれとタイトル順記事一覧のためだけにアーカイブを取り続けていました。
しかしその方法というのが各記事ページにアクセスして、本文をコピペして、
テキストファイルを新規作成、リネームして、貼り付けて保存して……と手間がかかるもの。
慣れれば1分に2本くらいは処理できますが、
半年くらい放置するとそれだけで180本とかになってしまうので正直しんどいです。

以前もRubyというプログラミング言語に触れたときに
自動化できれば楽なのになぁと思ったことが思ったことがありましたが、
この度それをPHPでやってみたらあっさり実装できました。
内部コードはこんな感じです。
(*イタズラ防止のため一部コードは改変しています。このコードをそのまま実行しないでください)


ほんの1時間程度で作ったコードなので細かいところはガバガバですが、
ざっくり大まかな流れとしては
(1) file_get_contents()で各記事のソースを取得、
(2) 正規表現関数preg_match()で必要な部分だけを切り出し、
(3) 出力用に整形して、
(4) file_put_contents()でファイルを出力する。といった感じになっています。

上記1と4にある関数のおかげでたった一行だけでファイルやソースの取得・出力ができるため、
思っていたよりも全然気楽に実装できました。
一番悩んだところは正規表現による切り出しですが、
これはhtmlspecialcharsで一旦特殊文字を処理したソースをechoで表示してみて、
ソースを表示しているページのソースから目的の部分を探すのが手っ取り早そうです。
大抵divか何かで囲まれているので、クラス名を巻き込んで開始タグと終了タグを指定すればOK。
ページを表示した瞬間からバックグラウンドで取得が始まり、
終わると取得結果がページに表示するようになっています。
ボタンを押したら取得みたいに作るともう少しスマートなのですが、
とりあえず今回は動けばいいやということでこれで妥協。

ただ問題点として画像処理が曖昧なのでその辺は最終的には手動作業が必要になっています。
URLを全部消すこともできるのですが、
本文に画像キャプションが付いているような記事だとキャプションだけ残ってしまうので
今回はその辺はスルーすることにしました。
ちなみに記事が大量の場合、set_time_limit()関数でタイムアウト時間を設定する必要があります。
初期は30秒らしいので、これだと連続6本程度しか出力されません。

まぁなにはともあれ、こんな風に全自動化できるとスッキリしますね。
今まで少なくとも4800本は手動でアーカイブを保存してきたので、
単純計算で40時間は単純な切り貼り作業をしてきたことになるわけですが、
それがぼーっと眺めているだけで次々にファイルが生成されていく様はなかなか爽快です。
この辺がプログラミングをやっていて面白いところなのかも。

コメントを残す