久々東京では雪が降りました。
こんな雪の中、仕事いきたくないなぁ、家でゲームでもしていたいなぁ、
と思うのは私だけではないはず。
さて仕事をしながらプライベートでもここのところ、プログラムを組みまくっていました。
更新で自動化できるところは片っ端から自動化しようと手をつけました。
(1)パステル・ミディリン:ラジオ局放送一覧を音楽ライブラリと連携
(2)パステル・ミディリン:イラスト、DQ・FF攻略、やりこみ、ゼロ・マニアのコンテンツ数自動取得
(3)FF4リディア同盟:トップページと更新情報を同時反映、トップページに一通りのデータを自動取得
(4)花粉症blog:blog記事最新一括自動取得
(1)パステル・ミディリン:ラジオ局放送一覧を音楽ライブラリと連携
以前はラジオ局一覧はHTMLで作成していたのですが
PHP+DB化をして、今は作曲者情報、曲名などをミディリンの音楽データベースから取得して表示しています。
http://midilin.cloudfree.jp/midilin/php/music_search/music_radio_index.php
まだ曲リンクなどの情報を組んでいないので、見かけは以前とほとんど変わらないのですが
今後拡張次第で、曲名に曲のURL情報を付加させたりすることが可能です。
自動化ではないのですが、今後のコンテンツの使い勝手良さを考えて実装しました。
(2)パステル・ミディリン:イラスト、DQ・FF攻略、やりこみ、ゼロ・マニアのコンテンツ数自動取得
DQ・FF哲学などは以前から採用していたのですが
各コンテンツのHTML数(PHP数)をカウントし、自動的に
http://midilin.cloudfree.jp/midilin/php/writing/writing.php
のページに反映するようにしました。
今まで、各コンテンツを掲載するときは(投稿者による文章関係のコンテンツ)
・コンテンツ作成
・トップページ
・更新情報
・上記のページのカウント数
の4つを触る必要があったのですが、コンテンツをFTPでアップするだけで
一番下のカウント数を反映する作業が必要がなくなりました。
数が多くなると数えるのも面倒くさかったり数を数え間違いするのですよね。
またチェルト美術館や投稿絵画館などのgif、jpegなどもプログラムでカウントして
イラストをアップしたら、カウントが自動的に反映される仕組みを作りました。
(3)FF4リディア同盟:トップページと更新情報を同時反映、トップページに一通りのデータを自動取得
FF4リディア同盟は大幅に手を入れました。
トップページをHTMLからPHPに変えたことによって、内部的にプログラムを使用できるようになりました。
そこで、今まで更新情報はHTMLだったのですが
HTMLからデータの部分をCSV化し、表示部分はPHPに切り替えました。
http://midilin.cloudfree.jp/ff4_rydia/whatsnew/whatsnew.php
普通、何か更新が発生したときはミディリンの場合と同様、
トップページ、更新情報の2つに更新内容を書き換えないといけませんが
CSVにデータを記述することによって、
トップページ、更新情報のそれぞれのPHPがCSVを読み込み、
トップはCSVの最新3件、更新情報は1年ごとにデータを表示するという方法に切り替えました。
これで更新の手間が半分に減りました。
またトップページのPHPで
会員数(CSVを行ごとにカウント)、イラスト数(jpeg数をカウント)、考察数(XMLを解析してカウント)
投票数(CSVの各投票ロジック部分を解析してカウント)、リンク数(CSVの行をカウント)
など自動的にデータをカウントして、トップページに表示する仕組みを作りました。
これにより更新情報だけでなく、どのコンテンツがどのくらい増えているのかも一目瞭然でわかるようになりました。
本当はパステルミディリンもトップページをPHP化して更新情報をCSVを読み込み、出力したいのですが
ミディリンの場合は、トップページがso-netでPHPが使えないのでHTML
他のコンテンツをさくらインターネットのPHPという形で作成しているので、こういう仕組みができないのですよね。
トップページをso-net→さくらインターネットに移行すれば、
トップページと更新情報の同時更新や、各コンテンツのカウント数(例えば、チェルトやカンダタなどのHTML数を数えて表示など)
ができるのですが、Justnetからso-netにトップページを変えざるを得なかったとき
えらい苦労したので、もうトップページは変えたくないのですよね。
そのため、ここのみは手動で同時更新は諦めます。
(でも、毎日更新するとこの二箇所の更新が結構手間で負担がかかるのは事実)
(4)花粉症blog:blog記事最新一括自動取得
gooやlivedoorのページに行くと、blog検索が行えます。
blog検索ではblogが更新された順に最新10件表示されるのですが
これを利用して、「花粉症」というキーワードで検索された結果を取得して
一括表示するという仕組みを作りました。
http://midilin.cloudfree.jp/kahun/index.php?mode=page&aim=B2D6CAB4BEC9C2BE626C6F67B5ADBBF6B0ECB3E7B8A1BAF7
これを実現するのが一番難しかった。
PHPを使うと、指定したURLの情報を表示できるということができるのです。
これを応用して、検索結果のURLを取得してメモリ内に格納、
PHP内でいらない部分を削り、ブログ内に表示するというプログラムを作りました。
しかしこれをいざブログ内に組み込んでみると
ページ遷移の度に、gooやlivedoorに検索がかかるので
処理が重くなるのですよね。
これを改善するために、何か無いか模索していたところ
さくらインターネットでは「cron」というものが使えるのですよね。
専門的な話で申し訳ないのですが、cronとは
スケジューラみたいなもので、定期的(例えば一時間に一回)に何かをさせたいときなどに使います。
掲示板のログを自動的に別の形に生成しなおしたり
自分が設定したURLを自動巡回したりとか
別フォルダにファイルのバックアップをとったりとか、使い方次第ではいろいろ可能です。
自分のPCがスケジュールで勝手に動くものと考えていただければよいです。
あらかじめ、cronで1時間に一回プログラムを動くように設定して
上記のPHPでHTMLを生成し、それをブログのPHP内に表示させるという方法であれば
ユーザが画面をクリックしたときは、事前に生成されたテキストを表示させているだけなので
クリック時に検索ロジックは走らず、画面を素早く表示してくれます。
cronは仕事で触ったことがないので、ネットでcron関連の記事を調べ
cronの使い方を覚えます。
その後、PHPをcronで1時間に1回自動的に実行させようとしました。
cronは悪戦苦闘の上、動きました。
でもPHPのプログラムは動かない。何で!?
またネットでいろいろ調べてます。
そうすると、また技術的な話になって申し訳ないのですが
JavaやC言語と違ってPHP言語で書かれた画面処理はApacheによって動きます。
これは何を意味するかというと
C言語やJavaなどはプログラム単体で動くのですが
PHPはWeb上でブラウザから何らかのアクションがないと動かないという意味です。
画面を見るわけでもなく、ただPHPのプログラムをcronで実行しても
実際にはブラウザを立ち上げてPHPをURLで指定したり
ボタンを押すわけでもないので
プログラムはまったく動かないのです。
これがわかったのが、プログラムを組み終わった後の翌日、絶望しました。
今までの苦労はなんだったのだと。
落ち武者のように打ちひしがれながら、どうにかできないか、
ネットでさらに調べます。
そうすると、PHPをバッチ処理させるには三通りの方法があるという記述を見つけました。
1.バッチ処理を画面処理として走らせる
2.ほかの画面処理のついでにバッチ処理を走らせる
3.CGIコンパイル版PHPエンジンを併用する
この三通りがあるとのことです。
1.バッチ処理を画面処理として走らせる
これは何のことかというと、サーバー上のLinuxでブラウザによるアクセスをさせ
PHPを実行させるという意味です。
我々がホームページを作成しているPCは、ほとんどがWindowsかMacでしょうが
実際にFTPでホームページをアップしているサーバーは、Linuxが一般的です。
きっと皆さんがページを作って上げている先は9割以上がLinux(Unix)でしょう。
Linuxというと、MS-DOSのようにマウスを使わずコマンドのみで
プログラムを実行、表示するイメージがありますが
Linuxにはコマンド上でネットにアクセスするコマンドがあります。
「lynx」や「wget」という方法で
「lynx」はテキストブラウザみたいなもの
「wget」はダウンローダみたいなものです。
普通、我々がこうやってホームページを閲覧するときは
Internet ExplorerやNetscape、Operaなどのブラウザを立ち上げて
URLを打ち込むと、画面が表示されますが
Linux上で
lynx URL
というコマンドを打つと、それが画面上に表示されます。
また
wget URL
ということをすると、指定したURLをダウンロードしてくれます。
さくらインターネットでは「シェルスクリプト」も使えるので
(シェルスクリプトとは、LinuxやUnixで動かすコマンドを、連続実行させるため並べたようなもの)
cronでスケジュール設定
↓
シェルスクリプト実行で、wgetを使用してPHPにアクセス
(lynxを使用するとコマンドが終了されず待ち状態になるため、wgetを使用)
wgetでダウンロードしたファイル(空ファイル)をrmでシェルスクリプトで削除
(ダウンロードしたファイルはいらないから。使いたいのはwgetでPHPにアクセスをして生成されるファイルのみ)
↓
PHPを実行
という三段構えで、どうにか自動更新が実現できました。
シェルスクリプトもcronも、wgetもこの時ネットで初めて知ったので
初めてづくしで苦労しましたが、自分の思い通りに動くと嬉しいものですね。
花粉症blogは最初メモ程度で調べたことを記述していなかったのですが
まだ公開して一ヶ月くらいなのに多いときは1日に300人~500人くらいのアクセスがあるようなので
(これから花粉症の時期というのもあるでしょうね)
がんばってプログラムを作ってみました。
まぁ、大元のgooやlivedoorの表示(デザイン)がかわった場合
検索結果をインデックスに表示するPHPのプログラムで
正しくHTMLが生成されなくなるので、この機能も使えなくなるのですが。
上記のプログラムを使えば、例えば「音楽」というキーワードを設定すれば
音楽関連で更新されたblog一覧の取得ができるので、
音楽ページにそれを貼り付けて表示するということも可能になります。
写真のページに写真関連のblogという手も面白いかもしれません。
cronとシェルスクリプトの使い方が今回わかったので
スケジュールによる自動更新も、アイディア次第で可能です。
また私用目的で、自分が必要な情報を定期的に取得するようにcronで設定しておけば
自分のPCは立ち上げていなくても
さくらネットのサーバーが勝手にやってくれて
後は自分がPCを立ち上げたときに、スケジュールで自動実行+取得したファイルを見ることもできますし。
サーバーには毎日アクセスさせて、自分は一週間に一回、そのまとまった内容を見るなんていうこともできるでしょうし
連休中家をあけるときとかにも使えるでしょうね。
ホームページ作成以外にもいろいろ用途がありそうです。
それにしてもさくらインターネットはすごい。
年間5000円でサーバー領域1Gで、こんな機能まで使わせてくれるなんて。
複数サイト運営しても、容量はまだ充分に余っているし、
サーバーを借りるとき、容量、Perl(CGI)、PHPとデータベース(Mysql)が使えることは頭の中にありましたが
cronやシェルスクリプト、Telnetなどの機能を提供していたのは今回初めて知りました。
メールアドレスも無限に作れますし。
(メールアドレスを無限に作る方法は
HP作成講座の番外編http://midilin.cloudfree.jp/midilin/yasuda/web_kouza/bangai001.htmに記述)
Telnetでのアクセスも行え、今回シェルスクリプトの実行やcronの実行も
Telnet上で確認していたのですが、普通ここまで使用できるところってあまりないですよね。
他にもrubyやpython、gccなども使えるようなので、かなり専門的なことまでできるのではないでしょうか。
前々回の日記で記述した2月データ消失事件がありましたが(笑)
あの後、さくらインターネットのHDDのデータ取出しができたとサポートセンターから連絡があり
その時のバックアップデータをあげてもらい差分更新して、元に戻すことができました。
サポートも早く来て良いです。
さて、そんな上のようなプログラムを組みながら、チェルトの執筆状況ですが
今年になってゾーマ城の敵、また各ボス(キングヒドラ、バラモスブロス、バラモスゾンビ)などの
シーンも書き終わり、あとはゾーマの戦いを残すのみとしました。(第426話まで)
後10話くらいで完了でしょうか。
執筆完了リストには一応伏字にしておりますが、後ろの方はみんなゾーマ城で出てくる敵の名前が入ります。
見ていただければ、何話が何の話なのかがだいたい検討がつくはずです。
今書くのに悩んでいるところは、ゾーマとの語らいのところで
ゾーマが何故世界を征服しようとしたのか、というところです。
ゲームでは当たり前のように主人公はラスボスと戦う運命になりますが、
世界を征服しようとしたからなにはラスボスにも何かしらの理由があるはずです。
ゲームではその辺の描写がほとんどされていません。
チェルトの世界では、ゾーマが世界を征服しようとしたその経緯を
竜の女王編のところで記述しましたが、まだ描写不足の気がします。
すべてを迫害してまで、世の中を恐怖で統一しようとしたゾーマには
どういう理由があったのか、そこをうまく描写できばよいなと思います。
コメント
なかなか面白い内容で、興味深く読ませてもらいました。さらっと書かれてますが、かなり大変だったでしょうね(^^;やっぱりLinuxの方が何かと便利だし安全ですね。自宅サーバーもVineLinuxあたりでできないか勉強中です。
実現まではまだまだ時間がかかりそうですが(^^;
あとppBlogですが、検索モジュールにXSSの脆弱性があるらしく、
開発者のmartinさんが、早急のアップデートを呼びかけています。
まだでしたらアップデートをお勧めします。
http://blog.tagscript.com/index.php?mode=show&UID=1109887481
masanoriさん、ppBlogの情報ありがとうございました。
結構マメにチェックしていたのですが、
XSSの脆弱性は初めて知り、サイトのほうチェックしました。
ここと、メモブログ、花粉症blog、3つともモジュールを入れ替えました。
もうすぐppblogの1.4がリリースされるとのことなので楽しみですね。
検索結果で記事のリンクが消える現象や
トラックバックスパムの防止など期待が高まります。