若有人問我是不是會釋出 Code ,我這次的答案是會的,畢竟只是當初隨便寫寫,現在也無意去更新或精簡化,更甚是加註釋,所以直接釋出並供其他人改寫,對一個產品的生命週期來講是有益的。
而以下是這次試驗使用的 Code :
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet0 = ss.getSheets()[0]; var sheetdatabase = ss.getSheets()[1]; var ydict = {jan : '01', feb : '02', mar : '03', apr : '04', may : '05', jun : '06',jul : '07', aug : '08', sep : '09', oct : '10', nov : '11', dec : '12'}; var failed = 0, counted = 0; function doGet() { failed = 0; var num = (sheet0.getLastRow()).toFixed(0).toString(); var values = sheet0.getDataRange().getValues(); Logger.log(num); for(var i = 1; i < num; i++ ){ parseRSS(values[i][0].toString(), values[i][1].toString(), values[i][2].toString(), i+1); } RSSdatabase(1); } function parseRSS(Name, feed, puD, count) { var item, date, title, link, desc, encl, tag; var ArrayTemp = new Array(); var txt; var lastdate = puD; if ((lastdate!=null) && (lastdate!='')){ try{ var result = UrlFetchApp.fetch(feed, { muteHttpExceptions: true }); Logger.log("code: " + result.getResponseCode()); Logger.log("text: " + result.getContentText()); txt = result.getContentText(); }catch(e){ var currentdate = new Date(); var eventtime = currentdate.getFullYear() + "/" + (currentdate.getMonth()+1) + "/" + currentdate.getDate() + " " + currentdate.getHours() + ":" + currentdate.getMinutes() + ":" + currentdate.getSeconds() + " UTC+0800"; sheet0.getRange("D"+count).setValue(e); sheet0.getRange("E"+count).setValue(eventtime); } try { //var txt = loadXMLDoc(feed); var doc = Xml.parse(txt, false); var items = doc.getElement().getElement("channel").getElements("item"); //loop for add items for (var i in items) { item = items[i]; date = item.getElement("pubDate").getText().replace(/([A-Za-z]{3}\, )/ig,''); //date split ArrayTemp = date.split(" ",5); //prevent single number if(ArrayTemp[0].length < 2) ArrayTemp[0] = "0" + ArrayTemp[0]; //rebuild date format date = ArrayTemp[2] + "/" + ydict[ArrayTemp[1].toLowerCase()] + "/" + ArrayTemp[0] + " " + ArrayTemp[3] + " UTC" + ArrayTemp[4]; //check last update if(date==lastdate){failed=0;break;} //update the what time is update if(i==0) {sheet0.getRange("C"+count).setValue(date);} //title title = LanguageApp.translate(item.getElement("title").getText(),"zh-CN","zh-TW"); //link link = item.getElement("link").getText(); //desc = item.getElement("description").getText(); //magnet encl = item.getElement("enclosure").getAttribute('url').getValue(); tag = LanguageApp.translate(item.getElement("category").getText(),"zh-CN","zh-TW").replace("RAW","RAW"); //item add to database sheetdatabase.appendRow([Name, title, link, encl, date, tag]); } var currentdate = new Date(); var eventtime = currentdate.getFullYear() + "/" + (currentdate.getMonth()+1) + "/" + currentdate.getDate() + " " + currentdate.getHours() + ":" + currentdate.getMinutes() + ":" + currentdate.getSeconds() + " UTC+0800"; sheet0.getRange("F"+count).setValue(eventtime); } catch(e) { } } } function RSSdatabase(count){ var sheet = ss.getSheets()[count]; var columnToSortBy = 5; var num = (sheet.getLastRow()).toFixed(0).toString(); var range = sheet.getRange("A2:G"+num); range.sort( { column : columnToSortBy, ascending: false } ); } function SameClear(){ var sheet = ss.getSheets()[1]; var range = sheet.getRange("C2:C100"); var values = range.getValues(); var lastvalue = '',temp; var j=2; for ( var i in values){ temp = values[i].toString(); if (temp == lastvalue){ sheet.deleteRow(j); }else{lastvalue=values[i].toString();j++;} } }
0 件のコメント:
コメントを投稿