def bsd_Send_To_Senate(csvfile='demo-dataz.csv', statfile='bsd_Send_To_Senate.log'): ''' Parse from the blue-state-digital csv file ''' import csv from ZipLookup import ZipLookup reader = csv.reader(open(csvfile, 'r'), delimiter=',', quotechar='\"') for row in reader: name='unknown' state='unknown' try: (date, email, name, addr1, addr2, zip5, city, message, source, subsource, ip) = row print zip5 z = ZipLookup() state = z.getState(zip5) print "found state: ", state i = prepare_i(state+"_" + "01") #hack, need dist for prepare_i if email: i.email=email if name: names = name.split() i.fname = names[0] i.lname = names[-1] i.id = name if addr1: i.addr1 = addr1 i.addr2 = addr2 if zip5: i.zip5 = zip5 i.zip4 = '0001' if city: i.city = city if message: i.full_msg = message (q, status) = contact_state(i) except Exception, e: status='failed: ' + e.__str__() file(statfile, 'a').write('%s, %s, "%s"\n' % (name, state, status))
def csv_Send_To_House(csvfile='demo-dataz.csv', messagefile="noCispaMessage.txt", statfile='csv_Send_To_Senate.log', dryrun=False): ''' Parse from the csv file ''' import csv from ZipLookup import ZipLookup from GenderLookup import GenderLookup writeYourRep = WriteYourRep() reader = csv.reader(open(csvfile, 'rb')) genderassigner = GenderLookup() (subject, message) = parseMessageFile(messagefile) zipLookup = ZipLookup() for row in reader: state='unknown' status = "" try: #First_Name,Email,Street,Zip (first_name, email, addr1, zip5) = row last_name = "" addr2="" zip4 = None (first_name, last_name) = cleanName(first_name, last_name) if zip5.find('-')>0: zip4 = zip5.split('-')[1] zip5 = zip5.split('-')[0] (first_name, last_name) = cleanName(first_name, last_name) zip5=zip5.zfill(5) (city, state) = zipLookup.getCityAndState(zip5) #print "found city and state: %s, %s" % (city, state) i = writeYourRep.prepare_i(state+"_" + "XX") #hack, need dist for prepare_i if email: #print email i.email=email if first_name: # this code below was used when a single name field was given # and not separate first and last name fields #names = name.split() #i.fname = "".join(iter(names[0:len(names)-1])) #i.lname = names[-1] i.fname = first_name i.lname = last_name i.prefix = genderassigner.getPrefix(i.fname) i.id = "%s %s" % (first_name, last_name) if addr1: i.addr1 = addr1 i.addr2 = addr2 if zip5: i.zip5 = zip5 i.zip4 = '0001' if zip4: i.zip4 = zip4 if city: i.city = city if message: i.full_msg = message if subject: i.subject = subject if dryrun: print "getting link for i:", i.addr1, i.addr2 contactLink=writeYourRep.getWyrContactLink(i) status += contactLink + " " + ": Not attempted with "+ i.__str__()+"\n" else: q = writeYourRep.writerep(i) status += writeYourRep.getStatus(q) +", " except Exception, e: import traceback; traceback.print_exc() status=status + ' failed: ' + e.__str__() file(statfile, 'a').write('%s %s, %s, "%s"\n' % (first_name, last_name, state, status))
def csv_To_Data(row, writeYourRep, genderassigner, defaultSubject, defaultMessage): #(email,name,addr1,message,subject,zip5,org) = row print "Row", row if "name" in row: first_name = row["name"] last_name = "" else: first_name = row["first_name"] last_name = row["last_name"] email = row["email"] addr1 = "" addr2 = "" if "address" in row: addr1 = row["address"] elif "addr" in row: addr1 = row["addr"] elif "addr1" in row: addr1 = row["addr1"] if addr2 in row: addr2 = row["addr2"] message = defaultMessage subject = defaultSubject if "message" in row: message = row["message"] if "subject" in row: subject = row["subject"] zip5 = "" zip4 = "" if "zip" in row: zip5 = row["zip"] elif "zip5" in row: zip5 = row["zip5"] if "zip4" in row: zip4 = row["zip4"] (first_name, last_name) = cleanName(first_name, last_name) if zip5.find('-') > 0: zip4 = zip5.split('-')[1] zip5 = zip5.split('-')[0] zip5 = zip5.zfill(5) zipLookup = ZipLookup() try: (city, state) = zipLookup.getCityAndState(zip5) except: if "city" in row: city = row["city"] else: city = "not specified" if "state" in row: state = row["state"] else: state = "not specified" if DEBUG: print "found city and state for zip: %s, %s, %s" % (city, state, zip5) i = writeYourRep.prepare_i(state + "_" + "XX") #hack, need dist for prepare_i if email: i.email = email if first_name: i.fname = first_name i.lname = last_name i.prefix = genderassigner.getPrefix(i.fname) i.id = "%s %s" % (first_name, last_name) if addr1: i.addr1 = addr1 i.addr2 = addr2 if zip5: i.zip5 = zip5 i.zip4 = '0001' if zip4: i.zip4 = zip4 if city: i.city = city if message: i.full_msg = message if subject: i.subject = subject if DEBUG: print "Filled in: ", i return i
def csv_Send_To_Senate(csvfile='demo-dataz.csv', messagefile="noCispaMessage.txt", statfile='csv_Send_To_Senate.log', dryrun=False, onesenator=None): ''' Parse from the csv file Problem forms: www.vitter.senate.gov Problem with link to contact page on senators website www.mccain.senate.gov unknown url type, need to look into this one further levin.senate.gov urllib2.URLError: <urlopen error [Errno 61] Connection refused> www.lieberman.senate.gov Unclear whether it worked or not. franken.senate.gov Unclear whether it worked or not. www.toomey.senate.gov CAPTCHA www.sessions.senate.gov CAPTCHA www.shelby.senate.gov CAPTCHA www.coburn.senate.gov CAPTCHA www.crapo.senate.gov CAPTCHA www.moran.senate.gov CAPTCHA www.roberts.senate.gov CAPTCHA www.paul.senate.gov CAPTCHA ''' import csv from ZipLookup import ZipLookup from GenderLookup import GenderLookup writeYourRep = WriteYourRep() reader = csv.DictReader(open(csvfile, 'rb')) genderassigner = GenderLookup() (subject, message) = parseMessageFile(messagefile) zipLookup = ZipLookup() for row in reader: state = 'unknown' status = "" try: i = csv_To_Data(row, writeYourRep, genderassigner, subject, message) sens = writeYourRep.getSenators(i.state) for sen in sens: if onesenator != None and onesenator not in sen: status += "%s: not attempted, " % (sen) continue print "Writing to senator %s" % sen senname = web.lstrips( web.lstrips(web.lstrips(sen, 'http://'), 'https://'), 'www.').split('.')[0] captchaforms = [ 'toomey', 'sessions', 'shelby', 'coburn', 'crapo', 'roberts', 'paul' ] if senname in captchaforms: status += senname + " has captcha. skipping. " elif dryrun: status += sen + " " + senname + ": Not attempted with " + i.__str__( ) + "\n" else: status += senname + ": " q = writeYourRep.writerep_general(sen, i) status += writeYourRep.getStatus(q) + ", " except Exception, e: import traceback traceback.print_exc() status = status + ' failed: ' + e.__str__() file(statfile, 'a').write('%s %s, %s, "%s"\n' % (i.fname, i.lname, i.state, status))
def csv_Send_To_Senate(csvfile='demo-dataz.csv', messagefile="noCispaMessage.txt", statfile='csv_Send_To_Senate.log', dryrun=False): ''' Parse from the csv file Problem forms: www.vitter.senate.gov Problem with link to contact page on senators website www.mccain.senate.gov unknown url type, need to look into this one further levin.senate.gov urllib2.URLError: <urlopen error [Errno 61] Connection refused> www.lieberman.senate.gov Unclear whether it worked or not. franken.senate.gov Unclear whether it worked or not. www.toomey.senate.gov CAPTCHA www.sessions.senate.gov CAPTCHA www.shelby.senate.gov CAPTCHA www.coburn.senate.gov CAPTCHA www.crapo.senate.gov CAPTCHA www.moran.senate.gov CAPTCHA www.roberts.senate.gov CAPTCHA www.paul.senate.gov CAPTCHA ''' import csv from ZipLookup import ZipLookup from GenderLookup import GenderLookup writeYourRep = WriteYourRep() reader = csv.reader(open(csvfile, 'rb')) genderassigner = GenderLookup() (subject, message) = parseMessageFile(messagefile) zipLookup = ZipLookup() for row in reader: state='unknown' status = "" try: #print len(row) #first_name = '' #last_name = '' #(id, first_name, last_name, email, addr1, zip5) = row (first_name,last_name,email,addr1,addr2,city,state,region,zip5,country) = row (first_name, last_name) = cleanName(first_name, last_name) if zip5.find('-')>0: zip4 = zip5.split('-')[1] zip5 = zip5.split('-')[0] (first_name, last_name) = cleanName(first_name, last_name) addr2="" zip5=zip5.zfill(5) (city, state) = zipLookup.getCityAndState(zip5) print "found city and state: %s, %s" % (city, state) i = writeYourRep.prepare_i(state+"_" + "01") #hack, need dist for prepare_i if email: print email i.email=email if first_name: # this code below was used when a single name field was given # and not separate first and last name fields #names = name.split() #i.fname = "".join(iter(names[0:len(names)-1])) #i.lname = names[-1] i.fname = first_name i.lname = last_name i.prefix = genderassigner.getPrefix(i.fname) i.id = "%s %s" % (first_name, last_name) if addr1: i.addr1 = addr1 i.addr2 = addr2 if zip5: i.zip5 = zip5 i.zip4 = '0001' if zip4: i.zip4 = zip4 if city: i.city = city if message: i.full_msg = message if subject: i.subject = subject sens = writeYourRep.getSenators(state) for sen in sens: senname = web.lstrips(web.lstrips(web.lstrips(sen, 'http://'), 'https://'), 'www.').split('.')[0] customizedmessage=message.replace('[[NAME]]', "%s %s" % (first_name, last_name)).replace('[[CITY]]', city).replace('[[STATE]]', state).replace('[[SENATOR]]', senname.title()) i.full_msg = customizedmessage captchaforms=['toomey','sessions','shelby','coburn','crapo','moran','roberts','paul'] if senname in captchaforms: status += senname + " has captcha. skipping. " elif dryrun: status += sen + " " + senname + ": Not attempted with "+ i.__str__()+"\n" else: status += senname + ": " q = writeYourRep.writerep_general(sen, i) status += writeYourRep.getStatus(q) +", " except Exception, e: import traceback; traceback.print_exc() status=status + ' failed: ' + e.__str__() file(statfile, 'a').write('%s %s, %s, "%s"\n' % (first_name, last_name, state, status))
def csv_To_Data(row, writeYourRep, genderassigner, defaultSubject, defaultMessage): #(email,name,addr1,message,subject,zip5,org) = row print "Row", row if "name" in row: first_name=row["name"] last_name="" else: first_name=row["first_name"] last_name=row["last_name"] email=row["email"] addr1="" addr2="" if "address" in row: addr1 = row["address"] elif "addr" in row: addr1 = row["addr"] elif "addr1" in row: addr1=row["addr1"] if addr2 in row: addr2=row["addr2"] message=defaultMessage subject=defaultSubject if "message" in row: message=row["message"] if "subject" in row: subject=row["subject"] zip5="" zip4="" if "zip" in row: zip5=row["zip"] elif "zip5" in row: zip5=row["zip5"] if "zip4" in row: zip4=row["zip4"] (first_name, last_name) = cleanName(first_name, last_name) if zip5.find('-')>0: zip4 = zip5.split('-')[1] zip5 = zip5.split('-')[0] zip5=zip5.zfill(5) zipLookup = ZipLookup() try: (city, state) = zipLookup.getCityAndState(zip5) except: if "city" in row: city=row["city"] else: city="not specified" if "state" in row: state=row["state"] else: state="not specified" if DEBUG: print "found city and state for zip: %s, %s, %s" % (city, state, zip5) i = writeYourRep.prepare_i(state+"_" + "XX") #hack, need dist for prepare_i if email: i.email=email if first_name: i.fname = first_name i.lname = last_name i.prefix = genderassigner.getPrefix(i.fname) i.id = "%s %s" % (first_name, last_name) if addr1: i.addr1 = addr1 i.addr2 = addr2 if zip5: i.zip5 = zip5 i.zip4 = '0001' if zip4: i.zip4 = zip4 if city: i.city = city if message: i.full_msg = message if subject: i.subject = subject if DEBUG: print "Filled in: ", i return i