前回記事にしたものよりパワーアップしたものをご紹介します。といっても単純にまた新たな関数を見つけただけなんですけどね。クラス関数であったんですねー、SimpleXMLElementなんて関数知らなかったなー。
前回とほぼ同じですね。一応自作のエスケープ関数やリンクチェック関数も付け足しております。前回よりすっきりとしてわかりやすくなったかも。
バージョンアップしておりますがどっちがいいんだろうと思う今日この頃。
スポンサーリンク
フィード取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | function escape($value, $enc = 'UTF-8') { if (is_array($value)) { return array_map('escape', $value); } return htmlspecialchars($value, ENT_QUOTES, $enc); } function checkLink($link) { return filter_var($link, FILTER_VALIDATE_URL) ? $link : null; } function outPutItem($title, $link, $content, $date) { $dt = new DateTime($date); $time = $dt->format('Y/m/d H:i:s'); $content = strip_tags($content); $content = mb_strimwidth($content, 0, 150, '・・・', 'UTF-8'); printf('<dl><dt><a href="%s" target="_blank">%s</a>(%s)</dt>', checkLink($link), escape($title), $time); printf('<dd>%s</dd></dl>', $content); } function getRss($url, $maxsize = 5) { try { $rss = new SimpleXMLElement($url, null, true); $i = 0; if (isset($rss->channel->title)) { $site_name = $rss->channel->title; $site_url = $rss->channel->link; } else { $site_name = $rss->title; $site_url = $rss->link['href']; } printf('<h2><a href="%s" target="_blank">%s</a></h2>', $site_url, $site_name); switch (strtolower($rss->getName())) { case 'rdf': // rss1.0 foreach ($rss->item as $item) { if($i >= $maxsize){ break; } else { $i++; $title = $item->title; $link = $item->link; $content = $item->description; $date = $item->children('http://purl.org/dc/elements/1.1/')->date; outPutItem($title, $link, $content, $date); } } break; case 'rss': // rss2.0 foreach ($rss->channel->item as $item) { if($i >= $maxsize){ break; } else { $i++; $title = $item->title; $link = $item->link; $content = $item->description; $date = $item->pubDate; outPutItem($title, $link, $content, $date); } } break; case 'feed': // atom foreach ($rss->entry as $entry) { if($i >= $maxsize){ break; } else { $i++; if (isset($entry->issued)) { $date = $entry->issued; } else { $date = $entry->published; } $title = $entry->title; $link = $entry->link['href']; $content = $entry->content; outPutItem($title, $link, $content, $date); } } break; } } catch (Exception $e) { echo $e->getMessage(); } } ?> |
ココからは出力側です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $rss_urls = array( "http://news.atode.cc/rss.php", "http://gigazine.net/news/rss_2.0/", "http://feeds.feedburner.com/phpspot/ccuf", "http://getnews.jp/feed/ext/orig", "http://rss.rssad.jp/rss/oshietekun/atom.xml", "https://php-fan.org/feed" ); foreach ($rss_urls as $url) { getRss($url); } ?> |
こんなかんじですー、前回と同じ表示になっています。
デモサイトにて確認してみてください。
1件のコメント