【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

公開日: : PHP, 正規表現

スポンサーリンク

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。
流れとしては指定のWebページHTMLを取得→RSS1.0、RSS2.0、atomのURLを正規表現で抽出という形になります。特になんかのライブラリとかは使っていません。

フィード抽出プログラム

まずはどういった文字列を含むリンクタグがフィードのURLを表しているのか決めておきます。今回は下記の3つをのどれかをtype属性として持つlinkタグを抽出することにします。

“application/atom+xml”
“application/rss+xml”
“application/rdf+xml”

PHPプログラム)

<?php
function get_rss_links($html) {
    $dst = null;
    if (preg_match_all('/type\=[\"|\']application\/(rss|atom|rdf)\+xml[\"|\'][^<>]*href=[\"|\']([^<>\"\']+)[\"|\']/i', $html, $m)) {
        $dst = array();
        $len = count($m[1]);
        for($i=0;$i<$len;$i++) {
            $tmp = array();
            array_push($tmp,$m[1][$i]);
            array_push($tmp,$m[2][$i]);
            array_push($dst,$tmp);
        }
    }
    return $dst;
}
//表示テスト
var_dump(get_rss_links(file_get_contents("http://mementoo.info")));

表示結果)

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(3) "rss"
    [1]=>
    string(34) "https://mementoo.info/archives/feed"
  }
}

上の例ではこのサイト(mementoo.info)からフィードを検出するということをしています。

get_rss_linksという関数がフィードを取得する関数です。これの戻り値がrdfかatomかrssか(単純にapplication/xxx+xmlのxxx部分です)といったフィードのタイプとそのリンクの配列となっており、複数のタイプのフィードが存在する場合にも対応しています。
(上の例では1種類しか検出できませんでしたが、例えばライブドアブログでは2種類備えているものが多い気がします。)

ちなみに何もフィードが無い場合NULLを返します。

上の正規表現で果たして良いのか不明ですが、ちゃんととれているので良い気がします。。。

サンプルデモ

上記の仕組みを利用して特定のURLからタイトルやURL、フィードを取得するデモを作成しました。
(タイトルの取得についてはホストURLから取得するという形をとっています。)

フィード抽出ツール(RSS1.0、RSS2.0、atom)

スポンサーリンク
  • このエントリーをはてなブックマークに追加

関連記事

WordPressサイトのSSL対応(HTTPS化)手順のまとめ【さくらサーバー】

先週頃にこのサイトをSSL対応しましたのでその流れについてまとめておき

【Google Charts】動的にグラフを更新する方法

はじめに Webサイト上でグラフを描こうと思った場合、いくつかのJa

体重変化量計算シミュレータ【ダイエット/肥満】

ツール本体 入力 カロリー入力 1日の余剰摂取/消費カロリー

おサイフケータイ対応ストレージ32GBのSIMフリースマホまとめ【2017年秋版】

はじめに SIMフリーの格安スマホのおサイフケータイ機能付きのもので

リクルート期間限定ポイントの有効な使い道

はじめに  先日クレジットカードの見直し活動の一環でポイント還元率の

初心者がお金を貯めるための節約・財テク手法まとめ【ポイント還元・投資・税金対策】

はじめに  最近なるべく節約しようと思い、お金周りに関して色々調べて

動画講座を効率的にキャプチャして復習する方法

はじめに  最近、動画媒体の講座などをたまに視聴しています。独学だと

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