annotate V4/runme.py @ 16:b11cff4b7f83

implement compatibility scores
author DaveM
date Mon, 05 Mar 2018 14:22:09 +0000
parents 50a95089414d
children ae220e89cb3a
rev   line source
DaveM@13 1 #!/usr/bin/env python
DaveM@15 2
DaveM@15 3
DaveM@13 4 import dParse as dp
DaveM@13 5 import synastry as syn
DaveM@13 6 import requests
DaveM@13 7 import time
DaveM@13 8 import csv
DaveM@13 9 import pdb
DaveM@13 10 import os
DaveM@13 11 import pickle
DaveM@15 12 import sys
DaveM@13 13 from bs4 import BeautifulSoup
DaveM@13 14
DaveM@14 15 def parsePage(resp):
DaveM@15 16 gotLocation = 0
DaveM@13 17 horiscope = syn.planetPositions()
DaveM@13 18 soup = BeautifulSoup(resp.content, 'lxml')
DaveM@13 19 tcCell = soup.find_all('div', attrs={'class':'right-sedy-banner-svetlejsi'})
DaveM@13 20 for cell in tcCell:
DaveM@15 21 if "Planets in partner's house" in cell.get_text():
DaveM@15 22 gotLocation = 1
DaveM@13 23 divList = cell.find_all('div')
DaveM@13 24 for i in range(len(divList)):
DaveM@15 25 planetName = divList[i].getText().lower().strip().replace(':','').split(' ')[0]
DaveM@15 26 if planetName in syn.planetPositions.planetNames:
DaveM@15 27 if gotLocation and not '/' in planetName:
DaveM@15 28 horiscope.planets[planetName].setHouse(divList[i+2].getText(),divList[i+4].getText())
DaveM@15 29 else:
DaveM@15 30 horiscope.planets[planetName].setLocation(divList[i+2].getText(),divList[i+4].getText())
DaveM@14 31 return horiscope
DaveM@13 32
DaveM@13 33 def makePeople(filename):
DaveM@13 34 stream = csv.DictReader(open(filename,'rb'))
DaveM@13 35 dictList = []
DaveM@13 36 people = []
DaveM@13 37 for line in stream:
DaveM@13 38 thisPerson = syn.Person(dp.regulateData(line))
DaveM@13 39 people.append(thisPerson)
DaveM@13 40 # pdb.set_trace()
DaveM@13 41 return people
DaveM@13 42
DaveM@13 43 def requestURL(url,payload):
DaveM@13 44 r = requests.get(url, params=payload)
DaveM@13 45 time.sleep(5)
DaveM@13 46 return r
DaveM@13 47
DaveM@13 48 def loadPick(filename):
DaveM@13 49 with open(filename, 'rb') as handle:
DaveM@13 50 b = pickle.load(handle)
DaveM@13 51 return b
DaveM@13 52
DaveM@13 53 def savePick(filename,data):
DaveM@13 54 with open(filename, 'wb') as handle:
DaveM@13 55 pickle.dump(data,handle)
DaveM@13 56
DaveM@13 57 def parseHoriscope(people,saveFile):
DaveM@13 58 for person in people:
DaveM@15 59 issue = person.identifyIssues()
DaveM@15 60 if issue is not None:
DaveM@15 61 print 'SKIPPING person '+ person.id + ' error with ' + issue
DaveM@13 62 else:
DaveM@13 63 print 'parsing person '+ person.id
DaveM@15 64 person.makePayload()
DaveM@15 65 person.resp = requestURL(person.url,person.payload)
DaveM@15 66 person.horiscope = parsePage(person.resp)
DaveM@15 67 # person.horiscope.printPositions()
DaveM@15 68 if saveFile is not None:
DaveM@15 69 savePick(saveFile,people)
DaveM@13 70
DaveM@16 71 # def testMain():
DaveM@16 72 # pickFile = 'outData.pick'
DaveM@16 73 # restartDataFile = 0
DaveM@16 74 # if(restartDataFile):
DaveM@16 75 # # people = makePeople('individuals.csv')
DaveM@16 76 # # savePick(pickFile,people)
DaveM@16 77 # people = loadPick(pickFile)
DaveM@16 78 # parseSaveFile = pickFile.split('.')[0]+'_collect.pick'
DaveM@16 79 # parseHoriscope(people,parseSaveFile)
DaveM@16 80 # else:
DaveM@16 81 # people = loadPick('outData_collect.pick')
DaveM@16 82 # comp = syn.compatibility()
DaveM@16 83 # comp.parseCompatRules('compatibilityRules.csv')
DaveM@16 84 # for person in people:
DaveM@16 85 # if person.issue is None:
DaveM@16 86 # person.score = comp.calcCompatibility(person.horiscope)
DaveM@16 87 # if person.score is None:
DaveM@16 88 # person.issue = 'None Planet Locations'
DaveM@16 89 # else:
DaveM@16 90 # print person.id,person.score
DaveM@16 91 # pdb.set_trace()
DaveM@13 92
DaveM@13 93 def _main():
DaveM@13 94 pickFile = 'outData.pick'
DaveM@13 95 if not os.path.exists(pickFile):
DaveM@13 96 people = makePeople('individuals.csv')
DaveM@13 97 savePick(pickFile,people)
DaveM@13 98 else:
DaveM@13 99 people = loadPick(pickFile)
DaveM@13 100 parseSaveFile = pickFile.split('.')[0]+'_collect.pick'
DaveM@16 101 if not os.path.exists(parseSaveFile):
DaveM@16 102 parseHoriscope(people,parseSaveFile)
DaveM@16 103 else:
DaveM@16 104 people = loadPick(parseSaveFile)
DaveM@16 105 comp = syn.compatibility()
DaveM@16 106 comp.parseCompatRules('compatibilityRules.csv')
DaveM@16 107 for person in people:
DaveM@16 108 person.score = None
DaveM@16 109 if person.issue is None:
DaveM@16 110 person.score = comp.calcCompatibility(person.horiscope)
DaveM@16 111 if person.score is None:
DaveM@16 112 person.issue = 'None Planet Locations'
DaveM@16 113 savePick('fullResults.pick',people)
DaveM@13 114
DaveM@13 115 if __name__ == "__main__":
DaveM@16 116 _main()