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]

目次 | ←前へ / 2013-01-09 00:00 / 次へ→ / 最新へ⇒

■ひさびさにPHPを心赴くままに書いたら

2013年 1月 9日(水) 0:00:00 [さくらのブログから転記]



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



INASOFTのトップページでは、このブログ(さくらのブログ提供)の更新時間の情報を定期的に取得しています。
その結果得られた情報を、更新日時情報として表示しています。

このための仕組みはPHPで書かれており、「はてなダイアリー」の頃はHTTP経由でヘッダの取得(get_headers関数)を行い、最終更新日時(Last-modified)を求めて、strtotime関数によって文字列変換することによって行っています。

さくらのブログへの移行後、この方法を用い続けていたのですが、どうもうまくいかない場合がある様子。
というわけで、方法を考えたところ、RSSから情報を取得すれば良いかなぁと思いつき、さっそく PHP で書いてみることにしました。


// さくらブログから日記更新日時を得る
$htdy_url = 'http://blog.inasoft.org/index20.rdf';
$pubDateTag = '<pubDate>';
$pubDateTag_e = '</pubDate>';

$handle = fopen($htdy_url, "r");

  if ($handle) {
    // 問い合わせ成功。<pubDate>タグを探し、最終更新日時とみなす
    while(false !== ($buf = fgets($handle, 1024))) {
      $s = stripos($buf, $pubDateTag);
      if ($s !== false) {
        $e = stripos($buf, $pubDateTag_e);
        if ($e !== false) {
          $htdy = substr($buf, $s+strlen($pubDateTag), $e-$s-strlen($pubDateTag));
          break;
        }
      }
    }
    fclose($handle);
   
    $htdy_date = strtotime($htdy);
  }


途中は色々省略しています。
心赴くままに書きすぎて、コメントがありません。いずれはコメントを書き加えなきゃ。

要は、さくらのブログのRSSにHTTPでアクセスし、その内容をテキストとして取得します。
内容はXMLになっているわけですが、あれこれ考えるのが面倒くさかったので、とりあえず一番最初に見つかった"<pubDate>"の含まれる行を抽出し、さらにその行にあるはずの"</pubDate>"も見つけて、その間にある文字列を取得します。

おそらく日付時刻の文字列形式になっているはずなので、それを日本人がなじむようにstrtotime()に与えて変換し、画面表示用の情報を取得します。

これを、適度な間隔おきに実行します。

最近はWebプログラミングがマイブームです。




目次 | ←前へ / 2013-01-09 00:00 / 次へ→ / 最新へ⇒


目次の表示:


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


- 最近の更新 -



3130736 (+0116)[+1082]

Copyright© 2010-2024 INASOFT