#!/usr/bin/python from xml.dom import minidom import urllib import psycopg import sys import time dbcon=psycopg.connect("host=%s dbname=%s user=%s" %("localhost","realtimedata","postgres")) dbcur=dbcon.cursor() sock=urllib.urlopen("http://earthquake.usgs.gov/recenteqsww/catalogs/eqs1day-M2.5.xml") xml_source=sock.read() xml_file=file("/var/scripts/rss.xml").read() if xml_source==xml_file: print "No data fetched" sys.exit() else: xml_file=open("/var/scripts/rss.xml","w") xml_file.write(xml_source) xml_file.close() sql="DELETE FROM earthquakes" dbcur.execute(sql.encode('utf-8')) dbcon.commit() xmldoc=minidom.parseString(xml_source) sock.close #print xmldoc.toxml() titlelist = xmldoc.getElementsByTagName('title') desclist = xmldoc.getElementsByTagName('description') linklist = xmldoc.getElementsByTagName('link') lonlist = xmldoc.getElementsByTagName('geo:long') latlist = xmldoc.getElementsByTagName('geo:lat') sublist = xmldoc.getElementsByTagName('dc:subject') count=0 count_step_3=0 first=1 for x in titlelist: if first==0: # Skip the first item title = x.firstChild.data desc = desclist[count].firstChild.data link = linklist[count].firstChild.data long = lonlist[count].firstChild.data lat = latlist[count].firstChild.data magnitude = sublist[count_step_3].firstChild.data depth = sublist[count_step_3+2].firstChild.data count=count+1 count_step_3=count_step_3+3 sql="INSERT INTO earthquakes (title,_desc,link,magnitude,depth,the_geom) values('%s','%s','%s',%s,'%s',GeometryFromText('POINT(%s %s)',4326))" %(title,desc,link,magnitude,depth,long,lat) #print sql.encode('utf-8') dbcur.execute(sql.encode('utf-8')) dbcon.commit() first=0 # Set the first-iteration flag to false print "New data fetched @ %s" % time.ctime()