新サーバー移行で実は結構問題があった。
解決までの無駄な過程を書いてもしょーがないので結果だけ。
このブログ (WordPress) の RSS が取得できなくなっていた。
どうやらパーマリンクの設定を変更したのがいけなかったようで。
WordPressでRSS配信がされないのは、head内にRSSのURL指定が正しくされていないのでは? | 便利なデジタル生活
マジでこれだった、archive 付きの URL に変更。
それだけで WordPressのURL/feed/ にて普通に取得できるように戻った。
元に戻しただけで進歩は何も無いんですけどね。
まて、本サイトにて RSS の内容を表示していた所が空っぽのままだ。
RSS に直接アクセスは普通に読み込めるようになったのに何故だ?
既存のソースを殆ど変えずにfile_get_contents()をcURLにする │ Webty Staff Blog
RSS 取得はネットでよく見かけるこのコードを使っていたんですけど。
ローカルで色々試すと HTTP Status 301 が戻っていた。
http://localhost で試すとゼロしか戻らないので PHP コードのみでやって。
PHPのcurlやfile_get_contentsでリダイレクトに対応する方法
解説感謝、そういうことかリダイレクトなのか。
移行前のサーバーでは問題なく取得できていたけど同じじゃないのね。
<?php
// localhost(192.168.***.***) や macOSname.local では読み込まない
if ($hostname == "localhost" or preg_match("/^192/", $hostname) or strpos($hostname, ".local") ) {
echo "RSS";
} else {
$url = "https://palepoli.skr.jp/wp/feed/";
// cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// HTTP Status 301 対策
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec( $ch );
$status = curl_getinfo($ch);
curl_close( $ch );
if ($status['http_code'] === 200) {
$rss = simplexml_load_string($result);
$i = 0;
foreach ($rss->channel->item as $item) {
if( $i++ == 5 ) { break; }
$link = $item->link;
$title = $item->title;
$date = date('Y.m.d', strtotime($item->pubDate));
$desc = $item->description;
echo <<< __EOS__
<dt><a href="$link" target="_blank">$title</a> ($date)</dt>
<dd>$desc</dd>
__EOS__;
}
} else {
echo "<p>HTTP Status " . $status['http_code'] . "</p>";
}
}
?>
Status 200 (OK) 時のみ表示させるように変更。
やっと表示できるようになった、長かった。
あれこれ試す過程で PHP を 7=>8 にしたのが原因かと疑ったり。
無駄なコードを散々書いたり、ただの勉強不足でした。
しかしコレについて言及している人少ないね。
Wordpress を使っているだけで自前コードの人って少ないんだろうか。