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

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

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

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

PHP

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

Q&A

0回答

209閲覧

RSSフィードで取得した新着記事に「NEW」アイコンを表示したい

purerism

総合スコア6

RSS

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

PHP

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

0グッド

0クリップ

投稿2018/08/27 10:02

前提・実現したいこと

現在、複数サイトからRSSフィードを取得し、
新着順に並び替えて表示を行っています。

記事の更新日時が"1日以内"である場合に、
「NEW」アイコンを表示させたいです。

該当のソースコード

PHP

1<?php 2 3//表示記事数 4$hyojiNum = 30; 5 6//フィード登録 7$data['feedurl'][] = 'http://feeds.feedburner.com/design-develop/BZkU'; 8$data['feedurl'][] = 'http://feeds.feedburner.com/designwork-s/YGrB'; 9//$data['feedurl'][] = ''; 必要な分だけ追加してください 10 11$rssList = $data['feedurl']; 12 13 //同時呼び出し 14 $rssdataRaw = multiRequest($rssList); 15 for($n=0;$n<count($rssdataRaw);$n++){ 16 //URL設定 17 $rssdata = simplexml_load_string($rssdataRaw[$n], 'SimpleXMLElement', LIBXML_NOCDATA); 18 if($rssdata->channel->item) $rssdata = $rssdata->channel; 19 if($rssdata->item){ 20 $b_title=$rssdata->title; 21 foreach($rssdata->item as $myEntry){ 22 23 $rssDate = $myEntry->pubDate; 24 if(!$rssDate) $rssDate = $myEntry->children("http://purl.org/dc/elements/1.1/")->date; 25 date_default_timezone_set('Asia/Tokyo'); 26 $myDateGNU = strtotime($rssDate); 27 $myDate = date('Y/m/d',$myDateGNU); 28 $myTitle = mb_strimwidth($myEntry->title, 0,60, "…", utf8); //タイトル取得 29 30 $myLink = $myEntry->link; //リンクURL取得 31 32$myContent = $myEntry->children('http://purl.org/rss/1.0/modules/content/'); 33$myContent2 = $myContent->encoded; 34preg_match('/<img .*?src ?= ?[\'"]([^>]+)[\'"].*?>/i', $myContent2, $img_all); 35preg_match('/http.*?(.gif|.png|.jpg|.jpeg$|.bmp)/i', $img_all[0], $gazo); 36 37$outdata[$myDateGNU] ='<a href="' . $myLink . '" target="_blank" class="clearfix blogs"> 38<div class="blogs_left"><img src="'.$gazo[0].'" width="70"></div> 39<div class="blogs_right"> 40<div class="blog_t">'.$myTitle.'</div> 41<div class="blog_name">'.$myDate.'</div> 42<div class="blog_date">'.$b_title.'</div> 43</div> 44</a>'; 45 46 } 47 } 48 } 49 50 //ソート 51 krsort($outdata); 52 53$nn = 0; 54$html = ''; 55 56// 57foreach($outdata as $outdata) { 58 $nn++; 59 $html.= $outdata; 60 if($nn == $hyojiNum) break; 61} 62 63// ここで「echo $html」 で一覧表示できます。 64 65//ここから同時呼び出し関数 66function multiRequest($data, $options = array()) { 67 68 // 配列を用意します。 69 $curly = array(); 70 // data to be returned 71 $result = array(); 72 73 //並列ファンクション 74 $mh = curl_multi_init(); 75 76 // loop through $data and create curl handles 77 // then add them to the multi-handle 78 foreach ($data as $id => $d) { 79 80 $curly[$id] = curl_init(); 81 82 $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d; 83 curl_setopt($curly[$id], CURLOPT_URL, $url); 84 curl_setopt($curly[$id], CURLOPT_HEADER, 0); 85 curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1); 86 87 // 投稿記事があるかどうか 88 if (is_array($d)) { 89 if (!empty($d['post'])) { 90 curl_setopt($curly[$id], CURLOPT_POST, 1); 91 curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']); 92 } 93 } 94 95 if (!empty($options)) { curl_setopt_array($curly[$id], $options);} 96 curl_multi_add_handle($mh, $curly[$id]); 97 } 98 99 $running = null; 100// ハンドルを実行 101 do { 102 curl_multi_exec($mh, $running); 103 } while($running > 0); 104 105 foreach($curly as $id => $c) { 106 $result[$id] = curl_multi_getcontent($c); 107 curl_multi_remove_handle($mh, $c); 108 } 109 110 // ハンドルを閉じる 111 curl_multi_close($mh); 112 113 return $result; 114} 115 116?>

試したこと

類似の質問も参考にさせていただきましたが、
上記ソースにうまく載せ替えることができませんでしたので、
お手数ですが、知見をお借りできますと幸いです。
https://teratail.com/questions/31448

PHP

1<?php 2if ($item->get_date('Y/m/d') >= date('Y/m/d', strtotime( '- 3 day' ) ) ) { echo '<span class="newmark">NEW!</span>'; } 3 ?>

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

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

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

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

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

kei344

2018/08/27 14:07

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問