def whatWeather(question): """ Permet d'effectuer une requete API afin de récupérer et annoncer les détails de la météo :param question: la demande de météo de l'utilisateur """ # On récupère la ville dans laquelle effectuer la requete API city = getCity(question) # On effectue une premiere requete dans la ville pour avoir les infos meteo actuel r = requests.get(f'http://api.openweathermap.org/data/2.5/weather?q={city}&lang=fr&units=metric&APPID=36a7954299258aa25bd9ba8ceb3ab077') # pprint(r.json()) # On stock les resultats de la requete reponse = json.loads(r.text) # On stock les coordoonées GPS de la ville pour avoir beaucoup + d'informations meteo lat = reponse["coord"]["lat"] long = reponse["coord"]["lon"] # On conatene si la ville est en plusieurs mots if "+" in city: city = city.replace("+", " ") # On effectue la 2eme requete pour recuperer les details precis de la meteo sur la journee complete r = requests.get(f'https://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={long}&lang=fr&units=metric&exclude=hourly,minutely,alerts&APPID=36a7954299258aa25bd9ba8ceb3ab077') # pprint(r.json()) reponse = json.loads(r.text) # On stock les differentes informations necessaires à annoncer par l'assistant description = reponse["current"]["weather"][0]["description"] tempCurrent = int (reponse["current"]["temp"]) tempMin = int (reponse["daily"][0]["temp"]["min"]) tempMax = int (reponse["daily"][0]["temp"]["max"]) speak(f"Le temps est actuellement {description} avec une température de {tempCurrent} degré à {city}. Il fera {tempMin} degré au minimum et {tempMax} degré au maximum.")
def check_memo(): """ fonction va regarder dans un fichier texte et qui parcour tous les dictionnaires et compare la date du mémo ave la date actuelle pour voir si il doit speak le mémo :return: """ fr_month = ("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre") date = datetime.datetime.now() mois = fr_month[date.month - 1] actualDate = f'{date.day} {mois} à {date.hour}h' file = open('memo_output/memo.txt', "r") lines = file.readlines() file.close() new_file = open("memo_output/memo.txt", "w") for line in lines: dictionary = ast.literal_eval(line) if actualDate in dictionary['date']: speak( f'Vous avez un rappel pour {dictionary["date"]}, pour {dictionary["memo"]} ' ) print( f'Vous avez un rappel pour {dictionary["date"]}, pour {dictionary["memo"]} ' ) else: new_file.write(line) new_file.close()
def addShoppingList(question): """ Ajoute un élément à la liste de course :param question: la demande de l'utilisateur """ if not os.path.exists(f'memo_output/shoppingList.txt'): open(f'memo_output/shoppingList.txt', 'w') # L'élément à ajouter dans la liste de course toAdd = question.split("ajoute à la liste de courses ")[1] print(toAdd) with open("memo_output/shoppingList.txt", "r") as f: lines = f.readlines() exist = False for line in lines: if line.replace("\n", "") in toAdd: speak(f'{toAdd} existe déjà dans votre liste de courses') exist = True break if exist is False: with open("memo_output/shoppingList.txt", "a") as f: f.write(toAdd + "\n") speak(f'{toAdd} a bien été ajouté à votre liste de course')
def deleteItemShoppingList(question): """ Supprimer un élément de la liste de course :param question: la demande de l'utilisateur """ # L'élément à supprimer de la liste de course toDelete = question.split("supprime de la liste de courses ")[1] found = False # On vérifie si l'item existe dans la liste de course et on le supprime s'il est trouvé with open("memo_output/shoppingList.txt", "r") as f: lines = f.readlines() for line in lines: if toDelete in line: found = True with open("memo_output/shoppingList.txt", "w") as f: for line in lines: if line.replace("\n", "") in toDelete: continue else: f.write(line) speak(f'{toDelete} a bien été supprimé de la liste de course') if found is False: speak(f"{toDelete} n'existe pas dans votre liste de course")
def speak_translate(phrase): """ Permet à l'assistant vocal d'annoncerla traduction oralement' :param phrase: phrase donné par l'utilisateur """ result = translate(phrase) speak( f'La traduction de {result["language"][0]} en {result["language"][1]} donne {result["traduction"]}' )
def whatDayToday(): """ Permet d'annoncer la date actuelle """ fr_month = ("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre") date = datetime.datetime.now() mois = fr_month[date.month - 1] speak(f'Nous sommes le {date.day} {mois} {date.year}')
def covcases(question): """ Permet d'annoncer les statistiques du covid dans un pays :param question: demande de l'utilisateur """ covid = Covid() country = getCountry(question) countryConvert = getCountryConvert(country) result = covid.get_status_by_country_name(countryConvert) speak( f'Il y a {result["confirmed"]} cas, et {result["deaths"]} morts dû au covide en {country}' )
def getNearPlace(question): answer = question.split(" le") pos = gmaps.find_place( answer[1], "textquery", fields=["business_status", "geometry/location", "place_id"], language="fr-FR" ) # Fonction pour trouver la "place" la plus proche en fonction du mot clé, du format de demande, de la langue et de quelques champs near_place = gmaps.reverse_geocode( pos["candidates"][0]["geometry"] ["location"]) # Alterner entre Longitude/Latitude et Adresse found_address = near_place[2]["formatted_address"] print(found_address) speak(f'Le {answer[1]} le plus proche se trouve au {found_address}' ) # Adresse approximative trouvée la plus proche
def removeShoppingList(): """ Supprimer toute la liste de course :param question: la demande de l'utilisateur """ speak("êtes-vous sur de vouloir vider la liste de course ?") reponse = ecouter() if reponse.lower() == "oui": with open("memo_output/shoppingList.txt", "w") as f: f.write("") speak("La liste de course a bien été vidé") else: speak("La liste de course n'a pas été vidé")
def getTravelTime(question): places = question.split(" au") SRC = getUserPosition() DEST = places[1] if "voiture" in question: result = getTime("driving", SRC, DEST) time = result[0] adress = result[1] time = replaceTime(time) speak(f'Pour aller au {DEST} il vous faudra {time} et faire {adress}') elif "à pied" in question: result = getTime("walking", SRC, DEST) time = result[0] adress = result[1] time = replaceTime(time) speak(f'Pour aller au {DEST} il vous faudra {time} et faire {adress}') elif " vélo" in question: result = getTime("bicycling", SRC, DEST) time = result[0] adress = result[1] time = replaceTime(time) speak(f'Pour aller au {DEST} il vous faudra {time} et faire {adress}') if " transport" in question: result = getTime("transit", SRC, DEST) time = result[0] # adress = result[1] departure_and_arrival = get_departure_and_arrival(SRC, DEST) departure = departure_and_arrival[0] arrival = departure_and_arrival[1] time = replaceTime(time) speak( f'Pour aller au {DEST} il vous faudra {time}, partir à {departure} pour arriver à {arrival}' )
def whatTimeIsIt(): """ Permet d'annoncer l'heure actuelle """ date = datetime.datetime.now() speak(f'Il est : {date.hour} heure et {date.minute} minutes')