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('&lt.*?&gt;','',string)
+            string = re.sub('&amp;','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

Reply via email to