Bonjour,
je pense avoir fini avec le script de lunaison
lunaison.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Par Didier-T Pour les utilisateur de Météo Lua
import urllib, urllib2, json, sys, getopt
class ephemeride():
def __init__(self):
self.arguments()
lat, lng=self._localisation(self.ville)
data=self._past(lat, lng)
tableau=self._format(data)
tableau.append(self._agelune(data))
tableau.append(self._phaselune(data))
self._sortie(tableau)
def _localisation(self, ville):
req=urllib2.Request('http://maps.googleapis.com/maps/api/geocode/json?address='+ville+',%20france&sensor=false')
response = urllib2.urlopen(req)
jstr=json.loads(response.read())
return jstr["results"][0]["geometry"]["location"]["lat"], jstr["results"][0]["geometry"]["location"]["lng"]
def _past(self, lat, lng):
req = urllib2.Request('http://cerridwen.viridian-project.de/api/v1/moon?latitude='+str(lat)+'&longitude='+str(lng))
response = urllib2.urlopen(req)
return json.loads(response.read())
def _format(self, jstr):
tableau=[]
for x in jstr:
for y in x:
if isinstance(x[y], dict):
for z in x[y]:
tableau.append(y+"_"+z+" = "+self._traduction(str(x[y][z])))
else:
tableau.append(y+" = "+self._traduction(str(x[y])))
return tableau
def _phaselune(self, jstr):
if int(jstr[0]["position"]["deg"])<45:
return ("phase_de_la_lune = Premier croissant")
elif int(jstr[0]["position"]["deg"])<90:
return("phase_de_la_lune = Premier quartier")
elif int(jstr[0]["position"]["deg"])<135:
return("phase_de_la_lune = Lune gibbeuse croissante")
elif int(jstr[0]["position"]["deg"])<180:
return("phase_de_la_lune = PLeine lune")
elif int(jstr[0]["position"]["deg"])<215:
return("phase_de_la_lune = Lune gibbeuse décroissante")
elif int(jstr[0]["position"]["deg"])<270:
return("phase_de_la_lune = Dernier quartier")
elif int(jstr[0]["position"]["deg"])<315:
return("phase_de_la_lune = Dernier croissant")
else:
return("phase_de_la_lune = Nouvelle Lune")
def _agelune(self, jstr):
jour=int(jstr[0]["age"])
heure=int((jstr[0]["age"]-jour)*24)
minute=int((((jstr[0]["age"]-jour)*24)-heure)*60)
return "iso = "+str(jour)+" jours "+str(heure)+" h "+str(minute)+" m"
def _traduction(self, trad):
try:
ret=trad.replace("in", "en")\
.replace("moon", "lune").replace("Moon", "Lune")\
.replace("full", "pleine").replace("Full", "Pleine")\
.replace("new", "nouvelle").replace("New", "Nouvelle").replace("rises", "montante")\
.replace("first", "tremier").replace("third", u"troisième").replace("quarter", "quartier")\
.replace("crescent", "croissante").replace("waning", u"décroissante")\
.replace("gibbous","Gibbeuse").replace("waxeng", "ascendante")\
.replace("Pisces", "Poissons").replace("Aries", u"Bélier").replace("Taurus", "Taureau").replace("Gemini", u"Gémeaux")\
.replace("Leo", "Lion").replace("Virgo", "Vierge").replace("Libra", "Balance").replace("Scorpio", "Scorpion")\
.replace("Sagittarius", "Sagittaire").replace("Capricorn", "Capricorne").replace("Aquarius", "Verseau")\
.replace("sets", "se couche")
except:
ret=trad
return ret
def _sortie(self, tableau):
print '\n'.join(tableau)
# Définis les arguments passés en ligne de commande, lance usage() si besoin ou aide demandée
def arguments(self):
try:
opts, args = getopt.getopt(sys.argv[1:], "v:ch", ["ville=","commune=", "help"])
except getopt.GetoptError as err:
# Affiche l'aide et quitte le programme
self.usage()
sys.exit(2)
if opts==[]:
self.usage()
sys.exit(2)
self.getlist=[]
self.fileout=0
for o, a in opts:
if o in ("-v", "--ville"):
self.ville=a
if o in ("-c", "--commune"):
region=a
elif o in ("-h", "--help"):
self.usage()
sys.exit()
try:
self.ville=self.ville+","+region
except:
pass
# Aide à l'utilisation du script
def usage(self):
print("\nUtilisation: lunaison.py --ville=[nom de la ville] --commune=[nom de la commune]\n\
retourne les informations concernant la lune visible depuis la ville renseignée.\n\
\n\
Liste des paramètres obligatoires pour l'accès aux données :\n\
-v, --ville Nom de la ville\n\
Liste des paramètres optionnel pour l'accès aux données :\n\
-c, --commune Nom de la commune\n\
\n\
--help Affiche l'aide et quitte\n")
if __name__ == "__main__":
ephemeride()
ce lance depuis un terminal avec argument(s)
-v ou --ville=
nom de la ville (avec des - a la place des espaces)
-c ou --commune=
nom de la commune (avec des - a la place des espaces) cette argument est optionnel
retour pour la commande suivante
python lunaison.py --ville=Saint-Maximin --commune=gard
diameter = 32.8914139161
last_rise_jd = 2457103.78783
last_rise_delta_days = -0.00782587332651
last_rise_description = Lune montante
last_rise_iso_date = 2015-03-22 06:54:29
illumination = 0.14710123326
last_full_moon_jd = 2457087.25374
last_full_moon_delta_days = -16.5419149394
last_full_moon_description = Pleine lune en Vierge
last_full_moon_iso_date = 2015-03-05 18:05:23
speed = 14.6922702198
period_length = 29.3893529065
next_full_moon_jd = 2457117.00386
next_full_moon_delta_days = 13.2082022
next_full_moon_description = Pleine lune en Balance
next_full_moon_iso_date = 2015-04-04 12:05:34
jd = 2457103.79564
dignity = None
next_new_moon_jd = 2457131.28947
next_new_moon_delta_days = 27.4938142132
next_new_moon_description = Nouvelle lune en Bélier
next_new_moon_iso_date = 2015-04-18 18:56:50
position_min = 49.0329297239
position_rel_tuple = [u'Bélier', 27, 49, 1]
position_absolute_degrees = 27.8172154954
position_sign = Bélier
position_sec = 1.97578343156
position_deg = 27.8172154954
last_new_moon_jd = 2457101.90012
last_new_moon_delta_days = -1.89553871891
last_new_moon_description = Nouvelle lune en Poissons
last_new_moon_iso_date = 2015-03-20 09:36:10
distance = 0.0024287844764
next_set_jd = 2457104.36419
next_set_delta_days = 0.568529751617
next_set_description = Lune se couche
next_set_iso_date = 2015-03-22 20:44:26
speed_ratio = 0.821364207238
last_set_jd = 2457103.31344
last_set_delta_days = -0.482221316081
last_set_description = Lune se couche
last_set_iso_date = 2015-03-21 19:31:21
age = 1.8955248245
next_rise_jd = 2457104.8153
next_rise_delta_days = 1.01964266971
next_rise_description = Lune montante
next_rise_iso_date = 2015-03-23 07:34:02
diameter_ratio = 0.748211232523
phase_trend = ascendante
phase_shape = croissante
phase_quarter = None
phase_quarter_english = None
iso_date = 2015-03-22 07:05:44
next_new_or_full_moon_jd = 2457117.00386
next_new_or_full_moon_delta_days = 13.2082021916
next_new_or_full_moon_description = Pleine lune en Balance
next_new_or_full_moon_iso_date = 2015-04-04 12:05:34
iso = 1 jours 21 h 29 m
phase_de_la_lune = Premier croissant