DaveM@23
|
1 #!/usr/bin/env python
|
DaveM@23
|
2
|
DaveM@23
|
3
|
DaveM@23
|
4 import dParse as dp
|
DaveM@23
|
5 import synastry as syn
|
DaveM@23
|
6 # import requests
|
DaveM@29
|
7 import localRequests as lr
|
DaveM@23
|
8 import csv
|
DaveM@23
|
9 import pdb
|
DaveM@23
|
10 import os
|
DaveM@23
|
11 import pickle
|
DaveM@23
|
12 import sys
|
DaveM@23
|
13 from bs4 import BeautifulSoup
|
DaveM@23
|
14
|
DaveM@23
|
15 def makePeople(filename):
|
DaveM@23
|
16 stream = csv.DictReader(open(filename,'rb'))
|
DaveM@23
|
17 dictList = []
|
DaveM@23
|
18 people = []
|
DaveM@23
|
19 for line in stream:
|
DaveM@23
|
20 thisPerson = syn.Person(dp.regulateData(line))
|
DaveM@23
|
21 people.append(thisPerson)
|
DaveM@23
|
22 # pdb.set_trace()
|
DaveM@23
|
23 return people
|
DaveM@23
|
24
|
DaveM@23
|
25 def uniquify(itemList):
|
DaveM@23
|
26 keyDict = {}
|
DaveM@23
|
27 for item in itemList:
|
DaveM@23
|
28 keyDict[item] = 1
|
DaveM@23
|
29 return sorted(keyDict.keys())
|
DaveM@23
|
30
|
DaveM@23
|
31 def outputPeople(filename,people):
|
DaveM@23
|
32 with open(filename, "wb") as csv_file:
|
DaveM@23
|
33 dictKeys = []
|
DaveM@23
|
34 for person in people:
|
DaveM@23
|
35 if person.issue is None:
|
DaveM@23
|
36 person.horiscope.makeAllAspectTreple()
|
DaveM@23
|
37 dictKeys += person.horiscope.aspectTreple.keys()
|
DaveM@23
|
38 dictKeys = uniquify(dictKeys)
|
DaveM@23
|
39 writer = csv.DictWriter(csv_file, ['id','score']+dictKeys)
|
DaveM@23
|
40 writer.writeheader()
|
DaveM@23
|
41 for person in people:
|
DaveM@23
|
42 if person.issue is None:
|
DaveM@23
|
43 tempDict = {'id':person.id,'score':person.score}
|
DaveM@23
|
44 tempDict.update(person.horiscope.aspectTreple)
|
DaveM@23
|
45 # pdb.set_trace()
|
DaveM@23
|
46 writer.writerow(tempDict)
|
DaveM@23
|
47
|
DaveM@23
|
48 def outputScores(filename,people):
|
DaveM@23
|
49 with open(filename, "wb") as csv_file:
|
DaveM@23
|
50 csv_file.write('Person ID, Score \n')
|
DaveM@23
|
51 for person in people:
|
DaveM@23
|
52 if person.issue is None:
|
DaveM@23
|
53 csv_file.write(str(person.id)+','+str(person.score)+'\n')
|
DaveM@23
|
54 else:
|
DaveM@23
|
55 csv_file.write(str(person.id)+','+str(person.issue)+'\n')
|
DaveM@23
|
56
|
DaveM@29
|
57 def outputDescriptions(filename,people):
|
DaveM@29
|
58 with open(filename, "wb") as csv_file:
|
DaveM@29
|
59 for person in people:
|
DaveM@29
|
60 if person.issue is None:
|
DaveM@31
|
61 csv_file.write(str(person.id)+', '+str(person.score)+'\n'+''.join(person.description)+'\n\n')
|
DaveM@29
|
62 else:
|
DaveM@31
|
63 csv_file.write(str(person.id)+', '+str(person.issue)+'\n\n')
|
DaveM@29
|
64
|
DaveM@23
|
65 def outputIssues(filename,people):
|
DaveM@23
|
66 with open(filename, "wb") as csv_file:
|
DaveM@23
|
67 csv_file.write('Person ID, Issue \n')
|
DaveM@23
|
68 for person in people:
|
DaveM@23
|
69 if person.issue is not None:
|
DaveM@23
|
70 csv_file.write(str(person.id)+','+str(person.issue)+'\n')
|
DaveM@23
|
71
|
DaveM@23
|
72 # def requestURL(url,payload):
|
DaveM@23
|
73 # r = requests.get(url, params=payload)
|
DaveM@23
|
74 # time.sleep(5)
|
DaveM@23
|
75 # return r
|
DaveM@23
|
76
|
DaveM@23
|
77 # def loadPickUpdate(filename):
|
DaveM@23
|
78
|
DaveM@23
|
79 def loadPick(filename):
|
DaveM@23
|
80 with open(filename, 'rb') as handle:
|
DaveM@23
|
81 b = pickle.load(handle)
|
DaveM@23
|
82 return b
|
DaveM@23
|
83
|
DaveM@23
|
84 def savePick(filename,data):
|
DaveM@23
|
85 with open(filename, 'wb') as handle:
|
DaveM@23
|
86 pickle.dump(data,handle)
|
DaveM@23
|
87
|
DaveM@23
|
88 def parseHoriscope(people,saveFile):
|
DaveM@23
|
89 rawData = {}
|
DaveM@23
|
90 for person in people:
|
DaveM@23
|
91 issue = person.identifyIssues()
|
DaveM@23
|
92 if issue is not None:
|
DaveM@23
|
93 print 'SKIPPING person '+ person.id + ' error with ' + issue
|
DaveM@23
|
94 else:
|
DaveM@24
|
95 # print 'parsing person '+ person.id
|
DaveM@23
|
96 if person.resp is None:
|
DaveM@23
|
97 print 'Posting Request for person '+ person.id
|
DaveM@23
|
98 person.makePayload()
|
DaveM@23
|
99 rawData[person.id] = person.requestURL()
|
DaveM@29
|
100
|
DaveM@24
|
101 # print 'parsing person '+ person.id
|
DaveM@29
|
102 if person.resp is None:
|
DaveM@29
|
103 print 'SKIPPING person '+ person.id + ' error with unknown error'
|
DaveM@29
|
104 else:
|
DaveM@29
|
105 person.horiscope = person.parsePage()
|
DaveM@23
|
106 # person.horiscope.printPositions()
|
DaveM@23
|
107 if saveFile is not None:
|
DaveM@28
|
108 # savePick('raw_'+saveFile,rawData)
|
DaveM@23
|
109 savePick(saveFile,people)
|
DaveM@23
|
110
|
DaveM@23
|
111 def parseHoriscopeRaw(people,saveFile):
|
DaveM@23
|
112 rawData = loadPick('raw_'+saveFile)
|
DaveM@23
|
113 for person in people:
|
DaveM@23
|
114 issue = person.identifyIssues()
|
DaveM@23
|
115 if issue is not None:
|
DaveM@23
|
116 print 'SKIPPING person '+ person.id + ' error with ' + issue
|
DaveM@23
|
117 else:
|
DaveM@24
|
118 # print 'parsing person '+ person.id
|
DaveM@23
|
119 if person.resp is None:
|
DaveM@24
|
120 print 'Reading Request for person '+ person.id
|
DaveM@23
|
121 person.makePayload()
|
DaveM@23
|
122 person.resp = rawData[person.id]
|
DaveM@24
|
123 # print 'parsing person '+ person.id
|
DaveM@23
|
124 person.horiscope = person.parsePage()
|
DaveM@23
|
125 # person.horiscope.printPositions()
|
DaveM@23
|
126 if saveFile is not None:
|
DaveM@23
|
127 savePick(saveFile,people)
|
DaveM@23
|
128
|
DaveM@23
|
129 def _main():
|
DaveM@29
|
130 resetAll = False
|
DaveM@29
|
131 if resetAll:
|
DaveM@29
|
132 for item in os.listdir('.'):
|
DaveM@29
|
133 if item.endswith(".pick"):
|
DaveM@29
|
134 os.remove(item)
|
DaveM@31
|
135 # os.remove('outData_collect.pick')
|
DaveM@23
|
136 pickFile = 'outData.pick'
|
DaveM@23
|
137 if not os.path.exists(pickFile):
|
DaveM@23
|
138 people = makePeople('individuals.csv')
|
DaveM@23
|
139 savePick(pickFile,people)
|
DaveM@23
|
140 else:
|
DaveM@23
|
141 people = loadPick(pickFile)
|
DaveM@23
|
142 parseSaveFile = pickFile.split('.')[0]+'_collect.pick'
|
DaveM@23
|
143 if not os.path.exists(parseSaveFile):
|
DaveM@27
|
144 # if os.path.exists('raw_'+parseSaveFile):
|
DaveM@27
|
145 # parseHoriscopeRaw(people,parseSaveFile)
|
DaveM@27
|
146 # else:
|
DaveM@27
|
147 parseHoriscope(people,parseSaveFile)
|
DaveM@23
|
148 else:
|
DaveM@23
|
149 people = loadPick(parseSaveFile)
|
DaveM@23
|
150 # if not os.path.exists('fullResults.pick'):
|
DaveM@23
|
151 if not os.path.exists('fullResults.pick'):
|
DaveM@23
|
152 comp = syn.compatibility()
|
DaveM@23
|
153 comp.parseCompatRules('compatibilityRules.csv')
|
DaveM@23
|
154 for person in people:
|
DaveM@23
|
155 print person.id
|
DaveM@23
|
156 person.score = None
|
DaveM@23
|
157 if person.issue is None:
|
DaveM@29
|
158 person.score,person.description = comp.describeCompatibility(person.horiscope)
|
DaveM@23
|
159 if person.score is None:
|
DaveM@23
|
160 person.issue = 'None Planet Locations'
|
DaveM@23
|
161 # pdb.set_trace()
|
DaveM@23
|
162 f = open('issues/'+str(person.id)+'.html','w')
|
DaveM@23
|
163 f.write(person.resp.content)
|
DaveM@23
|
164 f.close()
|
DaveM@23
|
165 savePick('fullResults.pick',people)
|
DaveM@23
|
166 else:
|
DaveM@23
|
167 people = loadPick('fullResults.pick')
|
DaveM@23
|
168 outputPeople('fullResult.csv',people)
|
DaveM@23
|
169 outputScores('scores.csv',people)
|
DaveM@31
|
170 outputDescriptions('description.txt',people)
|
DaveM@23
|
171 outputIssues('issues.csv',people)
|
DaveM@23
|
172
|
DaveM@23
|
173 if __name__ == "__main__":
|
DaveM@23
|
174 _main()
|