from dataclasses import dataclass
from operator import attrgetter
import urllib.request
import json
import datetime
import matplotlib.pyplot as plt
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('myemail@gmail.com', 'mypassword')
#rcvr = input('Where do you want to recieve email?')
server.sendmail('sender@gmail.com','reciever@gmail.com' , i need to send quake info here)
#Creating a dataclass with all the info that we gonna use
@dataclass
class Feature:
place: str
long: float
lat: float
depth: float
mag: float
#Predefyning the variable that are gonna hold info from our json file
@classmethod
def get_json(cls, featurejson):
place = featurejson["properties"]["place"] #Location
long, lat, depth = map(float, featurejson['geometry']['coordinates'])
#Longitude, latitude, and depth
mag = float(featurejson["properties"]["mag"]) #Magnitude
return cls(place, long, lat, depth, mag)
#Getting information from the json file URL
def get_info(url = "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.geojson"):
with urllib.request.urlopen(url) as resp:
data = json.loads(resp.read())
for feature in data["features"]:
yield Feature.get_json(feature)
#Displaying the info in text format for now,s
def show_info(features):
for feat in sorted(features, key=attrgetter("mag"), reverse = True):#Sorting by the magnitude in the reversed order
print(feat)#Printing the result
#Drawing the plot
def showplot(features):
loc = [feat.place for feat in sorted(features, key=attrgetter("mag"))]#Location
magn = [feat.mag for feat in features] #Magnitude
y_pos = range(len(magn))
plt.bar(y_pos, magn)
plt.xticks(y_pos, loc)
plt.ylabel('Magnitude')
plt.show()
features = list(get_info()) #Storing our json information into a list 'Features'
show_info(features) #Displaying information in text format
showplot(features) #Displaying information in format of a plot
Мой код указан выше, и мне нужен способ отправить информацию о землетрясении на электронную почту, которую введет пользователь, я могу отправлять простые сообщения, но я не могу найти способ отправить только информацию о землетрясении, то есть «особенности». Единственный способ, которым я могу думать, - это записать информацию в файл, а затем прикрепить этот файл к электронной почте, но это слишком много шагов, и это не выглядит приятным для получателя.
Как отправить только электронное письмо с информацией из моего кода, который я уже извлек из json?