質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2965閲覧

【WordPress】rssの始まりに空行が入って取得できない

taro_nii_chan

総合スコア207

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/11/28 10:54

https://teratail.com/questions/85883
様を参考にさせていただいた上での質問です。

自分で作った WordPress (A) のサイトから rss を引っ張って来て、別の自分で作る WordPress (B) に表示しようと思っています。

(B)のフロントページを

front

1<?php 2include_once( ABSPATH . WPINC . '/feed.php' ); 3$feeduri = '[ (A)のURL ]/feed/'; 4$rss = fetch_feed($feeduri); 5 6// print_r($rss); 7 8if (!is_wp_error($rss)) { 9 $maxitems = $rss->get_item_quantity(3); 10 $rss_items = $rss->get_items( 0, $maxitems ); 11} 12 13foreach ( $rss_items as $item ) : ?> 14 <!-- 記事へのリンクを表示 --> 15 <a href="<?php echo $item->get_permalink(); ?>"> 16 17 <!-- 記事の最初の画像を表示 --> 18 <?php 19 $first_img = ''; 20 if ( preg_match( '/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches ) ) { 21 $first_img = $matches[1]; 22 } 23 ?> 24 <img src="<?php echo esc_attr( $first_img ); ?>" alt=""> 25 26 <!-- 記事タイトルを表示 --> 27 <?php 28 $title = $item->get_title(); 29 if(mb_strlen( $title ) > 40 ): 30 ?> 31 <p class="title"><?php echo mb_substr( $title,0,40 );?>...</p> 32 <?php else : ?> 33 <p class="title"><?php echo $title ;?></p> 34 <?php endif; ?> 35 36 <!-- 投稿日を表示 --> 37 <?php 38 $item_date = $item->get_date(); 39 $date = date('Y/m/d',strtotime( $item_date )); ?> 40 <p class="date"><?php echo $date; ?></p> 41 </a> 42<?php 43endforeach; 44wp_reset_postdata(); 45?>

とすると、何もない白いページが表示され、5行目のprint_rをのコメントアウトを外してやると、

WP_Error Object ( [errors] => Array ( [simplepie-error] => Array ( [0] => This XML document is invalid, likely due to invalid characters. XML error: XML or text declaration not at start of entity at line 4, column 0 ) ) [error_data] => Array ( ) )

と出ます。
つまり、XMLが始まる前に空行があるから invalid だと言われてるのだと思っているのですが、(A) の方で何か rss に関する設定がおかしいのでしょうか?

問題判別の方法など教えていただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まずは、実際に取得された feed のデータが、どのような状態か確認された方が良いと思います。


質問には、エラーメッセージだけで、実際の feed がどうなっているかの記載がなかったので、新規インストールしただけの「WordPress 4.9.8-ja + TwentySeventeen テーマ」の環境で確認してみました。

まず、RSS をそのまま取得。

XML

1$ curl -D - -s https://example.com/feed/ 2 3HTTP/1.1 200 OK 4Date: Wed, 28 Nov 2018 12:34:04 GMT 5Server: Apache 6X-Powered-By: PHP/7.2.12 7Last-Modified: Thu, 25 Oct 2018 00:34:34 GMT 8ETag: "e4d1ff390c2503e13d1c78f6a03d2677" 9X-Robots-Tag: noindex, follow 10Link: <https://example.com/wp-json/>; rel="https://api.w.org/" 11Transfer-Encoding: chunked 12Content-Type: application/rss+xml; charset=UTF-8 13 14<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" 15 xmlns:content="http://purl.org/rss/1.0/modules/content/" 16 xmlns:wfw="http://wellformedweb.org/CommentAPI/" 17 xmlns:dc="http://purl.org/dc/elements/1.1/" 18 xmlns:atom="http://www.w3.org/2005/Atom" 19 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 20 xmlns:slash="http://purl.org/rss/1.0/modules/slash/" 21 > 22 23<channel> 24 <title>WordPress</title> 25 <atom:link href="https://example.com/feed/" rel="self" type="application/rss+xml" /> 26(以下略)

となっていました。ざっとみた感じでは、問題はなさそうです。

