<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>合体 on qwerty.work</title>
        <link>https://qwerty.work/tags/%E5%90%88%E4%BD%93/</link>
        <description>Recent content in 合体 on qwerty.work</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja-JP</language>
        <lastBuildDate>Fri, 05 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://qwerty.work/tags/%E5%90%88%E4%BD%93/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>【PHP】複数のRSSを結合して最新日付順にリストで表示する</title>
            <link>https://qwerty.work/post/2023/05/php%E8%A4%87%E6%95%B0%E3%81%AErss%E3%82%92%E7%B5%90%E5%90%88%E3%81%97%E3%81%A6%E6%9C%80%E6%96%B0%E6%97%A5%E4%BB%98%E9%A0%86%E3%81%AB%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A7%E8%A1%A8/</link>
            <pubDate>Fri, 05 May 2023 00:00:00 +0000</pubDate>
            <guid>https://qwerty.work/post/2023/05/php%E8%A4%87%E6%95%B0%E3%81%AErss%E3%82%92%E7%B5%90%E5%90%88%E3%81%97%E3%81%A6%E6%9C%80%E6%96%B0%E6%97%A5%E4%BB%98%E9%A0%86%E3%81%AB%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A7%E8%A1%A8/</guid>
            <description>&lt;p&gt;ブログを複数のCMSに分けたので、RSSが複数になりました。それぞれのRSSを結合する方法は以下の通り。これで複数のRSSの中身を日付順に入れ替えて、記事リストを表示することができます。&lt;/p&gt;&#xA;&lt;h2 id=&#34;phpソース&#34;&gt;PHPソース&#xA;&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;?php&#xA; // 2つのRSSフィードのURL&#xA; $url1 = &amp;#39;http://example.com/rss1.xml&amp;#39;;&#xA; $url2 = &amp;#39;http://example.com/rss2.xml&amp;#39;;&#xA;&#xA; // 2つのRSSフィードを取得してSimpleXMLElementオブジェクトに変換&#xA; $xml1 = simplexml_load_file($url1);&#xA; $xml2 = simplexml_load_file($url2);&#xA;&#xA; // 2つのRSSフィードを結合して、日付で降順にソート&#xA; $items = array_merge($xml1-&amp;gt;channel-&amp;gt;item, $xml2-&amp;gt;channel-&amp;gt;item);&#xA; usort($items, function($a, $b) {&#xA;   return strtotime($b-&amp;gt;pubDate) - strtotime($a-&amp;gt;pubDate);&#xA; });&#xA;&#xA; // リスト形式で記事のタイトルとURLを表示&#xA; echo &amp;#39;&amp;lt;ul&amp;gt;&amp;#39;;&#xA; foreach ($items as $item) {&#xA;   $title = $item-&amp;gt;title;&#xA;   $url = $item-&amp;gt;link;&#xA;   $date = date(&amp;#39;Y年m月d日&amp;#39;, strtotime($item-&amp;gt;pubDate));&#xA;   echo &amp;#39;&amp;lt;li&amp;gt;&amp;#39; . $date . &amp;#39; &amp;lt;a href=&amp;#34;&amp;#39; . $url . &amp;#39;&amp;#34;&amp;gt;&amp;#39; . $title . &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;#39;;&#xA; }&#xA; echo &amp;#39;&amp;lt;/ul&amp;gt;&amp;#39;;&#xA; ?&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;説明&#34;&gt;説明&#xA;&lt;/h2&gt;&lt;p&gt;上記のコードでは、&lt;code&gt;simplexml_load_file&lt;/code&gt;関数を使用してRSSフィードをSimpleXMLElementオブジェクトに変換し、&lt;code&gt;array_merge&lt;/code&gt;関数を使用して2つのRSSフィードを結合しています。その後、&lt;code&gt;usort&lt;/code&gt;関数を使用して記事を日付で降順にソートします。&lt;/p&gt;&#xA;&lt;p&gt;最後に、&lt;code&gt;foreach&lt;/code&gt;ループを使用して、記事のタイトル、URL、および日付をリスト形式で表示しています。ここで、&lt;code&gt;date&lt;/code&gt;関数を使用して日付を表示しています。&lt;/p&gt;&#xA;&lt;p&gt;これで2つのブログの最新記事が日付順に表示されるはずです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;表示されない場合&#34;&gt;表示されない場合&#xA;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;item&lt;/code&gt;要素が&lt;code&gt;channel&lt;/code&gt;の直下に無いなど、ウェブサイトによってRSSフィードの構造が異なる場合があります。その場合、以下2つのコードのどちらかを追加すると解決できるはずです。&lt;/p&gt;&#xA;&lt;h3 id=&#34;xpathでitemを取得する場合&#34;&gt;xpathでitemを取得する場合&#xA;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;item&lt;/code&gt;要素が&lt;code&gt;channel&lt;/code&gt;の直下にない場合は、以下のように&lt;code&gt;xpath&lt;/code&gt;関数を使用して、&lt;code&gt;item&lt;/code&gt;要素を取得することができます。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$items1 = $xml1-&amp;gt;xpath(&amp;#39;//item&amp;#39;);&#xA;$items2 = $xml2-&amp;gt;xpath(&amp;#39;//item&amp;#39;);&#xA;$items = array_merge($items1, $items2);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;当ブログはこちらを追加して解決できました。&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;&#xA;&#xA;&lt;div class=&#34;link-card&#34;&gt;&#xA;  &lt;a href=&#34;https://qwerty.work&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &#xA;    &lt;div class=&#34;link-card-image&#34;&gt;&#xA;      &lt;img src=&#34;https://image.thum.io/get/width/300/crop/200/https://qwerty.work&#34; alt=&#34;https://qwerty.work&#34; loading=&#34;lazy&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;link-card-body&#34;&gt;&#xA;      &lt;span class=&#34;link-card-title&#34;&gt;https://qwerty.work&lt;/span&gt;&#xA;      &#xA;      &lt;span class=&#34;link-card-url&#34;&gt;https://qwerty.work&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;childrenで取得する場合&#34;&gt;children()で取得する場合&#xA;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;item&lt;/code&gt;要素が&lt;code&gt;channel&lt;/code&gt;の直下にある場合は、&lt;code&gt;item&lt;/code&gt;要素が含まれている配列を取得するために、&lt;code&gt;$xml1-&amp;gt;channel-&amp;gt;item&lt;/code&gt;という形式ではなく、&lt;code&gt;$xml1-&amp;gt;channel-&amp;gt;children()&lt;/code&gt;という形式を使用することもできます。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$items1 = $xml1-&amp;gt;channel-&amp;gt;children();&#xA;$items2 = $xml2-&amp;gt;channel-&amp;gt;children();&#xA;$items = array_merge($items1-&amp;gt;item, $items2-&amp;gt;item);&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
        </item></channel>
</rss>
