View Single Post
Trådstarter
199
Et til spørsmål om noen gidder og se på det da
Har nå lagt til sånn at man mottar kopi av søket på emailen sin.
MEN..men, alltid et men. Hvordan skal jeg klare og få den til å sende søket som flere søk hver gang man velger en ny by?

Kode

# - Good Morning Program -

#Import
import datetime
import requests
import sys
import smtplib
import ad_pw
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

#Input
name_of_user = input("What is your name?: ")
receiver_email = input("Your e-mail: ")

#Email
sender_email = ad_pw.email_address
password = ad_pw.email_password
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(sender_email, password)

#Loop
while True:

    #Input
    city = input('City Name: ')

    # API
    api_address='http://api.openweathermap.org/data/2.5/weather?appid=0c42f7f6b53b244c78a418f4f181282a&q='
    url = api_address + city
    json_data = requests.get(url).json()

    # Variables
    format_add = json_data['main']['temp']
    day_of_month = str(datetime.date.today().strftime("%d "))
    month = datetime.date.today().strftime("%b ")
    year = str(datetime.date.today().strftime("%Y "))
    time = str(datetime.datetime.now().strftime("%H:%M:%S"))
    degrees = format_add - 273.15
    humidity = json_data['main']['humidity']
    latitude = json_data['coord']['lon']
    longitude = json_data['coord']['lat']

    #Program
    if degrees < 20 and time > str(12.00):
        print("\nGood afternoon " + name_of_user + ".")
        print("\nThe date today is: " +
              day_of_month +
              month +
              year)
        print("The current time is: " + time)
        print("The humidity is: " + str(humidity) + '%')
        print("Latitude and longitude for " + city + " is: " + str(latitude), str(longitude))
        print("The temperature is a mild " + "{:.1f}".format(degrees) +
              "°C, you might need a jacket.")

    elif degrees < 20 and time < str(12.00):
        print("\nGood morning " + name_of_user + ".")
        print("\nThe date today is: " +
              day_of_month +
              month +
              year)
        print("The current time is: " + time)
        print("The humidity is: " + str(humidity) + '%')
        print("Latitude and longitude for " + city + " is: " + str(latitude), str(longitude))
        print("The temperature is a mild " + "{:.1f}".format(degrees) +
              "°C, you might need a jacket.")

    elif degrees >= 20 and time > str(12.00):
        print("\nGood afternoon " + name_of_user + ".")
        print("\nThe date today is: " +
              day_of_month +
              month +
              year)
        print("The current time is: " + time)
        print("The humidity is: " + str(humidity) + '%')
        print("Latitude and longitude for " + city + " is: " + str(latitude), str(longitude))
        print("The temperature is a warm " + "{:.1f}".format(degrees) +
              "°C, don't forget to drink water.")

    elif degrees >= 20 and time < str(12.00):
        print("\nGood morning " + name_of_user + ".")
        print("\nThe date today is: " +
              day_of_month +
              month +
              year)
        print("The current time is: " + time)
        print("The humidity is: " + str(humidity) + '%')
        print("Latitude and longitude for " + city + " is: " + str(latitude), str(longitude))
        print("The temperature is a warm " + "{:.1f}".format(degrees) +
              "°C, don't forget to drink water.")

    restart = input('Would you like to check another city (y/n)?: ')
    if restart == 'y':
        continue
    else:
        break


#HTML
html_message = """\
<html>
  <head></head>
  <body>
    <p>Hi, """ + str(name_of_user) + """<br>
    Here is the data from your weather search:<br>
    <br>
    City: """ + str(city) + """<br>
    Temperature: """ + "{:.1f}".format(degrees) + """°C<br>
     Humidity: """ + str(humidity) + """%<b>
    </p>
  </body>
</html>
"""

#Email
msg = MIMEMultipart('alternative')
msg['From'] = sender_email
msg['To'] = receiver_email
msg = MIMEText(html_message, "html")

#Send email
server.sendmail(sender_email, receiver_email, msg.as_string())

#Final print
print('Goodbye, an email has been sent to ' + receiver_email + " and you will receive a copy for data from your searched cities there")

#Exit
sys.exit()

Jeg tenkte jeg kunne legge det i loopen (ligger utenfor loopen nå), men sånn jeg tenker det så vil den sende en ny email for hver gang man velger en ny by, istedenfor at alt havner i EN email (om dette var forståelig hehe ). Klarer ikke forstå hvordan jeg skal få sendt alt i EN epost.

Regner med at jeg på en måte må lagre hvert svar + søk, så sende det på slutten av koden eller slutten av loopen på en måte?

PS: Prøvde med yagmail men når jeg brukte yagmail ville ikke pw og email bli godkjent. Og bruker HTML fordi når jeg skrev alt som vanlig tekst ble bare meldingen helt blank jo flere variable jeg addet i mailen



En annen ting. Prøvde å legge til at man kunne velge med y/n om man vil motta svaret på email så det ikke blir tvang å motta været på email (ikke det at jeg skal publisere det her, bare øver meg), men får invalid syntax.

Kode

    restart = input('Would you like to check another city (y/n)?: ')
    if restart == 'y':
        continue
    else:
        # HTML
        html_message = """\
        <html>
          <head></head>
          <body>
            <p>Hi, """ + str(name_of_user) + """<br>
            Here is the data from your weather search:<br>
            <br>
            City: """ + str(city) + """<br>
            Temperature: """ + "{:.1f}".format(degrees) + """°C<br>
             Humidity: """ + str(humidity) + """%<b>
            </p>
          </body>
        </html>
        """

        # Email
        msg = MIMEMultipart('alternative')
        msg['From'] = sender_email
        msg['To'] = receiver_email
        msg = MIMEText(html_message, "html")
        receive_email = input("Do you want to receive a copy from you search (y/n)?: ")
        if receive_email = "y":
            print(
            'Goodbye, an email has been sent to ' + receiver_email + " and you will receive a copy for data from your searched cities there")
            server.sendmail(sender_email, receiver_email, msg.as_string())
        else:
            print('Goodbye')
            break

#Exit
sys.exit()
Kommer rød strek under

Kode

f receive_email = "y":
Holder jeg over den streken står det "colon expected", men har jo colon?

Det med og spørre om man vil motta emailen fikk jeg fiksa, hadde vist bare slurva ser jeg.

Kode

    restart = input('Would you like to check another city (y/n)?: ')
    if restart == 'y':
        continue
    else:
        # HTML
        html_message = """\
        <html>
          <head></head>
          <body>
            <p>Hi, """ + str(name_of_user) + """<br>
            Here is the data from your weather search:<br>
            <br>
            City: """ + str(city) + """<br>
            Temperature: """ + "{:.1f}".format(degrees) + """°C<br>
             Humidity: """ + str(humidity) + """%<b>
            </p>
          </body>
        </html>
        """

        # Email
        msg = MIMEMultipart('alternative')
        msg = MIMEText(html_message, "html")
        receive_email = input("Do you want to receive a copy from you search (y/n)?: ")
        if receive_email == 'y':
            receiver_email = input("Your e-mail: ")
            msg['From'] = sender_email
            msg['To'] = receiver_email
            print(
            'Goodbye, an email has been sent to ' + receiver_email + " and you will receive a copy for data from your searched cities there")
            server.sendmail(sender_email, receiver_email, msg.as_string())
            sys.exit()
        else:
            print('Goodbye')
            sys.exit()
Sist endret av hvagjordo; 4. mai 2019 kl. 13:09. Grunn: Automatisk sammenslåing med etterfølgende innlegg.