オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、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を学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

ソースコード

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

// XML解析を行う上で、XMLで不正文字と扱われる対象を空文字に変換します
$invalid_characters = '/[^x9xax20-xD7FFxE000-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を使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。