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

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

2776閲覧

ワードプレスでRSS取得(外部ブログの記事一覧表示)について

teraokateraoka

総合スコア9

RSS

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

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/06/06 08:18

編集2018/06/07 04:42

現在ワードプレスサイトに、別のワードプレスブログの記事をRSSで取得し表示させています。

現在RSSは5つのサイトから取得するよう設定していますが以下のことがうまくいきません。

■記事の取得数が10になっているものを変更したい。

1ページに表示する最大数が10で取得する記事数を全記事にしたいと考えています。素人ですのでRSS取得のphpコードは他のサイトからコピーして引用して使わせていただいています。

わかる方がいらっしゃいましたらどこを変更すれば良いか教えていただけますでしょうか。

よろしくお願いいたします。

(以下、RSS取得コード)
https://gist.github.com/cherenkov/2663757より引用して使わせていただいております。

================================================

PHP

1<?php 2$nums = 10; // 1ページの表示件数 3$rsslist = array('http://michaelsan.livedoor.biz/index.rdf', // RSSのURLを配列にして代入します。 4 'http://blog.livedoor.jp/domesaka/index.rdf', // 2件で大丈夫な場合はこの行を削除します。(※行を追加して4件以上にしても大丈夫です。) 5 'http://news4vip.livedoor.biz/index.rdf'); 6//デバッグ時はコメントアウトにする。うまくいかなかったらcookieを消す。 7session_start(); // ページ遷移ごとにリクエストしないようにセッションを使用します。 8header('Content-Type:text/html; charset=UTF-8'); 9if(!isset($_SESSION['rssses'])) { 10 foreach($rsslist as $url) { 11 $tmpData = file_get_contents($url); 12 $tmpData = str_replace('dc:creator', 'Creator', $tmpData); 13 $tmpData = str_replace('dc:date', 'Date', $tmpData); 14 $tmpData = str_replace('pubDate', 'Date', $tmpData); 15 $rssData[] = simplexml_load_string($tmpData); 16 } 17 foreach($rssData as $key => $value) { 18 if($value['version'] == '2.0') { 19 foreach($value->channel->item as $item) { 20 $date = date_create($item->Date); 21 $item->Date = date_format($date, 'Y-m-d\TH:i:sP'); 22 } 23 } 24 } 25 $i = count($rsslist); 26 $allrss = array(); 27 for($n=0;$n<$i;$n++) { 28 $rssarr[$n] = xml2arr($rssData[$n]); 29 //pr($rssarr[$n]); 30 $channelTitle = $rssarr[$n]['channel']['title']; 31 if(isset($rssarr[$n]['channel']['item'])) { 32 $rssarr[$n]['channel']['item'] = addChannelTitle($rssarr[$n]['channel']['item'], $channelTitle); 33 $allrss = array_merge($allrss, $rssarr[$n]['channel']['item']); 34 } else { 35 $rssarr[$n]['item'] = addChannelTitle($rssarr[$n]['item'], $channelTitle); 36 $allrss = array_merge($allrss, $rssarr[$n]['item']); 37 } 38 } 39 usort($allrss, 'cmp'); 40 //pr($allrss); 41 $i = count($allrss); 42 for($n=0;$n<$i;$n++) { 43 if(empty($allrss[$n]['title'])) { 44 $allrss[$n] = null; 45 } 46 } 47 48 $_SESSION['rssses'] = $allrss = array_filter($allrss); 49} else { 50 $allrss = $_SESSION['rssses']; 51} 52function addChannelTitle($items, $channelTitle) { 53 $result = array(); 54 foreach($items as $item) { 55 $result[] = array_merge($item, array('channel_title'=>$channelTitle)); 56 } 57 return $result; 58} 59//dumpして確認する関数 60function pr($var) { 61 echo '<pre>'; print_r($var); echo '</pre>'; 62} 63# オブジェクト→配列変換用関数(http://soft.fpso.jp/develop/php/entry_2764.html) 64function xml2arr($xmlobj) { 65 $arr = array(); 66 if (is_object($xmlobj)) { 67 $xmlobj = get_object_vars($xmlobj); 68 } else { 69 $xmlobj = $xmlobj; 70 } 71 foreach ($xmlobj as $key => $val) { 72 if (is_object($xmlobj[$key])) { 73 $arr[$key] = xml2arr($val); 74 } else if (is_array($val)) { 75 foreach($val as $k => $v) { 76 if (is_object($v) || is_array($v)) { 77 $arr[$key][$k] = xml2arr($v); 78 } else { 79 $arr[$key][$k] = $v; 80 } 81 } 82 } else { 83 $arr[$key] = $val; 84 } 85 } 86 return $arr; 87} 88function cmp($a, $b) 89{ 90 return strcmp($b['Date'], $a['Date']); 91} 92$maxnum = count($allrss); // 最大件数を取得 93$pages = ceil($maxnum / $nums); // 最大ページ数を計算 94$page = (empty($_GET['page'])) ? 1 : $_GET['page']; // 現在のページを取得 95$start = ($page - 1) * $nums; // スタートページを設定 96$script = basename($_SERVER['SCRIPT_NAME']); 97$link = ''; 98// 前ページ・次ページのリンク設定※表示形式は自由に指定してください。 99if ($page > 1) $link = '<a href="'.$script.'?page='.($page -1) .'">PREV</a>&nbsp|'; 100// 各ページへのリンクを表示する場合 101for($n = 1; $n <= $pages; $n++) { 102 if($n == $page){ 103 $link .= '['.$n.']'; 104 } else { 105 $link .= '[<a href="'.$script.'?page='. $n .'">'.$n.'</a>]'; 106 } 107} 108if ($page < $pages) $link .= ' <a href="'.$script.'?page='.($page + 1) .'">NEXT</a>'; 109echo '<div style="margin: 15px 10px;">' . $link . "</div>\n"; 110echo "<h3>新着RSS</h3>\n<ul>\n"; 111$count = 1; 112foreach ($allrss as $rss => $item) { 113 if ($count > $start && $count <= $start + $nums) { 114 $date = preg_replace('/([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9:]{3}[0-9]{2})[0-9+:]+$/', '$1/$2/$3 $4', $item['Date']); 115 echo '<li class=""><a href="' . $item['link'] . '"'; 116 echo '>' . $date . ' ' . $item['title'] . ' ' . $item['channel_title'] .'</a></li>'; 117 echo "\n"; 118 } 119 $count++; 120} 121echo "</ul>\n"; 122echo '<div style="margin: 15px 10px;">' . $link . "</div>\n"; 123//pr($allrss);

