RSS - yagisawatakuya/Wiki GitHub Wiki

関数リファレンス/fetch feed

function rssoutput() {

  // RSS取得
  $rss = fetch_feed(
    array(
      '★★★',
      '★★★'
    )
  );

  $maxitems = 0;
  $newsArray = array();

  if (!is_wp_error($rss)) : // ちゃんとフィードが生成されているかのチェック

    // 表示件数指定
    $maxitems = $rss->get_item_quantity(100);
    
    // 0件から始めて指定した件数までの配列を生成
    $rss_items = $rss->get_items( 0, $maxitems );

    // 配列にデータを格納
    foreach ($rss_items as $i):
      $date = $i->get_date('Y/m/d');
      $link = esc_url($i->get_permalink());
      $title = esc_html($i->get_title());
      $newsArray[] = array($date, $link, $title);
    endforeach;
  endif;

  // ソート
  usort($newsArray, function ($a, $b) {
    return $a[0] < $b[0];
  });

  // 記事出力
  if ( $maxitems == 0 ) :
    echo 'ERROR';
  else :
    echo '<ul class="list">';
    foreach ($newsArray as $k => $i) :
      $d = $i[0];
      if ($d != $date) :
        $date = $d;
        echo '<div class="date">'.$date.'</div>';
      endif;
      echo '
        <li>
          <span class="t2">t2</span>
          <span class="text">
            <a href="'.$i[1].'">'.$i[2].'</a>
          </span>
        </li>
      ';
    endforeach;
    echo '</ul>';
  endif;

}

複数サイトのRSSを読みこみ

<?php
	// RSS取得/出力
	$rsslist = array(
		'★★★',
		'★★★'
	);

	foreach($rsslist as $url) {
		$tmpData = file_get_contents($url);
		$tmpData = str_replace('dc:creator', 'Creator', $tmpData);
		$tmpData = str_replace('dc:date', 'Date', $tmpData);
		$tmpData = str_replace('pubDate', 'Date', $tmpData);
		$rssData[] = simplexml_load_string($tmpData);
	}
	foreach($rssData as $key => $value) {
		if($value['version'] == '2.0') {
			foreach($value->channel->item as $item) {
				$date = date_create($item->Date);
				$item->Date = date_format($date, 'Y-m-d\TH:i:sP');
			}
		}
	}
	$i = count($rsslist);
	$allrss = array();
	for($n=0;$n<$i;$n++) {
		$rssarr[$n] = xml2arr($rssData[$n]);
		$channelTitle = $rssarr[$n]['channel']['title'];
		if(isset($rssarr[$n]['channel']['item'])) {
			$rssarr[$n]['channel']['item'] = addChannelTitle($rssarr[$n]['channel']['item'], $channelTitle);
			$allrss = array_merge($allrss, $rssarr[$n]['channel']['item']);
		} else {
			$rssarr[$n]['item'] = addChannelTitle($rssarr[$n]['item'], $channelTitle);
			$allrss = array_merge($allrss, $rssarr[$n]['item']);
		}
	}
	usort($allrss, 'cmp');

	$i = count($allrss);
	for($n=0;$n<$i;$n++) {
		if(empty($allrss[$n]['title'])) {
			$allrss[$n] = null;
		}
	}

	function addChannelTitle($items, $channelTitle) {
		$result = array();
		foreach($items as $item) {
			$result[] = array_merge($item, array('channel_title'=>$channelTitle));
		}
		return $result;
	}

	# オブジェクト→配列変換用関数
	function xml2arr($xmlobj) {
		$arr = array();
		if (is_object($xmlobj)) {
			$xmlobj = get_object_vars($xmlobj);
		} else {
			$xmlobj = $xmlobj;
		}
		foreach ($xmlobj as $key => $val) {
			if (is_object($xmlobj[$key])) {
				$arr[$key] = xml2arr($val);
			} else if (is_array($val)) {
				foreach($val as $k => $v) {
					if (is_object($v) || is_array($v)) {
						$arr[$key][$k] = xml2arr($v);
					} else {
						$arr[$key][$k] = $v;
					}
				}
			} else {
				$arr[$key] = $val;
			}
		}
		return $arr;
	}

	function cmp($a, $b) {
		return strcmp($b['Date'], $a['Date']);
	}

	$count = 1;
	$newsArray = array();
	foreach ($allrss as $rss => $item) {
		if ($count > $start && $count) {
			$date 	= preg_replace('/([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9:]{3}[0-9]{2})[0-9+:]+$/', '$1/$2/$3', $item['Date']);
			$date01	= preg_replace('/([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9:]{3}[0-9]{2})[0-9+:]+$/', '$1/$2/$3', $item['Date']);
			$testDate = $date;
			$testLink = $item['link'];
			$testTitle = $item['title'];
			$newsArray[] = array($testDate, $testLink, $testTitle);
		}
		$count++;
	}

	echo '<div>';
	
	$maxList = 100;
	$listNum = 0;
	foreach ($newsArray as $k => $i) {

		$d = $i[0];
		if ($d != $date) {
			$date = $d;
			if ($listNum == 0) {
				$listNum++;
			} else {
				$listNum++;
				$listNum - 1;
			}
		}
		
		if (!($listNum > $maxList)) {
			if ($d != $date01) {
				$date01 = $d;
				if ($listNum == 1) {
					echo "<div class=\"date\">$date01</div><ul class=\"list\">";
				} else {
					echo "</ul><div class=\"date\">$date01</div><ul class=\"list\">";
				}
			}
			echo "<li><span class=\"t2\">t2</span><span class=\"text\"><a href=\"$i[1]\">$i[2]</a></span></li>";
		} else {
			break;
		}
	}
	echo '</ul></div>';
?>

simplexml_load_file

function fetchDuelMastersNewsTop() {

$RSSpath = "★★★";
$XML = simplexml_load_file ( $RSSpath );
$newsArray = array();

foreach ( $XML->item as $val ) {
	$dc = $val->children('http://purl.org/dc/elements/1.1/');
	$date   = date('Y.m.d', strtotime($dc->date));
	$date01 = date('Y.m.d', strtotime($dc->date));
	$link = $val->link;
	$title = $val->title;
	$newsArray[] = array($date, $link, $title);
}

$maxList = 3;
$listNum = 0;
foreach ($newsArray as $k => $i) {

	$d = $i[0];
	if ($d != $date) {
		$date = $d;
		if ($listNum == 0) {
			$listNum++;
		} else {
			$listNum++;
			$listNum - 1;
		}
	}

	if (!($listNum > $maxList)) {
		if ($d != $date01) {
			$date01 = $d;
			echo "<div class=\"date\">$date</div>";
		}
		echo "<ul class=\"updates-list\"><li><span class=\"anime\">anime</span><a href=\"$i[1]\">$i[2]</a></li></ul>";
	} else {
		break;
	}
}
}
⚠️ **GitHub.com Fallback** ⚠️