Author: duncan
Date: Wed Oct 18 22:53:58 2006
New Revision: 8416
Added:
branches/rel-1/freevo/src/helpers/rssFeed.py
branches/rel-1/freevo/src/helpers/rssHELP
branches/rel-1/freevo/src/helpers/rssPeriodic.py
branches/rel-1/freevo/src/helpers/rssServer.py
Log:
Justin Wetherell's rss feed server
Added: branches/rel-1/freevo/src/helpers/rssFeed.py
==============================================================================
--- (empty file)
+++ branches/rel-1/freevo/src/helpers/rssFeed.py Wed Oct 18 22:53:58 2006
@@ -0,0 +1,85 @@
+import re
+import config
+
+__all__ = ["Feed"]
+
+class Feed:
+ def __init__(self, inputSource):
+ "Feed"
+ self.title="None"
+ self.description="None"
+ self.items=[]
+ self.parseFeed(inputSource)
+
+ class Item:
+ "Feed Item"
+ title="None"
+ url="None"
+ date="None"
+ description="None"
+ type="None"
+
+ def parseFeed(self, feed):
+ headerPattern = re.compile('<channel>.*?</channel>',re.DOTALL)
+ itemPattern = re.compile('<item>.*?</item>',re.DOTALL)
+ titlePattern = re.compile('<title>.*?</title>',re.DOTALL)
+ descriptionPattern =
re.compile('<description>.*?</description>',re.DOTALL)
+ urlPattern = re.compile('<enclosure url=".*?/>',re.DOTALL)
+ btPattern = re.compile('<link>.*?</link>',re.DOTALL)
+ datePattern = re.compile('<pubDate>.*?</pubDate>',re.DOTALL)
+
+ def removeExcessSpaces(string):
+ string = re.sub('^\s+', '', string)
+ return re.sub('\s+',' ',string)
+ def removeTags(string):
+ string = removeExcessSpaces(string)
+ return re.sub('<\S+?>', '', string)
+ def removeUrlTag(string):
+ string = removeExcessSpaces(string)
+ return re.split('"',string)[1]
+ def removeDesTag(string):
+ string = re.sub('<img src=.*?>','',string)
+ string = re.sub('<.*?>','',string)
+ string = re.sub('&','and',string)
+ string = removeTags(string)
+ return re.sub('<a href="\S+">','',string)
+ def getType(string):
+ for type in config.AUDIO_SUFFIX:
+ if string in type:
+ return "audio"
+ return "video"
+
+ #PROCESS HEADER
+ header = headerPattern.search(feed)
+ if header:
+ header = header.group()
+ title = titlePattern.search(header)
+ if title:
+ self.title = removeTags(title.group())
+ description = descriptionPattern.search(header)
+ if description:
+ self.description = removeDesTag(description.group())
+ #PROCESS ALL ITEMS
+ itemList = itemPattern.findall(feed)
+ for item in itemList:
+ newItem = self.Item()
+ title = titlePattern.search(item)
+ if title:
+ newItem.title = removeTags(title.group())
+ description = descriptionPattern.search(item)
+ if description:
+ newItem.description = removeDesTag(description.group())
+ url = urlPattern.search(item)
+ if url:
+ newItem.url = removeUrlTag(url.group())
+ newItem.type =
getType(re.split('"',re.split("\.",newItem.url)[-1])[0])
+ if re.search("^$",newItem.title) or
re.search("None",newItem.title):
+ newItem.title = newItem.url
+ else:
+ url = btPattern.search(item)
+ if url:
+ newItem.url = removeTags(url.group())
+ date = datePattern.search(item)
+ if date:
+ newItem.date = removeTags(date.group())
+ self.items.append(newItem)
Added: branches/rel-1/freevo/src/helpers/rssHELP
==============================================================================
--- (empty file)
+++ branches/rel-1/freevo/src/helpers/rssHELP Wed Oct 18 22:53:58 2006
@@ -0,0 +1,19 @@
+http://www.freevohelp.com/rss/index.html
+
+#RSS FEED FILES AND DIRECTORIES
+RSS_FEEDS='/etc/freevo/rss.feeds'
+RSS_VIDEO='/opt/media/tv/'
+RSS_AUDIO='/opt/media/podcasts/'
+
+You will need to make a rss.feeds file: it contains the URL and the number of
+days it's been published (7 days since it's been published, in this example):
+
+#/etc/freevo/rss.feeds file
+http://twit.libsyn.com/rss,7
+http://leo.am/podcasts/twit,7
+http://leo.am/podcasts/itn,7
+
+You can start it; with the following command:
+freevo rssServer start
+You can stop with the following command:
+freevo rssServer stop
Added: branches/rel-1/freevo/src/helpers/rssPeriodic.py
==============================================================================
--- (empty file)
+++ branches/rel-1/freevo/src/helpers/rssPeriodic.py Wed Oct 18 22:53:58 2006
@@ -0,0 +1,115 @@
+import re,os,glob,urllib,datetime,pickle
+import config
+import rssFeed
+
+def convertDate(string):
+ if not re.search("\d+\s+\S+\s+\d+",string):
+ return datetime.date.today()
+ itemDateList = re.split(" ", re.search("\d+\s+\S+\s+\d+",string).group())
+ day=int(itemDateList[0])
+ if itemDateList[1] == "Jan":
+ month=1
+ elif itemDateList[1] == "Feb":
+ month=2
+ elif itemDateList[1] == "Mar":
+ month=3
+ elif itemDateList[1] == "Apr":
+ month=4
+ elif itemDateList[1] == "May":
+ month=5
+ elif itemDateList[1] == "Jun":
+ month=6
+ elif itemDateList[1] == "Jul":
+ month=7
+ elif itemDateList[1] == "Aug":
+ month=8
+ elif itemDateList[1] == "Sep":
+ month=9
+ elif itemDateList[1] == "Oct":
+ month=10
+ elif itemDateList[1] == "Nov":
+ month=11
+ else:
+ month=12
+ year=int(itemDateList[2])
+ itemDate = datetime.date(year,month,day)
+ return itemDate
+
+def checkForDup(string):
+ cacheFile=config.FREEVO_CACHEDIR+"/rss.pickle"
+ try:
+ downloadedUrls=pickle.load(open(cacheFile,"r"))
+ except IOError:
+ return False
+ foundFile=False
+ for line in downloadedUrls:
+ if string in line:
+ foundFile=True
+ return foundFile
+
+def addFileToCache(string):
+ cacheFile=config.FREEVO_CACHEDIR+"/rss.pickle"
+ downloadedUrls=[]
+ try:
+ downloadedUrls = pickle.load(open(cacheFile,"r"))
+ except IOError:
+ pass
+ downloadedUrls.append(string)
+ pickle.dump(downloadedUrls, open(cacheFile,"w"))
+
+def createFxd(item,filename):
+ if "audio" in item.type:
+ fullFilename=config.RSS_AUDIO+filename
+ else:
+ fullFilename=config.RSS_VIDEO+filename
+ tempList=re.split("\.",filename)
+ ofile=tempList[0]
+ for line in tempList[1:-1]:
+ ofile=ofile+"."+line
+ ofile=ofile+".fxd"
+ try:
+ file = open(ofile, 'w')
+ file.write('<freevo>\n')
+ file.write(' <movie title="%s">\n'%item.title)
+ file.write(' <video>\n')
+ file.write(' <file id="f1">%s</file>\n'%fullFilename)
+ file.write(' </video>\n')
+ file.write(' <info>\n')
+ file.write(' <plot>%s</plot>\n'%item.description)
+ file.write(' </info>\n')
+ file.write(' </movie>\n')
+ file.write('</freevo>\n')
+ file.close()
+ except IOError:
+ print "ERROR: Could not open %s"%(ofile)
+
+def checkForUpdates():
+ try:
+ file = open(config.RSS_FEEDS,"r")
+ for line in file:
+ if not re.search("^#",line):
+ (url,numberOfDays)=re.split(",", line)
+ sock = urllib.urlopen(url)
+ feedSource = sock.read()
+ sock.close()
+ for item in rssFeed.Feed(feedSource).items:
+ diff = datetime.date.today() - convertDate(item.date)
+ if int(diff.days)<=int(numberOfDays) and not
re.search("None",item.url):
+ if "audio" in item.type:
+ os.chdir(config.RSS_AUDIO)
+ else:
+ os.chdir(config.RSS_VIDEO)
+ filename=re.split("/",item.url).pop()
+ if (len(glob.glob(filename))==0) and not
checkForDup(item.url):
+ if re.search("torrent",item.url):
+ exitStatus=os.popen("bittorrent-console
%s"%(item.url)).close()
+ filename=re.sub("\.torrent","",filename)
+ else:
+ exitStatus=os.popen("wget %s" %(item.url)).close()
+ if not exitStatus:
+ createFxd(item,filename)
+ addFileToCache(item.url)
+ else:
+ os.popen("rm %s" %(filename))
+ except IOError:
+ print "ERROR: Could not open %s"%(config.RSS_FEEDS)
Added: branches/rel-1/freevo/src/helpers/rssServer.py
==============================================================================
--- (empty file)
+++ branches/rel-1/freevo/src/helpers/rssServer.py Wed Oct 18 22:53:58 2006
@@ -0,0 +1,8 @@
+import os,threading,time
+import rssPeriodic
+
+while True:
+ t = threading.Thread(rssPeriodic.checkForUpdates())
+ t.start()
+ t.join()
+ time.sleep(60)
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog