Mercurial > hg > horiscopes
changeset 15:50a95089414d
updating to allow for all aspects to be calculated, and remove default value passing for people.
author | DaveM |
---|---|
date | Sun, 04 Mar 2018 17:09:50 +0000 |
parents | a0c217ee4168 |
children | b11cff4b7f83 |
files | V4/dParse.py V4/runme.py V4/synastry.py timesheet.xlsx |
diffstat | 4 files changed, 85 insertions(+), 223 deletions(-) [+] |
line wrap: on
line diff
--- a/V4/dParse.py Sun Mar 04 15:03:15 2018 +0000 +++ b/V4/dParse.py Sun Mar 04 17:09:50 2018 +0000 @@ -8,19 +8,9 @@ import random import pdb -DEFAULT_TIME_H = 12 -DEFAULT_TIME_M = 00 -DEAULT_LOCATION = 'USA' - -# def parseCSV(filename): -# stream = csv.DictReader(open(filename,'rb')) -# dictList = [] -# people = [] -# for line in stream: -# people.append(syn.person(line)) -# return people -# # dictList.append(regulateData(line)) -# # return dictList +DEFAULT_TIME_H = None +DEFAULT_TIME_M = None +DEAULT_LOCATION = None def regulateData(dataDict): print("Parse %s"%(str(dataDict['ID']))) @@ -238,76 +228,4 @@ M = DEFAULT_TIME_M return (H,M) -def makePayload(dataDict): - if type(dataDict['COB']) is str: - cob_0 = float(dataDict['COB'].split(',')[0][1:]) - cob_1 = float(dataDict['COB'].split(',')[1]) - dataDict['COB'] = (cob_0,cob_1) - if type(dataDict['pCOB']) is str: - pcob_0 = float(dataDict['pCOB'].split(',')[0][1:]) - pcob_1 = float(dataDict['pCOB'].split(',')[1]) - dataDict['pCOB'] = (pcob_0,pcob_1) - if type(dataDict['DOB']) is str: - dataDict['DOB'] = dataDict['DOB'][1:-1].split(',') - if type(dataDict['pDOB']) is str: - dataDict['pDOB'] = dataDict['pDOB'][1:-1].split(',') - if type(dataDict['TOB']) is str: - dataDict['TOB'] = dataDict['TOB'][1:-1].split(',') - if type(dataDict['pTOB']) is str: - dataDict['pTOB'] = dataDict['pTOB'][1:-1].split(',') - # pdb.set_trace() - print dataDict['pDOB'] - - R = {'send_calculation':'1', #Req - 'muz_narozeni_den':dataDict['DOB'][0], - 'muz_narozeni_mesic':dataDict['DOB'][1], - 'muz_narozeni_rok':dataDict['DOB'][2], - 'muz_narozeni_hodina':dataDict['TOB'][0], - 'muz_narozeni_minuta':dataDict['TOB'][1], - 'muz_narozeni_city':'', - 'muz_narozeni_mesto_hidden':'Manually+place%3A+%C2%B0%27N%2C+%C2%B0%27E',#auto - 'muz_narozeni_stat_hidden':'XX', - 'muz_narozeni_podstat_kratky_hidden':'', - 'muz_narozeni_podstat_hidden':'', - 'muz_narozeni_podstat2_kratky_hidden':'', - 'muz_narozeni_podstat3_kratky_hidden':'', - 'muz_narozeni_input_hidden':'', - 'muz_narozeni_sirka_stupne':str(abs(dataDict['COB'][0])).split('.')[0], - 'muz_narozeni_sirka_minuty':str(float('0.'+str(dataDict['COB'][0]).split('.')[1])*60).split('.')[0], - 'muz_narozeni_sirka_smer': '1' if dataDict['COB'][0]<0 else '0', #address N Dir (0':'N',1':'S) - 'muz_narozeni_delka_stupne':str(abs(dataDict['COB'][1])).split('.')[0], #address E - Main - 'muz_narozeni_delka_minuty':str(float('0.'+str(dataDict['COB'][1]).split('.')[1])*60).split('.')[0], - 'muz_narozeni_delka_smer': '1' if dataDict['COB'][1]<0 else '0', #address E Dir (0':'E',1':'W) - 'muz_narozeni_timezone_form':'auto', - 'muz_narozeni_timezone_dst_form':'auto', - 'send_calculation':'1', - 'zena_narozeni_den':dataDict['pDOB'][0], - 'zena_narozeni_mesic':dataDict['pDOB'][1], - 'zena_narozeni_rok':dataDict['pDOB'][2], - 'zena_narozeni_hodina':dataDict['pTOB'][0], - 'zena_narozeni_minuta':dataDict['pTOB'][1], - 'zena_narozeni_city':'', - 'zena_narozeni_mesto_hidden':'Manually+place%3A+%C2%B0%27N%2C+%C2%B0%27E', - 'zena_narozeni_stat_hidden':'XX', - 'zena_narozeni_podstat_kratky_hidden':'', - 'zena_narozeni_podstat_hidden':'', - 'zena_narozeni_podstat2_kratky_hidden':'', - 'zena_narozeni_podstat3_kratky_hidden':'', - 'zena_narozeni_input_hidden':'', - 'zena_narozeni_sirka_stupne':str(abs(dataDict['pCOB'][0])).split('.')[0], - 'zena_narozeni_sirka_minuty':str(float('0.'+str(dataDict['pCOB'][0]).split('.')[1])*60).split('.')[0], - 'zena_narozeni_sirka_smer': '1' if dataDict['pCOB'][0]<0 else '0', - 'zena_narozeni_delka_stupne':str(abs(dataDict['pCOB'][1])).split('.')[0], - 'zena_narozeni_delka_minuty':str(float('0.'+str(dataDict['pCOB'][1]).split('.')[1])*60).split('.')[0], - 'zena_narozeni_delka_smer': '1' if dataDict['pCOB'][1]<0 else '0', - 'zena_narozeni_timezone_form':'auto', - 'zena_narozeni_timezone_dst_form':'auto', - 'switch_interpretations':'0', - 'house_system':'placidus', - 'uhel_orbis':'#tabs_redraw'} - return R - - - -
--- a/V4/runme.py Sun Mar 04 15:03:15 2018 +0000 +++ b/V4/runme.py Sun Mar 04 17:09:50 2018 +0000 @@ -1,29 +1,33 @@ #!/usr/bin/env python + + import dParse as dp -# import compatibility as comp import synastry as syn import requests -import re import time import csv -import random import pdb import os import pickle -from HTMLParser import HTMLParser -# from lxml import html +import sys from bs4 import BeautifulSoup def parsePage(resp): + gotLocation = 0 horiscope = syn.planetPositions() soup = BeautifulSoup(resp.content, 'lxml') tcCell = soup.find_all('div', attrs={'class':'right-sedy-banner-svetlejsi'}) for cell in tcCell: + if "Planets in partner's house" in cell.get_text(): + gotLocation = 1 divList = cell.find_all('div') for i in range(len(divList)): - planetName = divList[i].getText().lower() - if planetName in planetPositions.planetNames: - horiscope.planets[planetName].setLocation(divList[i+2].getText(),divList[i+4].getText()) + planetName = divList[i].getText().lower().strip().replace(':','').split(' ')[0] + if planetName in syn.planetPositions.planetNames: + if gotLocation and not '/' in planetName: + horiscope.planets[planetName].setHouse(divList[i+2].getText(),divList[i+4].getText()) + else: + horiscope.planets[planetName].setLocation(divList[i+2].getText(),divList[i+4].getText()) return horiscope def makePeople(filename): @@ -36,42 +40,11 @@ # pdb.set_trace() return people -# def setURL(p): -# url = 'https://horoscopes.astro-seek.com/calculate-love-compatibility/' -# payload = dp.makePayload(p) -# return (url,payload) - def requestURL(url,payload): r = requests.get(url, params=payload) time.sleep(5) return r -# def makeURLPayload(url,payload): -# url += '?' -# for p in payload: -# url += '&' + str(p) -# url += '=' + str(payload[p]) -# return url - -# def printToFile(filename,data,removeAdds): -# if removeAdds == True: -# del data['DOB'] -# del data['TOB'] -# del data['pDOB'] -# del data['pTOB'] -# del data['COB'] -# del data['pCOB'] -# del data['horiscope'] -# # keys = data[0].keys() -# keys = [] -# for d in data: -# keys = keys + d.keys() -# keys = sorted(uniqueList(keys)) -# with open(filename,'w') as stream: -# dict_writer = csv.DictWriter(stream, keys, extrasaction='ignore') -# dict_writer.writeheader() -# dict_writer.writerows(data) - def loadPick(filename): with open(filename, 'rb') as handle: b = pickle.load(handle) @@ -81,102 +54,38 @@ with open(filename, 'wb') as handle: pickle.dump(data,handle) -# def tempPF(fName,data): -# f__ = open(fName,'w') -# f__.write(data) -# f__.close() - def parseHoriscope(people,saveFile): horiscopeList = [] for person in people: - if person.p_dob is None or person.p_dob == '': - print 'SKIPPING person '+ person.id + ' p_dob is None' - # person.horiscope = None - # horiscopeList.append({'ID':person['ID']}) + issue = person.identifyIssues() + if issue is not None: + print 'SKIPPING person '+ person.id + ' error with ' + issue else: print 'parsing person '+ person.id - parseTries = 3 - while parseTries > 0: - try: - person.makePayload() - resp = requestURL(person.url,person.payload) - person.horiscope = parsePage(resp) - pdb.set_trace() - parseTries = 0 - except: - print sys.exc_info()[0] - parseTries -= 1 - # for d in person.horiscope.keys(): - # person[d] = person['horiscope'][d] - # horiscopeList.append(person) - # if saveFile is not None: - # savePick(saveFile,horiscopeList) - # return horiscopeList - # savePick(pickFile,person) - # savePick('2'+pickFile,horiscopeList) - # printToFile('final_'+outFile,horiscopeList) - -# def printDict(d): -# for d_ in d: -# print (d,d_) - -# def refactorHoriscope(hor): -# d = {} -# d['ID'] = hor['ID'] -# for h in hor['horiscope']: -# hs = sorted(h) -# d[(hs[0], hs[1], hor['horiscope'][h][0])] = 1 -# d[(hs[0], hs[1])] = float(str(hor['horiscope'][h][1]) + '.' + str(hor['horiscope'][h][2])) -# return d - -# def uniqueList(seq): -# # order preserving -# noDupes = [] -# [noDupes.append(i) for i in seq if not noDupes.count(i)] -# return noDupes - -# def merge_two_dicts(x, y): -# z = x.copy() # start with x's keys and values -# z.update(y) # modifies z with y's keys and values & returns None -# return z - -# def findMissing(unique,keyList): -# missing = [] -# for u in unique: -# if u not in keyList: -# missing.append(u) -# return u - -# def presentResults(saveFile): -# data = [] -# data2 = [] -# hlist = loadPick(saveFile) -# keyList = [] -# for h in hlist: -# d = refactorHoriscope(h) -# keyList.append(d.keys()) -# data.append(d) -# uniqueKeys = uniqueList(keyList) -# # for da in data: -# # missingKeys = findMissing(uniqueKeys,da.keys()) -# # # pdb.set_trace() -# # d2 = dict(zip(missingKeys,[0]*len(missingKeys))) -# # da = merge_two_dicts(da,d2) -# # data2.append(da) -# return data - - -def newTest(): - people = makePeople('individuals.csv') - + person.makePayload() + person.resp = requestURL(person.url,person.payload) + person.horiscope = parsePage(person.resp) + # person.horiscope.printPositions() + if saveFile is not None: + savePick(saveFile,people) def testMain(): - pickFile = 'outData.pick' - # people = makePeople('individuals.csv') - # savePick(pickFile,people) - people = loadPick(pickFile) - parseSaveFile = pickFile.split('.')[0]+'_collect.pick' - parseHoriscope(people,parseSaveFile) + restartDataFile = 1 + if(restartDataFile): + pickFile = 'outData.pick' + # people = makePeople('individuals.csv') + # savePick(pickFile,people) + people = loadPick(pickFile) + parseSaveFile = pickFile.split('.')[0]+'_collect.pick' + parseHoriscope(people,parseSaveFile) + else: + people = loadPick('onlineDatacollect.pick') + for p in people: + if p.horiscope is None: + print p.id + else: + p.horiscope.calcAllAspects() + # horiscopeData = presentResults(parseSaveFile) # comRules = comp.parseCompatDef('compatibilityRules.csv') # applyCompatScore(horiscopeData,rules)
--- a/V4/synastry.py Sun Mar 04 15:03:15 2018 +0000 +++ b/V4/synastry.py Sun Mar 04 17:09:50 2018 +0000 @@ -13,6 +13,24 @@ self.p_cob = personDict['pCOB'] self.horiscope = None + def identifyIssues(self): + if self.id is None: + return 'id' + elif self.dob is None: + return 'dob' + elif self.tob is None: + return 'tob' + elif self.cob is None: + return 'cob' + elif self.p_dob is None: + return 'p_dob' + elif self.p_tob is None: + return 'p_tob' + elif self.p_cob is None: + return 'p_cob' + else: + return None + def makePayload(self): if type(self.cob) is str: cob_0 = float(self.cob.split(',')[0][1:]) @@ -81,19 +99,27 @@ 'switch_interpretations':'0', 'house_system':'placidus', 'uhel_orbis':'#tabs_redraw'} - # return R class planetRelation: + noHouseList = ['asc','ic','dsc','mc','asc/mc','sun/moon'] def __init__(self,planetName): self.name = planetName self.angleA = None self.angleB = None + if planetName not in planetRelation.noHouseList: + self.houseA = None + self.houseB = None def setLocation(self,A,B): - self.angleA = '.'.join(A.encode('ascii','replace').split('?'))[:-1] - self.angleB = '.'.join(B.encode('ascii','replace').split('?'))[:-1] + self.angleA = float('.'.join(A.encode('ascii','replace').split('?'))[:-1]) + self.angleB = float('.'.join(B.encode('ascii','replace').split('?'))[:-1]) + # print self.angleA,self.angleB + def setHouse(self,A,B): + self.houseA = int(A.encode('ascii','ignore')) + self.houseB = int(B.encode('ascii','ignore')) + # print self.houseA,self.houseB def test_random(self): self.angleA = random.random()*360 @@ -101,12 +127,12 @@ class planetPositions: - aspectDict = {'conjunct':0,'semi-square':45,'sextile':60,'square':90,'trine':120,'opposite':180} - planetNames = ['sun','moon','mercury','venus','mars','jupiter','saturn','uranus','neptune','pluto','node','lilith','chiron','asc','ic','dsc','mc','asc_mc','sun_moon'] + aspectDict = {'conjunction':0,'semi-square':45,'sextile':60,'square':90,'trine':120,'opposite':180} + planetNames = ['sun','moon','mercury','venus','mars','jupiter','saturn','uranus','neptune','pluto','node','lilith','chiron','asc','ic','dsc','mc','asc/mc','sun/moon'] def __init__(self): self.planets = {} - for i in range(len(planetPositions.planetNames)): - self.planets[planetPositions.planetNames[i]] = planetRelation(planetPositions.planetNames[i]) + for p in planetPositions.planetNames: + self.planets[p] = planetRelation(p) self.aspect = {} def test_random(self): @@ -122,13 +148,22 @@ for aspect in planetPositions.aspectDict: if self.angleRange[0] < planetPositions.aspectDict[aspect] and self.angleRange[1] > planetPositions.aspectDict[aspect]: self.aspect[componentA,componentB] = aspect - return aspect + self.aspectDiff = abs(self.angle - planetPositions.aspectDict[aspect]) + return self.aspect,self.aspectDiff + def calcAllAspects(self): + for p1 in planetPositions.planetNames: + for p2 in planetPositions.planetNames: + self.calcAspect(p1,p2) + def printPositions(self): + for p in planetPositions.planetNames: + if p in planetRelation.noHouseList: + print p,self.planets[p].angleA,self.planets[p].angleB + else: + print p,self.planets[p].angleA,self.planets[p].angleB,self.planets[p].houseA,self.planets[p].houseB - -