Как отправить информацию из JSON на электронную почту? - PullRequest
0 голосов
/ 14 марта 2019
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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...