新着情報を受け取る!PHPでRSSを取得する方法【初心者向け】

初心者向けにPHPでRSSを取得する方法について解説しています。simplexml_load_file関数を使ってRSSを取得する書き方を紹介しています。実際にサンプルコードを書いているので、ぜひ参考にしてみてください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPでRSSを取得する方法について解説します。

RSSを取得する関数の使い方を紹介しているので、書き方を参考にしてみてください。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでRSSを取得する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

RSSとは

RSSは「Rich Site Summary(リッチ・サイト・サマリー)」の略です。

ブログサイトなどでRSSのアイコンを見かけたことがあるという方は結構多いのではないでしょうか。RSSとは簡単に言えば、「ブログやニュースが更新されたことを知らせるためのフォーマット」です。

今までお気に入りのサイトやブログが更新されたかどうかは、そのサイトに見に行かなければ気づけなかったのですが、RSSを利用することで更新された事が通知されるようになり、わざわざサイトへ行って確認する必要がなくなりました。

ブロガーやサイト管理者は、RSSのフォーマットに従ってXML形式でWebサイトの見出し・要約・更新内容などを入力し、それをRSSフィードと呼ばれるURLで公開します。

RSSを受け取る側は最新情報を受け取りたいサイトが発行しているRSSフィードをブラウザやRSSリーダーといったツールで登録します。

するとブラウザやRSSリーダーが定期的に登録しているRSSフィードに更新があったかどうか確認を行います。もし更新があればそのRSSフィードから情報を取得し教えてくれます。

このような仕組みでRSSを登録することで、登録したサイトの最新情報を受け取れるようになっています。

 

RSSを取得する関数

よく紹介されているのはsimplexml_load_file関数になります。

simplexml_load_fileの第一引数に取得したいRSSフィードのURLを設定すると、そのURLからXMLを読み込み、そのXMLを解析してSimpleXMLElementクラスのインスタンスに変換してくれます。

変換されたSimpleXMLElementインスタンスを操作して、柔軟にタグにアクセスして欲しい情報を取得できます。

ただ、simplexml_load_file関数だけでは対応できないケースがあります。

RSSの中にXMLに対して不正な文字が含まれていた場合に、パースエラーとなり解析失敗となります。

その際はfile_get_contents関数でRSSフィードを引数にして文字列としてXMLを取得し、取得した文字列から不正文字を削除し、simplexml_load_string関数でSimpleXMLElementクラスのインスタンスへ変換しましょう。

その後は、simplexml_load_file関数と同様になります。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

ソースコード

// techacademyマガジンのRSSフィードからRSSを取得します
$feed = file_get_contents('https://techacademy.jp/magazine/feed');

// XML解析を行う上で、XMLで不正文字と扱われる対象を空文字に変換します
$invalid_characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/';
$feed = preg_replace($invalid_characters, '', $feed);

// 文字列をXMLとして解析して、SimpleXMLElementクラスのインスタンスに変換
$rss = simplexml_load_string($feed);

// 1つのアイテム(更新単位)毎に情報を出力します
echo('----------------------------------------'.PHP_EOL);

// $rss->channel->itemではまず、
// xmlタグの1階層下にあるchannelタグにアクセスし、
// 最終的にはそのchannelタグの1階層下にある複数のitemタグにアクセスしています
// 複数のitemタグは配列扱いとなっているため、foreachでループさせる事が可能です
foreach($rss->channel->item as $item){

    // itemタグの1階層下にあるtitleタグを取得します
        $title = $item->title;

    // itemタグの1階層下にあるpubDateタグを取得し、年月日に変換します
        $date = date(""Y年 n月 j日"", strtotime($item->pubDate));

    // itemタグの1階層下にあるlinkタグを取得します
        $link = $item->link;

    // itemタグの1階層下にあるdescriptionタグを取得し、HTMLタグだけを削除します
        $description = strip_tags($item->description);

    // それぞれの情報を出力します
    echo($title.PHP_EOL);       // タイトル
    echo($date.PHP_EOL);        // 更新日
    echo($link.PHP_EOL);        // リンク
    echo($description.PHP_EOL); // 概要
    echo('----------------------------------------'.PHP_EOL);
}
この記事を監修してくれた方

青木 敦史(あおきあつし)
昼間は自社のWebサービスを運営している会社でフロントエンド/バックエンドを担当しているエンジニア。

Webエンジニアの経験は5年ほどです。TechAcademyではPHP/Laravelコースを担当しています。
開発実績: メイクレッスン支援アプリ / 電力自由化パッケージ / 携帯電話料金計算 / ライブチャットサービス

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。