RSS Feedの取得と表示するPHP
PHPで複数Feedを取得し表示をする
これもかなり前に書いたので記憶が・・・😅 Feed.phpは別途用意して下さい。
php
<?php
// header( 'Cache-Control: no-store, no-cache, must-revalidate' );
// header( 'Cache-Control: post-check=0, pre-check=0', FALSE );
// header('Pragma:no-cache');
date_default_timezone_set('Asia/Tokyo');
function footerExec()
{
// ライブラリの読み込み
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/Feed.php');
// キャッシュの設定
Feed::$cacheDir = $_SERVER['DOCUMENT_ROOT'] . '/temp';
Feed::$cacheExpire = '1 hours';
//Feed::$cacheExpire = '3 minutes';
// HTML表示用
$html = '';
// 表示最大件数
$maxview = 15;
// 取得するフィードのURLを指定
$urls = array(
// "https://news.yahoo.co.jp/rss/topics/top-picks.xml",
// "https://news.yahoo.co.jp/rss/topics/it.xml",
// 不正アクセス
"https://news.google.com/rss/search?hl=ja&gl=JP&ceid=JP:ja&q=%E4%B8%8D%E6%AD%A3%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9",
// セキュリティー
"https://news.google.com/rss/search?hl=ja&gl=JP&ceid=JP:ja&q=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%BC",
// ビットコイン
"https://news.google.com/rss/search?hl=ja&gl=JP&ceid=JP:ja&q=%E3%83%93%E3%83%83%E3%83%88%E3%82%B3%E3%82%A4%E3%83%B3",
// Technology
// "https://news.google.com/rss/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB?hl=ja&gl=JP&ceid=JP:ja",
"https://news.google.com/news/rss/headlines/section/topic/SCITECH.ja_jp/%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC?ned=jp&hl=ja&gl=JP",
// ヘッドライン-最新
"https://news.google.com/rss/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRFZxYUdjU0FtcGhHZ0pLVUNnQVAB?hl=ja&gl=JP&ceid=JP%3Aja",
// ヘッドライン-日本
"https://news.google.com/rss/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRFZxYUdjU0FtcGhHZ0pLVUNnQVAB/sections/CAQiRkNCQVNMZ29JTDIwdk1EVnFhR2NTQW1waEdnSktVQ0lPQ0FRYUNnb0lMMjB2TUROZk0yUXFDZ29JRWdibWw2WG1uS3dvQUEqKggAKiYICiIgQ0JBU0Vnb0lMMjB2TURWcWFHY1NBbXBoR2dKS1VDZ0FQAVAB?hl=ja&gl=JP&ceid=JP%3Aja",
// ヘッドライン-世界
"https://news.google.com/rss/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRFZxYUdjU0FtcGhHZ0pLVUNnQVAB/sections/CAQiRkNCQVNMZ29JTDIwdk1EVnFhR2NTQW1waEdnSktVQ0lPQ0FRYUNnb0lMMjB2TURsdWJWOHFDZ29JRWdia3VKYm5sWXdvQUEqKggAKiYICiIgQ0JBU0Vnb0lMMjB2TURWcWFHY1NBbXBoR2dKS1VDZ0FQAVAB?hl=ja&gl=JP&ceid=JP%3Aja"
);
// 各rssをまとめた配列
$entrylist = array();
// RSSごとに1エントリづつ抽出 ////////////////////////////////////////
for ($i = 0; $i < count($urls); $i++) {
$url = $urls[$i];
// インスタンスの作成
$feed = new Feed;
// RSSを読み込む
$rss = Feed::loadRss($url);
$num = rand(1, 5);
for ($entry = 0; $entry < $num; $entry++) {
if (!isset($rss->item[$entry])) continue; // itemがなければスキップ(エラー処理)
$sitename = $rss->title;
$sitelink = $rss->link;
$item = $rss->item[$entry];
// ...既存処理
// 各エントリーの処理
$title = $item->title;
$link = $item->link;
$timestamp = strtotime($item->pubDate);
// 配列に
$entrylist[$i]['sitename'] = $sitename;
$entrylist[$i]['sitelink'] = $sitelink;
$entrylist[$i]['title'] = $title;
$entrylist[$i]['link'] = $link;
$entrylist[$i]['timestamp'] = $timestamp;
}
}
// echo $entrylist[0]['title'];
// 日付でソート
foreach ((array)$entrylist as $key => $value) {
$sort[$key] = $value['timestamp'];
}
array_multisort($sort, SORT_DESC, $entrylist);
// 書き出す件数を設定
if (count($entrylist) > $maxview) {
$entrynum = $maxview;
} else {
$entrynum = count($entrylist);
}
// 書き出し
for ($i = 0; $i < $entrynum; $i++) {
$s_title = $entrylist[$i]['title'];
// $s_title = mb_strimwidth($entrylist[$i]['title'], 0, 24, "…");
$html .= '<li><a href="' . $entrylist[$i]['link'] . '" target="_blank" title="' . $entrylist[$i]['title'] . date("m/d H:i", $entrylist[$i]['timestamp']) . '">' . $s_title . '</a></li>';
}
echo $html;
}
footerExec();
require_once($_SERVER['DOCUMENT_ROOT'] . '/php/functions.php');
参考サイト
コメント
コメントを投稿