まさはる's Weblog

まさはる's Weblog
Macintoshとオーディオの話題

2004年8月17日

更新日時順リンクのCGIを作ってみました(その2)

Category : Web / Posted at 2004年8月17日 23:16

 更新日時順リンクをしばらく使ってみて特に問題なさそうなので、CGIのソースをダウンロードできるようにしました。使用したい方はhtmlの箇所等を適宜修正して、自己責任で使用してください。

 更新日時順リンクのCGIのダウンロード

  • プログラムの仕様等
     使用言語と開発時のバージョン: Perl v5.8.1-RC3
     文字コード: UTF-8(データファイルも同じ)
     改行コード: LF(データファイルも同じ)
     使用しているモジュール: Fcntl, DB_File, LWP::UserAgent, CGI::Carp
  • ファイルの構成
     link-1.2.zipファイルを解凍すると以下のようになっています。

    link-1.2/ -+- link.cgi           CGIプログラム
               +- data/ --- link.txt データファイル
  • CGIプログラム(link.cgi)の修正
     プログラムは、データファイルのパスを変更しない限り、そのままの状態で動作するようになっています。cssの指定やサイトのヘッダー及びフッター等は、165〜177行及び224〜231行を追記・修正してください。なお、この部分はヒアドキュメントを使用しているため、記載した内容がそのままhtmlとして出力されます。
  • データファイル(link.txt)の修正
     データファイルについても、そのままの状態で動作するようになっています。カテゴリー名(必須)、サイト名(必須)、アドレス(必須)及びコメントを、データファイルに記載されている書式で追記・修正してください。

     なお、データ作成に当たっての注意事項等は以下のとおりです。
    ・書式に合わない行は無視されます。データ行の最後には改行が必要です。
    ・リンク先のアドレスが http:// で始まらない行は無視されます。
    ・コメントを入れない場合は、コメントの箇所を""としてください。
    ・データの順序が表示順に影響する事はありません。また、カテゴリー毎にまとめる必要はありません。
    ・同じアドレスの行が複数ある場合は、最後のデータで上書きされます。したがって、同じアドレスを複数のカテゴリーに登録することはできません。
    ・カテゴリー名はPerlの標準的な文字列順にソートされます。したがって、先頭に英数字等を入れる事で表示順を操作できます。
    ・カテゴリー名、サイト名及びコメントには、<img>タグ等のインライン要素が使用可能です。
    ・&、<、>、"は自動的に変換されるので、そのまま使用可能です。なお、タグの<と>及びその内部については自動的に変換されません。
    ・{と}の中かっこは上記変換時に使用するため、カテゴリー名、サイト名、コメントに使用できません。
  • 設置方法
     サーバーの定められた場所(定められていない場合は任意の場所)にアップロードして、パーミッションを正しく設定して設置してください。例えば、suExecを使用しているC'S SERVER Personalのパーミッションの設定は以下のとおりです。

     dataディレクトリ: 701
     CGIプログラム(link.cgi): 700
     データファイル(link.txt): 600

     ちなみに、Mac OS Xの ~/Sites/ 以下に設置する場合のパーミッションの設定は以下のとおりです。

     dataディレクトリ: 777
     CGIプログラム(link.cgi): 755
     データファイル(link.txt): 644

     dataディレクトリをCGIプログラム(link.cgi)と同じ場所に置かない場合や、dataディレクトリの名称を変更して使用する場合は、プログラムの41行のデータファイル(link.txt)のパス及び、44行のデータベースのパスを変更内容に合わせて修正してください。
  • プログラムの内部構造等
    ・リンク先の調査は、HTTPヘッダの取得により行います。その中に含まれる最終更新日時(Last-Modified)を基にソートを行っています。
    ・リンク先の調査は、サイト毎に前回の調査から設定時間以上経過しないと新たに調査を行いません。なお、デフォルトの設定時間は24時間です。
    ・サイト毎に経過時間を見て調査を行うため、調査時刻は同じではありません。
    ・データベースは、オープン時に排他ロックをかけています。
    ・データファイルのリンク先のデータ行が削除された場合は、データベースの当該データも削除されます。
    ・表示される日時の値にはlocaltime関数を使用しています。したがって、CGIプログラムを設置するサーバーによっては日本時間でない場合があります。
    ・調査時に、リンク先のサーバーから400〜500番台のステータスが返ってきたサイトは、ページの下部にエラーメッセージと共にまとめて表示されるようになっています。
    ・&、<、>、"の変換ルーチンは、大崎氏のPerl正規表現雑技を参考にして作成しました。なお、タグの識別は、<で始まり>で終わる最も狭い範囲としており、タグの内容はチェックしていません。したがって、<あ&い>もタグと識別され、両端のかっこと真ん中の&は自動的に変換されません。
    ・カテゴリー名、サイト名及びコメントは、リストタグ(<li>〜</li>)の中に入れられて出力されます。
  • その他
    ・初回のCGIプログラムの動作時には、調査結果がないため何も表示されません。リロードすると調査結果が表示されます。
    ・dataディレクトリ内に作られるデータベースファイル(*.db)が壊れてエラーが表示される場合は、そのデータベースファイルをFTPソフト等で削除してください。次回CGIプログラムの動作時に自動的に作られます。
    ・htmlの出力の文字コードをEUC-JPに変更する場合は、CGIプログラムの163行と168行及び、プログラムとデータのファイルの文字コードを変更する必要があります。
このページのトップに戻る