【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) "http://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)

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

関連記事

【TwitterOauth】特定のつぶやきを取得してリツイート数順やランダム順にする【PHP】

TwitterOauthを利用して特定のワードをつぶやいたデータを取得してそれをリツイート順なりに並

記事を読む

【PHP】クラスの配列をソートする

クラスのメンバに応じて配列をusortでソートします。クラス内の関数でソートする場合は下のようにする

記事を読む

【PHP】Twitterのツイート数やはてぶ数を取得する

指定URLのTweet数の取得 Twitterでツイート数を取得するには指定のURLにアクセスする

記事を読む

【PHP】正規表現で日付文字列から曜日を削除する

例えば次のように曜日が記述された日付があったときその曜日部分を削除する場合のときの正規表現は次のよう

記事を読む

【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようとしてheaderを指定したのに

記事を読む

【PHP】Simple HTML DOM Parserを使って指定Webページの記事タイトルを取得する

PHPのスクレイピングライブラリのSimple HTML DOM Parserを使って指定Webペー

記事を読む

TwitterAPIでデベロッパー登録しようとすると携帯情報を追加しろと出る件について

TwitterAPIのデベロッパー登録ページ(https://dev.twitter.com)でアプ

記事を読む

【twitteroauth】TwitterAPIで検索して特定のつぶやきをしたユーザーを取得する方法【PHP】

twitteroauthを利用してワード検索して特定のつぶやきをしたユーザーを取得する方法です。tw

記事を読む

Twitterアカウントのアクセストークンを取得する方法

TwitterでBotなどを作るときアクセストークンとコンシューマキーが必要になります。 ざっくり

記事を読む

【PHP】ミリ秒を取得することで制限時間を設けて処理をする

PHPで時間制限を設けてタイマーのような処理をするときの制限の付け方として、処理のはじめの時刻と処理

記事を読む

NVIDIA DIGITSをSupervisorを使って自動起動する

はじめに 先日Ubuntu14.04にDIGITS 5をGPUなしP

【2017年度】GeForce 1080 Ti搭載BTOパソコン比較

はじめに 最近ディープラーニング用にGPUのないPCにDIGITSを

Windows用のシンプルなストップウォッチソフト紹介

Windows(10)でも使える使いやすいKAZAMITimerという

MNISTをDIGITS 5のCPUのみで試す(GPUなし)

はじめに DIGITSを使えばGUI操作で簡単にディープラーニングが

Windowsユーザが初めてMacBookを購入したときの注意点や感想

最近12インチのMacBookを購入しました。今までWindowsしか

Redmine3.2をUbuntu14.04にインストールして躓いた所についてメモ

はじめに Ubuntu14.04 ServerにRedmine3.2

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

→もっと見る

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