================================================

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

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

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

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

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

CHERRY

2018/06/06 11:12

記載されているソースコード部分で書式が崩れていて見にくいので、質問するときのヒントの[表現するための言葉がわからない時は表現の仕方を工夫しましょう](https://teratail.com/help/question-tips#questionTips3-3-1)や[ソースコードを書きましょう](https://teratail.com/help/question-tips#questionTips3-5-1)を参考に「<CODE>」ボタンを利用して、ソースコードや設定ファイルの内容を見やすく記載してください。
teraokateraoka

2018/06/07 00:19

大変失礼いたしました。コード部分の修正を行いました。
papinianus

2018/06/07 01:20

特定のサイトってどこですか?
teraokateraoka

2018/06/07 01:36

私がRSSを取得しようとしている複数のサイトの一つです。ここではサイト名などは控えさせていただきます。
papinianus

2018/06/07 03:37 編集

「複数のサイトの一つ」であり、「控え」ていることは最初から分かったうえで言っています。元の作者もそうですし、質問者様がトライして、取得できるところばかりなのに、特定の一つが取れないという現象は、取れないそのサイトに原因があることを伺わせる事情です。そのサイトの取得対象に問題がないということを質問者様が保証するということですか?
teraokateraoka

2018/06/07 04:43

コメントありがとうございます。質問内容を変更いたしました。特定のサイトのRSSが取得できない問題に関しましてはこちらで調査していきたいと思います。ありがとうございました。
CHERRY

2018/06/07 04:51

出先なので、まだ、コードは見ていないのですが... 相手先が提供する RSS には、10件以上のデータが存在しているのでしょうか? 大手のBlog サービスを見ると10件しか提供されていないようです。
teraokateraoka

2018/06/07 05:04

相手先ブログは私が管理しているワードプレスのブログです。RSSを提供している件数というのが決まっている場合があるのですね。今コメントいただいた内容で検索してみると設定内容が記載されたサイトがあり試してみるとうまく表示することができました。ありがとうございました。回答していただければベストアンサーに選ばせていただきます。よろしくお願いいたします。
CHERRY

2018/06/08 00:50

お言葉に甘えて...  「質問への追記・修正」欄に記載した内容をもう少しわかりやすく書き直して、投稿しておきます。
guest

回答2

0

ベストアンサー

ブログサイトの RSS は、件数が決まっていること多いです。
大手の Blog サービスの RSS を確認してみると 最新の10件しか提供されていないようです。

プログラムが参照している RSS は、10件以上のデータが存在しているのでしょうか?

RSSが 10 件しか提供されていない場合は、10件以上のデータを取得件することはできませんので、RSSの提供側の出力件数を確認してください。

投稿2018/06/08 00:51

CHERRY

総合スコア25171

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

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

teraokateraoka

2018/06/08 00:58

参照元サイトのRSSの表示件数を増やすことで解決できました。ありがとうございました。
guest

0

10記事でページングされる処理となっているものを1ページに収めるということを、このコードをベースにしてやるなら、最初の10という数値を大きくしてください(色々と機械の都合があるので、1万とかにするのが無難です。5兆とかにはしないほうがいいです)。

ページングそのものをしないようにするほどに書きかえるのは、このコードの著作権に触れる可能性もあるので控えます。

投稿2018/06/07 05:01

papinianus

総合スコア12705

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

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

teraokateraoka

2018/06/07 05:06

ご回答ありがとうございます。1ページに収めるのではなく10ページごとにページングしているのはそのままで、記事の取得数の総数を増やすという処理を求めておりました。説明不足で申し訳ありません。 コメント欄でいただいた別の方の助言で解決いたしました。 ありがとうございました。
papinianus

2018/06/07 05:14

もう解決しているのであれですが、このコードはもともと10件で足切りをしていません。 要約すると「10件しかないrssを取得したら10件しかないのですが(rssにないデータを引き出せますか)?」という質問だったということですね
teraokateraoka

2018/06/07 05:19

相手先のブログ(私が管理しているワードプレスのブログ)がRSSフィードに表示する記事数を10件に設定されていました。フィードへの記事表示数を相手先ブログ側で制限されていることを知りませんでした。またそれを変更できることも知りませんでしたのでこのような質問になってしまいました。ご迷惑をおかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問