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

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

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

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

PHP

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

Q&A

解決済

1回答

2428閲覧

複数サイトから取得したRSSフィードを複数ブロックに分けて表示したい

purerism

総合スコア6

RSS

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

PHP

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

0グッド

0クリップ

投稿2018/08/26 22:44

編集2018/08/27 04:53

前提・実現したいこと

現在、複数サイトからRSSフィードを取得し、
"新着順"に並び替えて表示を行っていますが、
新着記事を1〜5、6〜10、11〜15のように、
5本ずつブロックを分けて表示したいです。

最終的には、「もっと見る」ボタンを実装して、
新着記事を5本ずつ閲覧できるようにしたいと考えています。

該当のソースコード

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?> 117

【参照元】http://idea-cloud.com/funky/diary/curl_multi.html

補足

もともとは下記の記述で取得件数を分けていましたが、
上記ソースにうまく載せ替えることができず。
お手数ですが、知見をお借りできますと幸いです。

PHP

1$maxitems = $rss->get_item_quantity(15); 2$rss_items = $rss->get_items(0, 5); 3$rss_items2 = $rss->get_items(6, 5); 4$rss_items3 = $rss->get_items(11, 5);

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

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

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

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

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

m.ts10806

2018/08/27 00:13

「参照元」というのが実際のコードにないものでしたらコードブロックから出してください。コードブロックにはコード、エラーのみ記載してください
purerism

2018/08/27 04:56

失礼しました。参照元の記述ですが、実際のコードではないので、コードブロックから外させていただきました。
guest

回答1

0

自己解決

RSSフィードを複数ブロックに分けて表示する方法が不明だったので、
jQueryを使って、記事をn件ずつ表示するようにしました。

参考記事は下記になります。
https://teratail.com/questions/92715

投稿2018/08/27 12:52

purerism

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問