LoginSignup
7
7

More than 5 years have passed since last update.

RSSの違いを意識せず使えるパーサーをPHPで作った

Last updated at Posted at 2016-11-26

RSSは大きく分けると、RSS1.0(RDF),RSS2.0,Atomの三種類存在します。
有名なところでいうと

  • RSS1.0: ライブドアブログ
  • RSS2.0: アメブロ
  • Atom: Googleのブログ

です。

RSSのパーサーを作る場合、RSSの種類ごとに違いを意識しながら作らなければならず、非常に面倒だったので、RSSの違いを意識せず使えるパーサーをPHPで作りました。
取得する項目は必要最低限におさえました。画像はよく使ったりするので、取得項目に画像を加えたのがポイントです。

インストール方法

packagistに登録したので、composerで簡単にインストールできます。

composer.json
{
    "require": {
       "yuzuru-s/parse-rss": "1.0.*"
    }
}
composer install

これでインストール完了です。

使い方

以下がサンプルプログラムになります。

<?php
require __DIR__ . '/../vendor/autoload.php';
use YuzuruS\Rss\Feed;

$url = 'http://blog.livedoor.jp/dqnplus/index.rdf';
$ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36';
$res = Feed::load($url, $ua);

echo 'Title:' . $res['channel']['title'] . "\n";
echo 'Link:' . $res['channel']['link'] . "\n";

foreach ($res['item'] as $r) {
    echo "\t" . 'Article Title:' . $r['title'] . "\n";
    echo "\t" . 'Article Description:' . $r['description'] . "\n";
    echo "\t" . 'Article Date:' . $r['date'] . "\n";
    echo "\t" . 'Article og:img:' . $r['image']['ogimg'] . "\n";
    foreach ($r['image']['img'] as $i) {
        echo "\t\t" . 'Desc:img:' . $i . "\n";
    }
}

取得できる項目は以下の通りです。
1. サイト名
2. サイトURL
3. 記事タイトル
4. 記事description
5. 記事投稿日
6. 記事中の画像(og:imgとdescriptionに含まれる画像(複数))

認証が必要なURLから取得する場合は下記のように指定します。

$res = Feed::load($url, $ua, $username, $password);

キャッシュを有効にする場合は下記のように指定します。

Feed::$cacheDir = __DIR__ . '/tmp';
Feed::$cacheExpire = '5 hours';
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7