次に 質問に記載されている PHP スクリプトの 取得した RSS を表示する部分までを実行してみました。

php

1<?php 2require_once( dirname( __FILE__ ) . '/wp-load.php' ); 3include_once( ABSPATH . WPINC . '/feed.php' ); 4$feeduri = 'https://example.com/feed/'; 5$rss = fetch_feed($feeduri); 6print_r($rss);

結果は、問題なく取得されていました。

PHP

1SimplePie Object 2( 3 [data] => Array 4 ( 5 [child] => Array 6 ( 7 [] => Array 8 ( 9 [rss] => Array 10 ( 11 [0] => Array 12 ( 13 [data] => 14 15 [attribs] => Array 16 ( 17 [] => Array 18 ( 19 [version] => 2.0 20 ) 21 22 ) 23 24 [xml_base] => 25 [xml_base_explicit] => 26 [xml_lang] => 27 [child] => Array 28 ( 29 [] => Array 30 ( 31 [channel] => Array 32 ( 33 [0] => Array 34 ( 35 [data] => 36 37 38 [attribs] => Array 39 ( 40 ) 41 42 [xml_base] => 43 [xml_base_explicit] => 44 [xml_lang] => 45 [child] => Array 46 ( 47 [] => Array 48 ( 49 [title] => Array 50 ( 51 [0] => Array 52 ( 53 [data] => WordPress 54 [attribs] => Array 55 ( 56 ) 57 58 [xml_base] => 59 [xml_base_explicit] => 60 [xml_lang] => 61 ) 62 63 ) 64 65 [link] => Array 66 ( 67 [0] => Array 68 ( 69 [data] => https://example.com 70 [attribs] => Array 71 ( 72 ) 73 74 [xml_base] => 75 [xml_base_explicit] => 76 [xml_lang] => 77 ) 78 79 ) 80 81 [description] => Array 82 ( 83 [0] => Array 84 ( 85 [data] => Just another WordPress site 86 [attribs] => Array 87 ( 88 ) 89 90 [xml_base] => 91 [xml_base_explicit] => 92 [xml_lang] => 93 ) 94 95 ) 96 97 [lastBuildDate] => Array 98 ( 99 [0] => Array 100 ( 101 [data] => Wed, 26 Sep 2018 01:21:19 +0000 102 [attribs] => Array 103 ( 104 ) 105 106 [xml_base] => 107 [xml_base_explicit] => 108 [xml_lang] => 109 ) 110 111 ) 112 113 [language] => Array 114 ( 115 [0] => Array 116 ( 117 [data] => ja 118 [attribs] => Array 119 ( 120 ) 121 122 [xml_base] => 123 [xml_base_explicit] => 124 [xml_lang] => 125 ) 126 127 ) 128 129(以下略)

この結果でわかったことは、新規インストールした「WordPress 4.9.8-ja / TwentySeventeen テーマ」の環境では、問題が発生しないので、お使いの環境(テーマ・プラグイン)に依存している現象のようです。

投稿2018/11/28 13:07

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2018/11/29 08:24

自己解決にはしてしまいましたが、確認の方法(curlコマンドは知りませんでした)、問題の切り分け方など、とても参考になりました。ありがとうございました。
guest

0

自己解決

原因は追求し切れていないのですが、解決法が見つかったので備忘録として書いておきます。

WordPressのRSSフィードがエラーになって配信されなくなってしまったときに対処した方法まとめ

の中の

WordPress Remove Blank Line From RSS Feed – wordpress error on line 2 at column 6: XML declaration allowed only at the start of the document

という記事が参考になって解決しました。
要約すると、


  1. 最初に次のphp ファイルをダウンロードする http://wejn.org/stuff/wejnswpwhitespacefix.php

ただ、これをクリックしても php が実行されて吐き出されたものが表示されるだけなので、リンク「HERE」から入手、拡張子が ph になってるので php にリネーム。

  1. ダウンロードしたら php ファイルを WordPress サイトのルードディレクトリにアップロード。

  2. index.php を編集して次の一行を加える。

php

1include("wejnswpwhitespacefix.php");

これでリロードすれば不思議と動くはず。


だそうです。

投稿2018/11/29 08:19

taro_nii_chan

総合スコア207

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問