前提・実現したいこと
現在、複数サイトから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 ?>
あなたの回答
tips
プレビュー