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

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回答

2724閲覧

phpでwordpressのRSSを取得したい。が、画像だけ表示できずにいます。

pan_no_mimi

総合スコア13

RSS

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

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/03/13 10:16

前提・実現したいこと

別ドメインのHTML内にwordpress記事をRSS取得、表示したいのですが、
画像の表示が強制的に代替画像が出てきてしまいます。
希望は、記事内の1枚目画像を取得したいです。(アイキャッチ設定はしていません)

参考にしたページ
https://kana-lier.com/web/php_rssfeed/

発生している問題・エラーメッセージ

投稿記事内の画像だけ取得できない

該当のソースコード

<?php require_once "./Feed.php" ; //rss-phpライブラリを読み込みます $feed = new Feed ; $url = "http://●●●●●.com/?feed=rss2"; //RSSのURLを入力する $rss = $feed->loadRss( $url ) ; $num = 3;//表示させたい件数 $i=0; foreach( $rss->item as $item ){ if($i>=$num){ } else{ $title = $item->title ; // タイトル $link = $item->link ; // リンク $timestamp = strtotime( $item->pubDate ) ; // 更新日時 $category = $item->category ; $description = $item->description ; // 詳細 $description = strip_tags($description); $content = $item->content ; if ( $desW != 0){ $description = mb_strimwidth($description, 0, $desW, "…",'utf-8'); } $thumbnail = trim($now_url,"/") . "/common/img/other/noimage.jpg";//画像がない場合の指定 if( preg_match_all('/<img([\s\S]+?)>/is', $item->content, $matches) ){ foreach( $matches[0] as $img ){ if ($img === reset($matches[0])) {//最初の画像にマッチしたもの if( preg_match('/src=[\'"](.+?jpe?g|png|gif)[\'"]/', $img, $m) ){ $item->$thumbnail = $m[1]; } } } } ?> <li> <a class="flex-wrap" href="<?php echo $link; ?>"> <span class="thumbnail"> <img src="<?php print $thumbnail; ?>" alt="<?php print $item->title; ?>" width="100"> </span>

<span class="news-category"><?php echo $category; ?></span>
<span class="news-date lightgray"><?php echo date( "Y年m月d日", $timestamp); ?></span>
<span class="news-title black"><?php echo $title; ?></span>
</a>

</li> <?php $i++; } } ?>

試したこと

以下、RSS記事の抜粋です。
discriptionに画像がなく、contentにあるので、thumbnailの条件内を$item->contentにしてみましたが、変わらずでした。

<item> <title>投稿テスト中</title> <link>http://●●●.com/2019/03/13/%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88%e4%b8%ad/</link> <comments>http://●●●.com/2019/03/13/%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88%e4%b8%ad/#respond</comments> <pubDate>Wed, 13 Mar 2019 05:15:29 +0000</pubDate> <dc:creator><![CDATA[●●●]]></dc:creator> <category><![CDATA[お知らせ]]></category>

<guid isPermaLink="false">http://news.●●●.com/?p=75</guid>
<description><![CDATA[<slug>news</slug>これは投稿テスト文章です。]]></description>
content:encoded<![CDATA[<p>これは投稿テスト文章です。</p>

<p><img class="alignnone size-medium wp-image-73" src="http://news.●●●/wp/wp-content/uploads/2019/03/noimage02-281x300.jpg" alt="noimage02" width="281" height="300" srcset="http://news.●●●.com/wp/wp-content/uploads/2019/03/noimage02-281x300.jpg 281w, http://news.●●●.com/wp/wp-content/uploads/2019/03/noimage02.jpg 300w" sizes="(max-width: 281px) 100vw, 281px" /></p> ]]></content:encoded> <wfw:commentRss>http://●●●.com/2019/03/13/%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88%e4%b8%ad/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item>

補足情報(FW/ツールのバージョンなど)

日付やタイトルなど、他のRSS情報は問題なく取得できています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/13 12:05

質問文中の例では、全部noimageのようで、RSS内にそう書いてあるのならnoimageしか取れないんじゃないかと思うわけで、至極普通って思えてしまうのですが。
pan_no_mimi

2019/03/13 12:13

投稿ありがとうございます。 noimage.jpgがサンプル画像で、noimage02.jpgが投稿した画像になります。 かりにくくてすみません。。。
tabuu

2019/03/15 02:38 編集

>$content = $item->content ; $contentに想定している文字列が入ってるかご確認いただけないでしょうか。 (追記) 想像ですが、<content:encoded>となっているので$item->contentでは取得できていないのではないかと思います。
pan_no_mimi

2019/03/15 08:17

投稿ありがとうございます。 実際に呼び出し&表示できているものは 「お知らせ」(カテゴリー) 「2019年03月13日」(投稿日) 「投稿テスト中」(記事のタイトル) になります。 その後、指摘のあった場所を下記に変更してみましたがダメでした…。 $content = $item->children('content', true)->encoded;
guest

回答2

0

ベストアンサー

RSSの取得をphpでやっているけど、
肝心の画像の表示はimg要素としてhtml化しているだけで、
画像ファイルそのものは取得していない、と見ました。

凝ったサイトの場合、レファラーを添えない画像リクエストを
蹴ってる事が多いのです。
今回の事例はニュースサイトでしょうか、
画像の無断二次利用をさせないために対策を仕込んであるものと思われます。
(いわゆる直リンク禁止ってやつです。昔から行われていることです。)

なので、ダメなときはダメです。

画像をちゃんとHTTPリクエストして先方のサーバーに対して取得する動作を組み込むとか、
画像取得の際にレファラーを添えてHTTPリクエストするとか、
ユーザーエージェントを実在のwebブラウザのものを使ったりするとか、
そこまでやっても
ダメなときはダメなのです。

投稿2019/03/13 12:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pan_no_mimi

2019/03/14 07:18

投稿ありがとうございます。 併せて、勉強不足で申し訳ありません。 今回のものは、wordpressで作成したブログがすでに作成されており、別ドメインの静的サイト内にニュース記事として表示をさせるというものになります。 ご意見いただいたHTTPリクエストについては、検索などで見かけるFeedWindのように 記事内容を抽出して吐き出させるタイプのウィジェットの場合、 別で取得する動作などが組み込まれているということで合っていますかね?
guest

0

元サイトとブログサイトを同じドメインで管理できるよう、全体を再構築することになりました。投稿くださった方々、ありがとうございました。

投稿2019/03/16 04:01

pan_no_mimi

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問