フィードの取得&表示方法について
http://neta-times.net/entries/953/
現在HPを開設しているのですが、そこで上記のサイトを参考にして書きのようにコードを記述してRSSフィードを取得&表示しています。
<script type="text/javascript">
<!--//
google.load("feeds", "1");
var entryArray = new Array();
var entryNum = 0;
function initialize() {
feedAdd("RSSフィードURL", 1);
}
function feedAdd(rssUrl, boolNum) {
var feed = new google.feeds.Feed(rssUrl);
feed.setNumEntries(5);//サイト1つあたりの取得するフィード数
feed.load(function(result) {
if (!result.error) {
for (var i = 0; i < result.feed.entries.length; i++) {
entryArray[entryNum] = result.feed.entries[i];
var date = new Date(result.feed.entries[i].publishedDate);
entryArray[entryNum].sortDate = ( date.getFullYear()*1000000 ) + ( (date.getMonth() + 1)*3600*32 ) + ( date.getDate()*3600 ) + ( date.getHours()*60 ) + date.getMinutes();
entryArray[entryNum].blogName = result.feed.title;
entryNum+=1;
}
}
if(boolNum==1){
feedOutput("feed", 100);//フィードの出力
}
});
}
function feedOutput(feedId, listNum){
var useFeed = "";
var useDate = "";
var container = document.getElementById(feedId);
var refDate = new Date();
refDate = new Date(+refDate - (7*24*60*60*1000 + refDate%86400000 - refDate.getTimezoneOffset()*60000));
var newImage = '<img src="./img/new.gif" alt="new">';
entryArray = asort(entryArray, "sortDate");
if(listNum==100){//出力するリスト数
listNum = entryNum;
}
for (var i = 0; i < listNum; i++) {
var entry = entryArray[i];
var date = new Date(entry.publishedDate);
var y = date.getFullYear();
if (y < 10) {y = "0" + y;}
var m = date.getMonth() + 1;
if (m < 10) {m = "0" + m;}
var d = date.getDate();
if (d < 10) {d = "0" + d;}
useDate = y + "年" + m + "月" + d + "日";
youbi = date.getDay();
day = new Array("日","月","火","水","木","金","土");
useFeed += '<div style="float:left;width:115px;">';
useFeed += (date>refDate)?newImage:""; //←new画像の表示を追加
useFeed += " "+ y + "/" + m + "/" + d + "(" + day[youbi] + ")";
useFeed += '</div><div style="float: left;width:400px;height:18px;overflow:hidden;"><a href="' + entry.link + '" target="_blank" title="' + entry.title + '【' + entry.blogName + '】">' + entry.title + '/' + entry.blogName +'</a></div>';
}
container.innerHTML = '<div>' + useFeed + '</div>';
}
function asort(myArray, key){
return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } );
}
google.setOnLoadCallback(initialize);
//-->
</script><font size="2" face="Times new Roman">
<div style="height:90px; width:600px; overflow:auto;" id="feed">Loading...</div>
上記のコードで問題なくフィードを表示できるのですが、一点修正したい箇所があります。
『entry.blogName』の部分なのですが、ここにはブログのタイトルなどを取得して表示されます。
ブログのタイトルがそのまま(芸能人の名前など)だったらいいのですが、稀にまったく関係ないタイトルがつけられていてそれだけだと誰のブログなのか閲覧者は分からなくなります。
それで受信するタイトルを自身の指定したテキストに書き換えたいのですが、そんな事はできるのでしょうか?
取得するブログのタイトル(entry.blogName)が○○だけど実際に表示する時には△△と表示させるような。
PHPは初心者でまったく分かりません。
詳しい方いらっしゃいましたらご教示ください。
何卒よろしくお願いします。
補足
ソートは全部で30個くらいで、基本的には日付順に並んでいるのですが、 決まった数個のフィードだけ、日付と関係なく、最前部と中間部に表示されてしまいます。。。 同様のスクリプトを使用して、別の複数フィードリストの読み込みページも作っているのですが、 そちらは、問題なく日付順にソートされます。 上記のことから、フィード側に問題があるのかなと思っていたのですが、 偶然エラーが起きていないだけで、スクリプトに問題があるのでしょうか? 参考までに以下がスクリプトを添付いたします。 google.load("feeds", "1"); var entryArray = new Array(); var entryNum = 0; function initialize() { feedAdd("***URL_A***","***ブログ名_A***", 2); feedAdd("***URL_B***","***ブログ名_B***", 1); } function feedAdd(rssUrl, rsstitle, boolNum) { var blogtitle = rsstitle; var feed = new google.feeds.Feed(rssUrl); feed.setNumEntries(1); feed.load(function(result) { if (!result.error) { for (var i = 0; i < result.feed.entries.length; i++) { entryArray[entryNum] = result.feed.entries[i]; var date = new Date(result.feed.entries[i].publishedDate); entryArray[entryNum].sortDate = ( date.getFullYear()*1000000 ) + ( (date.getMonth() + 1)*3600*32 ) + ( date.getDate()*3600 ) + ( date.getHours()*60 ) + date.getMinutes(); entryArray[entryNum].blogName = blogtitle; entryNum+=1; } } if(boolNum==1){ feedOutput("feed", 100); } }); } function feedOutput(feedId, listNum){ var useFeed = ""; var useDate = ""; var container = document.getElementById(feedId); entryArray = asort(entryArray, "sortDate"); if(listNum==100){ listNum = entryNum; } for (var i = 0; i < listNum; i++) { var entry = entryArray[i]; var eimg = ""; var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.jpg)|(\.JPG)|(\.gif)|(\.png))/); if(imgCheck){ eimg += '<img ' + imgCheck[0] + '" width="" >'; } else { eimg += '<img src="dammy.gif" width="" >'; } var date = new Date(entry.publishedDate); var y = date.getFullYear() ; var week = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') ; var w = week[date.getDay()]; var m = date.getMonth() + 1; if (m < 10) {m = "0" + m;} var d = date.getDate(); if (d < 10) {d = "0" + d;} var h = date.getHours(); if (h < 10) {h = "0" + h;} var mn = date.getMinutes(); if (mn < 10) {mn = "0" + mn;} useDate = m + "月" + d + "日"; useFeed += '<li class=""><a href="' + entry.link + '" target="_blank"><span class=' + '"list_box"><span class=""><h4>' + entry.blogName + '</h4>' + eimg + '</span><h3>' + entry.title + '</h3><span class="">' + y + '.' + m + '.' + d + '.' + w + '</span></span></a></li>'; } container.innerHTML = useFeed; } function asort(myArray, key){ return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } ); } google.setOnLoadCallback(initialize);