お世話になっております。
googleニュースのRSS形式のxmlファイルから
記事一覧を取り出しておりますが、その中で
media:content というタグのデータがうまく取り出せません。
Laravel Framework 5.8.31
PHP 7.3.6
PHP
1 2(コントローラー側のコード) 3 4$keywords = "天気"; //検索キーワードを使う場合 5$query = urlencode(mb_convert_encoding($keywords,"UTF-8", "auto")); //文字列に変換 6$API_BASE_URL = "https://news.google.com/rss/search?ie=UTF-8&oe=UTF-8&q=".$keywords."&hl=ja&gl=JP&ceid=JP:ja"; //検索キーワードを含めたurl 7 8 9 10//まずは上記のコードでRSSのurlを取得します。 11//全ての記事ではありませんが、いくつかの記事において 12//url、つまり「https://news.google.com/rss/search?ie=UTF-8&oe=UTF-8&q=%E5%A4%A9%E6%B0%97&hl=ja&gl=JP&ceid=JP:ja」を確認すると、 13//「media:content」という、記事のサムネイル画像のurl情報が確認できます。 14 15//つづいて、urlから、foreachで各種記事をページに表示させるため、下記のコードをコントローラーに記載。 16 17 18$items = simplexml_load_file($API_BASE_URL)->channel->item; 19 //記事のタイトルとURL、mediaを取り出して配列に格納 20 for ($i = 0; $i < count($items); $i++) { 21 22 $list[$i]['title'] = mb_convert_encoding($items[$i]->title ,"UTF-8", "auto"); 23 $url_split = explode("=", (string)$items[$i]->link->attributes()->href); 24 $list[$i]['url'] = end($url_split); 25 26 //media:contentがある記事の場合は、そのurlを取得 27 if((string)$items[$i]->children('media', true)->content){ 28 $list[$i]['image_url'] = (string)$items[$i]->children('media', true)->content->attributes()->url; 29 30 //ない場合はサンプル画像にします。 31 }else{ 32 $list[$i]['image_url'] = "適当なサンプル画像url" 33 34} 35 36後略 37
上記をコントローラーで記載し、laravel側のビューで表示させます。
php
1 2前略 3 4@foreach ($items as $item) 5 6 7<h2>{{ $item['title'] }}</h2> 8<a href="{{ $item['url'] }}">ニュースを見る</a><br> 9 10<img src="{{ $list['image_url'] }}" alt=""> 11 12後略 13 14 15@endforeach
上記記述で記載すると、全記事の画像がサンプル画像として表示されてしまいます。
media:contentがある記事の場合も、そのmedia:contentを取得できていないようです。
確認できたこと
・title、urlなどは取得できていますので、コントローラーの流れなどは問題なさそうです。
・$API_BASE_URLを作った後に、テストとして下記のようなコードを書くと正常にmedia:contentのurlは取れています。
php
1 $items = simplexml_load_file($API_BASE_URL)->channel->item; 2 $image_url = (string)$items[数字]->children('media', true)->content->attributes()->url; 3 print_r($image_url); 4 5※上記の「数字」には、3とか、4とかその時点でのRSS、「https://news.google.com/rss/search?ie=UTF-8&oe=UTF-8&q=%E5%A4%A9%E6%B0%97&num=5&hl=ja&gl=JP&ceid=JP:ja」にニュースの配列の番号を入れています(リアルタイムでrssは変わっているので仮に数字しています。)
恐れ入りますが、考えられることがないか、ご確認いただけますと幸いです。
参考記事:https://manablog.org/php_rss_get/
※「サムネイルは以下のように取得できます」を参照
回答1件
あなたの回答
tips
プレビュー