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');

参考サイト

コメント

人気の投稿

Bloggerでは“コピー用アイコン”が出せないの?

Googleドライブの共有で浮気がバレるかもしれない・・・www

ブックマークレット