,xXn +β>VArial 5ZIn β@β@ ,. ~Wβ> dTu favoritesFileRC:\Program Files\Radio UserLand\www\userland\publicTools\weblogsComHelperUrls.opmllastDayWriteUrlslastNewSiteUrlhttp://diveintomark.org/VArial ,If_,n. ~Wβ@  * 0changesX favoritesprefsVArial 322xA8Arial IZ%FT%CLANDwinon checkOne (adrtable) local (url = nameof (adrtable^)) local (changesUrl = url) if defined (adrtable^.changesUrl) changesUrl = adrtable^.changesUrl local (urllist) bundle //set urllist try urllist = string.urlsplit (changesUrl) else changesUrl = changesUrl + "/" urllist = string.urlsplit (changesUrl) local (headers) new (tabletype, @headers) headers.referer = "http://newhome.weblogs.com/stories/storyReader$34" local (s) try adrtable^.ctReads++ s = tcp.httpClient (server:urllist [2], path:urllist [3], flMessages:true, ctFollowRedirects:3, timeOutTicks: 60 * 15, adrHdrTable:@headers, flJustHeaders:true) adrtable^.ctConsecutiveErrors = 0 else adrtable^.ctErrors++ adrtable^.ctConsecutiveErrors++ adrtable^.error = tryerror return local (resultheaders, sizehtml, flGotSizeFastWay = false) new (tabletype, @resultheaders) webserver.util.parseHeaders (s, @resultheaders) if defined (resultheaders.["Content-Length"]) try sizehtml = number (resultheaders.["Content-Length"]) flGotSizeFastWay = true if not flGotSizeFastWay local (s = string.httpResultSplit (tcp.httpClient (server:urllist [2], path:urllist [3], flMessages:true, ctFollowRedirects:3, timeOutTicks: 60 * 60, adrHdrTable:@headers))) sizehtml = sizeof (s) local (flchanged = false, diff = sizehtml - adrtable^.sizeHtml) if diff < 0 diff = -diff if diff > 50 flchanged = true if flchanged adrtable^.whenLastUpdate = clock.now () adrtable^.ctUpdates++ adrtable^.sizeHtml = sizehtml weblogsComHelperData.changes.[url] = clock.now () bundle //test code checkOne (@weblogsComHelperData.favorites.["http://www.poynter.org/medianews/"]) A:Tn Arial  lL=mLANDwinif not defined (weblogsComHelperData.favorites) new (tabletype, @weblogsComHelperData.favorites) local (adrdata = weblogsCom.init (), adrfavorite, adrweblog) for adrfavorite in @adrdata^.favorites local (name = nameof (adrfavorite^)) adrweblog = @adrdata^.weblogs.[name] if defined (adrweblog^) local (adr = @weblogsComHelperData.favorites.[adrweblog^.url]) weblogsComHelperSuite.initFavorite (adr) adr^.name = name if not defined (weblogsComHelperData.changes) new (tabletype, @weblogsComHelperData.changes) if not defined (system.temp.weblogsComHelper) new (tabletype, @system.temp.weblogsComHelper) :{yArial ,3 kfoWLANDwinon initFavorite (adr) if not defined (adr^) new (tabletype, adr) if not defined (adr^.enabled) adr^.enabled = true if not defined (adr^.name) adr^.name = "" if not defined (adr^.ctReads) adr^.ctReads = 0 if not defined (adr^.ctUpdates) adr^.ctUpdates = 0 if not defined (adr^.whenLastRead) adr^.whenLastRead = date (0) if not defined (adr^.whenLastUpdate) adr^.whenLastUpdate = date (0) if not defined (adr^.sizeHtml) adr^.sizeHtml = 0 if not defined (adr^.ctErrors) adr^.ctErrors = 0 if not defined (adr^.ctConsecutiveErrors) adr^.ctConsecutiveErrors = 0 if not defined (adr^.error) adr^.error = "" {/Arial ~XGWQ-LANDwinweblogscomhelpersuite.menucommands.addasite () Arial ~XG(Q-LANDwinWeblogsComHelper Add a site.. $pnEArial p*DArial GhG n={LANDwinif dialog.ask ("Enter the url for the site you want to help:", @weblogsComHelperData.prefs.lastNewSiteUrl) local (adrtable = @weblogsComHelperData.favorites.[weblogsComHelperData.prefs.lastNewSiteUrl]) if not defined (adrtable^) new (tabletype, adrtable) adrtable^.name = "" adrtable^.enabled = false edit (adrtable) 73G^Gh addASite7Arial ~pGԔ7lLANDwinweblogsComHelperSuite.init () bundle //check the favorite that has been least recently checked local (adr, adroldest, whenoldest = clock.now ()) for adr in @weblogsComHelperData.favorites weblogsComHelperSuite.initFavorite (adr) if adr^.enabled if adr^.whenLastRead < whenoldest whenoldest = adr^.whenLastRead adroldest = adr adroldest^.whenLastRead = clock.now () try {weblogsComHelperSuite.checkOne (adroldest)} system.temp.weblogsComHelper.urlLastRead = nameof (adroldest^) bundle //ping all sites in the changes table local (changes = weblogsComHelperData.changes) for adr in @changes local (url = nameof (adr^)) local (name = weblogsComHelperData.favorites.[url].name) local (startticks = clock.ticks ()) weblogupdates.ping (name, url) radio.log.add ("WeblogsComHelper", "I pinged on behalf of " + name + ".", startticks) table.emptyTable (@weblogsComHelperData.changes) bundle //every day, write out the list of sites I'm watching if not defined (weblogsComHelperData.prefs.lastDayWriteUrls) weblogsComHelperData.prefs.lastDayWriteUrls = -1 local (day, month, year, hour, minute, second) date.get (clock.now (), @day, @month, @year, @hour, @minute, @second) if day != weblogsComHelperData.prefs.lastDayWriteUrls weblogsComHelperData.prefs.lastDayWriteUrls = day weblogsComHelperSuite.utilities.saveMyFavorites () weblogsComHelperSuite.utilities.shipIt () weblogsComHelperThread.ct++ nArial G'G LANDwinlocal (f = weblogsComHelperData.prefs.favoritesFile) file.surefilepath (f) local (xmltext) bundle //fill xmltext local (favoritesOutline) new (outlinetype, @favoritesOutline) local (oldtarget = target.set (@favoritesOutline)) local (adr, atts) new (tabletype, @atts) for adr in @weblogsComHelperData.favorites if adr^.enabled op.insert (adr^.name, down) atts.type = "link" atts.url = nameof (adr^) atts.ctConsecutiveErrors = adr^.ctConsecutiveErrors atts.ctErrors = adr^.ctErrors atts.ctReads = adr^.ctReads atts.ctUpdates = adr^.ctUpdates atts.whenLastRead = adr^.whenLastRead atts.whenLastUpdate = adr^.whenLastUpdate op.attributes.addgroup (@atts) op.firstsummit () op.deleteline () scratchpad.favoritesOutline = favoritesOutline xmltext = op.outlinetoxml (@favoritesOutline) target.set (oldtarget) file.writewholefile (f, xmltext) ]6Arial GGzLANDwinlocal (pc = file.getpathchar ()) scratchpad.favorites = weblogsComHelperData.favorites //make a backup copy filemenu.save () //be sure it's safe new (tabletype, @weblogsComHelperData.favorites) local (f = user.radio.prefs.wwwfolder + "userland" + pc + "publicTools" + pc + "weblogsComHelper.root") target.set (@weblogsComHelperData) file.surefilepath (f) filemenu.savecopy (f) weblogsComHelperData.favorites = scratchpad.favorites ]{Arial Q'LANDwinlocal (adr) local (s = "") for adr in @weblogscomhelperdata.favorites s = s + nameof (adr^) + "\r" clipboard.putvalue (s) }.GNG'  #/ ?saveMyFavorites;shipIt!urlsOnClipboard$8V ~X[  & 3? DP ]i v checkOne init W initFavoritemenu menucommands threadScriptG utilities%U3$ ~X5 _ctenabledVArial B&. ~WG ! 7C ZweblogsComHelperData6weblogsComHelperSuite%weblogsComHelperThread&V/>: Arial ~W;?Q-LANDwinweblogsComHelperData changes favorites prefs weblogsComHelperSuite checkOne init initFavorite menu menucommands addASite threadScript utilities saveMyFavorites shipIt urlsOnClipboard weblogsComHelperThread ct enabled  :8  :  :  :  :8  :0  :0  :0  :0  :0  :  :0  :0  :x  :x  :x  :8  :  : '}j4Arial MS Sans Serif DsTimes New Roman" /Arial >Arial MS Sans Serif