【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】TwitterAPIで検索して特定のつぶやきをしたユーザーを取得する方法【PHP】

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

記事を読む

【PostgreSQL】psql version 8.4, server version 9.5

PostgreSQLを使おうとしたところ下記のような警告が出てきました。 -bash-4.1$

記事を読む

PHPでページリロードをしようと思ったができなかったので

header("Location: ".$_SERVER); とすればページをリロードでき

記事を読む

スクレイピングをサポートしてくれるAPI【kimono】

kimonoというスクレイピングをAPI化してくれるという素晴らしいサービスがあります。

記事を読む

ニコニコ動画のURLリンクから外部プレイヤーのスクリプトに正規表現で置換する

ニコニコ動画の動画のアドレスを抽出して外部プレイヤー貼りつけソースのスクリプトに変換するソースです。

記事を読む

【PHP】Simple HTML DOM Parserを使って属性の値を取得する

PHPでSimple HTML DOM Parserを使ったスクレイピングで指定の属性の値を取得する

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【PHP】dateで指定日前の日付を出力する

指定日前の日付の取得方法 date_default_timezone_set('Asia/

記事を読む

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

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

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

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

スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

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

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

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

任意URL サイト名 サイトURL RSS1.0

格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

→もっと見る

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