新サーバー移行で実は結構問題があった。
解決までの無駄な過程を書いてもしょーがないので結果だけ。
このブログ (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でリダイレクトに対応する方法
解説感謝、そういうことかリダイレクトなのか。
移行前のサーバーでは問題なく取得できていたけど同じじゃないのね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php // localhost(192.168.***.***) や macOSname.local では読み込まない if ( $hostname == "localhost" or preg_match( "/^192/" , $hostname ) or strpos ( $hostname , ".local" ) ) { echo "RSS" ; } else { // 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 を使っているだけで自前コードの人って少ないんだろうか。