【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
  • このエントリーをはてなブックマークに追加

関連記事

mailsendtest

【PHP】file_get_contentsでリンク元などのヘッダ情報を変更する

file_get_contentsで他サイトの情報を読み取る際などでリンク元を明記したい場合は以下の

記事を読む

no image

【PEAR】Services_AmazonのItemLookupで複数ASINを指定する

Amazon Product Advertising APIをPEARのServices_Amazo

記事を読む

source_php

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

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

記事を読む

PAK85_seijinsikikeitai20140113500-thumb-500xauto-4104

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

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

記事を読む

CalenderImage

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

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

記事を読む

PAK86_atamakakaerujyosei20140125500-thumb-500xauto-4730

【MySQL・PHP】WHERE句とORDER BY句を使った#1064エラーについて

MySQLで次のようなクエリを出すとエラーとなって帰ってきました。 SELECT * from

記事を読む

encodingtype

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

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

記事を読む

8999371750_ee7e782a16_m

【CakePHP3】無関係な複数テーブルのデータを一つのコントローラで扱う

CakePHP3で一つのコントローラないでお互い独立したテーブルを扱うには単純にTableRegis

記事を読む

branch-67844_640

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

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

記事を読む

twittersearch

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

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

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

TAKEBE055122558_TP_V
寝る前にスマホを見ると斜視になる可能性とその対策

はじめに  寝る前などスマホを横になりながら見続けると斜視になる可能

→もっと見る

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