summaryrefslogtreecommitdiffstats
path: root/feed/sse-fm
diff options
context:
space:
mode:
Diffstat (limited to 'feed/sse-fm')
-rwxr-xr-xfeed/sse-fm133
1 files changed, 133 insertions, 0 deletions
diff --git a/feed/sse-fm b/feed/sse-fm
new file mode 100755
index 0000000..f9fae44
--- /dev/null
+++ b/feed/sse-fm
@@ -0,0 +1,133 @@
+#!/usr/bin/python
+
+import sys, urllib2, os, socket
+from xml.sax import ContentHandler, make_parser
+
+HOME = os.environ["HOME"]
+SSE_TAR = HOME + "/bin/sse-tar"
+
+def process_tar(project, tar):
+ print "New tar %s" % tar
+
+ ret = os.system("%s '%s' '%s' '%s'" % (SSE_TAR, tar, project["name"], project["project-url"]))
+
+ if ret != 0:
+ print "WARNING: Process returned %i" % ret
+
+def process_project(project):
+
+ archive_url = None
+
+ for a in ("archive-tgz-url", "archive-bz2-url", "archive-zip-url"):
+
+ if project.has_key(a) and project[a] != "":
+ archive_url = project[a]
+ break
+
+ if archive_url is None:
+ print "WARNING: Ignoring project '%s' without archive URL!" % project["name"]
+ return
+
+ fn = "%s/download/freshmeat-%i" % (HOME, int(project["id"]))
+
+ download = False
+
+ try:
+ f = open(fn+".release", "r")
+ except:
+ download = True
+ else:
+ download = f.read() != project["date"].strip()
+
+ if not download:
+ print "File %s up-to-date." % archive_url
+ else:
+
+ print "Downloading %s..." % archive_url
+
+ try:
+ dst = file(fn, "w")
+ src = urllib2.urlopen(archive_url)
+
+ while True:
+ data = src.read(1024)
+
+ if len(data) <= 0:
+ break
+
+ dst.write(data)
+
+ del dst
+ del src
+
+ except IOError, e:
+ os.unlink(fn)
+ print "WARNING: Failed to download %s!" % archive_url
+ return
+
+ try:
+ f = open(fn+".release", "w")
+ except:
+ os.unlink(fn)
+
+ f.write(project["date"].strip())
+ del f
+
+ process_tar(project, fn)
+
+class docHandler(ContentHandler):
+
+ project_data = {}
+ field = None
+
+ def startElement(self, name, attrs):
+ if name == "project":
+ self.project_data = {}
+ self.field = None
+ elif name == "project_id":
+ self.field = "id"
+ elif name == "projectname_full":
+ self.field = "name"
+ elif name == "url_project_page":
+ self.field = "project-url"
+ elif name == "url_tgz":
+ self.field = "archive-tgz-url"
+ elif name == "url_bz2":
+ self.field = "archive-bz2-url"
+ elif name == "url_zip":
+ self.field = "archive-zip-url"
+ elif name == "license":
+ self.field = "license"
+ elif name == "latest_release_date":
+ self.field = "date"
+ else:
+ self.field = None
+
+ def characters(self, data):
+
+ if not self.field is None:
+ if self.project_data.has_key(self.field):
+ self.project_data[self.field] += data
+ else:
+ self.project_data[self.field] = data
+
+ def endElement(self, name):
+ if name == "project":
+ process_project(self.project_data)
+ self.project_data = None
+
+ self.field = None
+
+try:
+ os.mkdir("%s/download" % HOME)
+except:
+ pass
+
+socket.setdefaulttimeout(20)
+
+dh = docHandler()
+
+parser = make_parser()
+
+parser.setContentHandler(dh)
+parser.parse(sys.stdin)