@@ -0,0 +1,115 @@
#-*- coding: utf-8 -*-
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse
import ephem , datetime
import json
# Phases of the Moon, using the datetime.now() at UTC
# http://127.0.0.1:8899/
# Phases of the Moon, using the datetime.datetime(int(year), int(month), int(day))) at UTC
# http://127.0.0.1:8899/?year=2015&month=07&day=25
# Sun rising and setting at location
# http://127.0.0.1:8899/?lon=-8.446&lat=40.575&elevation=34
# Phases of the Moon + Sun rising and setting at location
# http://127.0.0.1:8899/?year=2015&month=07&day=25&lon=-8.446&lat=40.575&elevation=34
# forever start -c python servidor.py
# forever logs
class GetHandler (BaseHTTPRequestHandler ):
def do_GET (self ):
try :
parsed_path = urlparse .urlparse (self .path )
d = { 'client' : self .client_address }
p = urlparse .parse_qs (parsed_path .query )
if 'day' in p and 'month' in p and 'year' in p :
day = p ['day' ].pop ()
month = p ['month' ].pop ()
year = p ['year' ].pop ()
today = ephem .Date (datetime .datetime (int (year ), int (month ), int (day )))
else :
today = ephem .Date (datetime .datetime .now ())
print today
d ['today' ] = today .datetime ().isoformat ()
if 'lon' in p and 'lat' in p and 'elevation' in p :
lon = p ['lon' ].pop ()
print lon
lat = p ['lat' ].pop ()
elevation = p ['elevation' ].pop ()
obs = ephem .Observer ()
obs .lon = lon
print obs .lon
obs .lat = lat
obs .elevation = float (elevation )
obs .date = today
print obs
sol = ephem .Sun (obs )
nascer = obs .next_rising (sol ,today )
hora_n = ephem .Date (nascer + 1 * ephem .hour )
print 'Nascer do Sol' , hora_n
porsol = obs .next_setting (sol ,today )
hora_p = ephem .Date (porsol + 1 * ephem .hour )
print 'Por do Sol ' , hora_p
d ['next_rising' ] = hora_n .datetime ().isoformat ()
d ['next_setting' ] = hora_p .datetime ().isoformat ()
date = today
full_moons = []
while date < today + 366.0 :
date = ephem .next_full_moon (date )
full_moons .append (date .datetime ().isoformat ())
d ['next_full_moon' ] = full_moons
date = today
last_quarter_moon = []
while date < today + 366.0 :
date = ephem .next_last_quarter_moon (date )
last_quarter_moon .append (date .datetime ().isoformat ())
d ['last_quarter_moon' ] = last_quarter_moon
date = today
new_moon = []
while date < today + 366.0 :
date = ephem .next_new_moon (date )
new_moon .append (date .datetime ().isoformat ())
d ['new_moon' ] = new_moon
date = today
first_quarter_moon = []
while date < today + 366.0 :
date = ephem .next_first_quarter_moon (date )
first_quarter_moon .append (date .datetime ().isoformat ())
d ['first_quarter_moon' ] = first_quarter_moon
d ['success' ] = 'true'
self .send_response (200 )
self .send_header ('Content-Type' , 'application/json' )
self .end_headers ()
self .wfile .write (json .dumps (d ))
except (ValueError , AttributeError ) as e :
error = "ValueError: {0}" .format (e )
print error
self .send_response (200 )
self .send_header ('Content-Type' , 'application/json' )
self .end_headers ()
e = { 'success' : 'false' }
e ['error' ] = error
self .wfile .write (json .dumps (e ))
return
if __name__ == '__main__' :
from BaseHTTPServer import BaseHTTPRequestHandler , HTTPServer
from SocketServer import ThreadingMixIn
class ThreadedHTTPServer (ThreadingMixIn , HTTPServer ):
"""Handle requests in a separate thread."""
# server = HTTPServer(('localhost', 8899), GetHandler)
server = ThreadedHTTPServer (('' , 8899 ), GetHandler )
print 'Starting server, use <Ctrl-C> to stop'
server .serve_forever ()