INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2010-10-20 00:01 / 次へ→ / 最新へ⇒

■はてなダイアリーの更新日付の取得(PHP使用)

2010年10月20日(水) 0:01:11 [はてなダイアリーから転記]



RSSRSS配信中
https://www.inasoft.org/



INASOFTのトップページでは、更新日付を、自身のファイル(index.html)と、はてなダイアリーの自分のページのどちらが最新かを判断して、最新の日付を採用するようにしています。

メモがてら、どういう風に実装したのかを書いておこうかと思います。

<?php
$htdy_url = 'http://d.hatena.ne.jp/ayacy/';
$indx_date = filemtime("index.html");
$htdy = get_headers($htdy_url, 1);
if ($htdy) {
  $htdy_date = strtotime($htdy['Last-modified']);
}
if ($htdy && $htdy_date ?&gt; $indx_date) {
  echo date("Y.n.j", $htdy_date);
}
else {
  echo date("Y.n.j", $indx_date);
}
?>

はてなダイアリーの自分のページからヘッダだけ取得して、Last-modified を取得して、更新日付と見なします。ここらへん、はてなダイアリーでは正確に日記の最終更新日時としてのLast-modifiedを返してくれるようなので。

問題は、はてなダイアリーが何らかの理由(障害など)で応答しなかった場合。これは、実際に試したことはないのですが、きっとget_headers() が false を返してくれるんじゃないかと想像しています。

で、get_headers() が false を返した場合は、index.html側の更新日付を利用するような仕組みです。

なお、トップページにアクセスがある度に最終更新時刻をはてなサーバに問い合わせていたら、なんかDoS攻撃みたいになっちゃうことがあるかもしれませんので、実際にはこの情報をキャッシュしておき、最低10分間は再問合せをしないような仕組みを構築しています。




Posted by つっちー at 2011/07/23 13:59:22
実際には、get_headersの問い合わせをキャッシュしているとありますが、どのように実装していますでしょうか?

Posted by ayacy at 2011/07/23 14:08:02
今はここに書かれている状態から少し変わっていますが、大まかには、
(1)最初にindex.htmlにアクセスされたときget_headersし、得られた日付時刻情報を文字列化してファイルへ保存(キャッシュ書き込み)
(2)2回目以降にindex.htmlへアクセスされたときは、(1)で書き込んだファイルのタイムスタンプを調べ、現在時刻と比較して10分以上経過したかどうかを調べる。経過していなければファイルから日付時刻を読み出し(キャッシュ読みだし)、経過していれば(1)を行う
みたいな流れですね。


目次 | ←前へ / 2010-10-20 00:01 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3212366 (+0063)[+0214]

Copyright© 2010-2024 INASOFT