※ ChatGPTを利用し、要約された質問です(原文:複数のRSSにそれぞれClass名を追加したい.)
複数のRSSにそれぞれClass名を追加したい
このQ&Aのポイント
Google AJAX Feed APIを使用して、ホームページに複数のRSSを新しい順に入れ子で表示しています。しかし、各RSSにクラス名を追加したいのです。
試行錯誤しましたが、うまくいきませんでした。以下にコードを示します。希望の機能としては、読み込んだ順にフェードインで表示し、非同期で読み込みたいです。
利用している関数についても説明します。initialize関数では、複数のRSSフィードを追加します。feedAdd関数では、指定したRSSのURLからエントリーを取得し、配列に追加します。feedOutput関数では、エントリーを指定した数だけ表示します。asort関数は配列を指定したキーでソートします。
Google AJAX Feed APIでホームページに複数のRSSを新しい順に入れ子で表示しているのですが、各RSSにclass名を追加したいです。
例)
twitter <li class="twitter"></li>
facebook <li class="facebook"></li>
自分なりに試行錯誤してみましたが、うまく行きませんでした。
下記にコードを書いております。(合ってるか不安です)
よろしくお願いします。
後、希望の機能で
●読み込んだ順にフェードインで表示をしたい
●非同期
もよろしければお願いします。
-----------------------------------------------
google.load("feeds", "1");
var entryArray = new Array();
var entryNum = 0;
function initialize() {
/* url */
feedAdd("URL_facebook", 2);
feedAdd("URL_twitter", 1);
}
function feedAdd(rssUrl, boolNum) {
var feed = new google.feeds.Feed(rssUrl);
feed.setNumEntries(20);
feed.load(function(result) {
if (!result.error) {
for (var i = 0; i < result.feed.entries.length; i++) {
entryArray.push(result.feed.entries[i]);
var date = new Date(result.feed.entries[i].publishedDate);
entryArray[entryNum].sortDate = ( date.getFullYear()*10000 ) + ( (date.getMonth() + 1)*100 ) + date.getDate();
entryArray[entryNum].blogName = result.feed.title;
entryNum+=1;
}
}else{
alert(result.error.code + ":" + result.error.message);
}
if(boolNum==1){
feedOutput("feed", 100);
}
});
}
function feedOutput(feedId, listNum){
var container = document.getElementById('rss');
entryArray = asort(entryArray, "sortDate");
if(listNum > entryNum){
listNum = entryNum;
}
for (var i = 0; i < listNum; i++) {
var entry = entryArray[i];
var date = new Date(entry.publishedDate);
var eTitle = entry.title;
var eCont = entry.contentSnippet.substring(0, 100);
var eLink = entry.link;
var eimg = "";
var wrap = document.createElement("li");
var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.jpg)|(\.JPG))"/);
if(imgCheck){
eimg += '<img ' + imgCheck[0] + '\>';
}
wrap.innerHTML = eimg + '<span>' + date.getFullYear() + '年' + (date.getMonth() + 1 ) + '月' + date.getDate() + '日<\/span><br\>' + eCont + '...<br\><a href="' + eLink + '" target="_blank">投稿へ移動<\/a>';
container.appendChild(wrap);
}
}
function asort(myArray, key){
return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } );
}
google.setOnLoadCallback(initialize);
補足
遅くなりました。 コメントはこんな感じでよろしいでしょうか? ---------------------------------------------------------- google.load("feeds", "1"); var entryArray = new Array(); var entryNum = 0; function initialize() { /* url */ feedAdd("URL_facebook", 2); feedAdd("URL_twitter", 1); } function feedAdd(rssUrl, boolNum) { var feed = new google.feeds.Feed(rssUrl); // URL feed.setNumEntries(20); // 記事数 feed.load(function(result) { // 情報の出力 if (!result.error) { for (var i = 0; i < result.feed.entries.length; i++) { // 個々の情報を出力 entryArray.push(result.feed.entries[i]); var date = new Date(result.feed.entries[i].publishedDate); entryArray[entryNum].sortDate = ( date.getFullYear()*10000 ) + ( (date.getMonth() + 1)*100 ) + date.getDate(); entryArray[entryNum].blogName = result.feed.title; entryNum+=1; } }else{ alert(result.error.code + ":" + result.error.message); } if(boolNum==1){ feedOutput("feed", 100); } }); } function feedOutput(feedId, listNum){ var container = document.getElementById('rss'); // 出力先のID名 entryArray = asort(entryArray, "sortDate"); if(listNum > entryNum){ listNum = entryNum; } for (var i = 0; i < listNum; i++) { // 出力の内容 var entry = entryArray[i]; var date = new Date(entry.publishedDate); var eTitle = entry.title; var eCont = entry.contentSnippet.substring(0, 100); var eLink = entry.link; var wrap = document.createElement("li"); // 画像 var eimg = ""; var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.jpg)|(\.JPG))"/); if(imgCheck){ eimg += '<img ' + imgCheck[0] + '\>'; } // html wrap.innerHTML = eimg + '<span>' + date.getFullYear() + '年' + (date.getMonth() + 1 ) + '月' + date.getDate() + '日<\/span><br\>' + eCont + '...<br\><a href="' + eLink + '" target="_blank">投稿へ移動<\/a>'; container.appendChild(wrap); } } function asort(myArray, key){ return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } ); } google.setOnLoadCallback(initialize); ---------------------------------------------------------- if文で色々やってみたのですがダメでした。 よろしくお願いします。