Используйте автоматизацию сценариев Python для получения изображений из NASA

Используйте автоматизацию сценариев Python для получения изображений из NASA Изучение

В предыдущем руководстве мы узнали, как загружать изображения на наш локальный компьютер с помощью API НАСА. Это было круто, правда?

Мы собираемся сделать еще один шаг вперед и научимся отправлять эти изображения в виде вложений по электронной почте. Затем мы автоматизируем этот процесс с помощью планировщика задач. Обратите внимание, что для загрузки изображений из API НАСА мы будем использовать тот же код из предыдущего руководства, поэтому прочтите эти основы, прежде чем продолжить здесь.

Содержание
  1. Изменить настройки Google
  2. 1. Отключите двухэтапную аутентификацию.
  3. 2. Разрешить доступ менее безопасным приложениям.
  4. Как отправить сегодняшнее астрономическое изображение по электронной почте
  5. Шаг 1. Импортируйте необходимые библиотеки
  6. Шаг 2: Создайте объект класса НАСА
  7. Шаг 3. Получите дату в нужном формате
  8. Шаг 4. Получите информацию из API НАСА
  9. Шаг 5: Имя файла для файлов изображений
  10. Шаг 6. Скачивание файлов
  11. Шаг 7. Адреса электронной почты
  12. Шаг 8: Создание объекта
  13. Шаг 9: Тема электронного письма
  14. Шаг 10: основная часть электронного письма
  15. Шаг 11: Откройте вложение
  16. Шаг 12: Создайте объект MIMEBase
  17. Шаг 13: Добавьте заголовок с именем файла
  18. Шаг 14: прикрепите файл к сообщению
  19. Шаг 15: отправьте электронное письмо (-а)
  20. Шаг 16. Изображение недоступно
  21. Как отправить картинку с даты ввода
  22. Как отправить случайную астрономическую картинку
  23. Шаг 1. Импортируйте библиотеки
  24. Шаг 2. Выбор цитаты по астрономии
  25. Шаг 3. Получение местоположения изображения
  26. Шаг 4: выберите случайное изображение
  27. Шаг 5. Отправка электронного письма
  28. Как автоматически отправлять астрономические изображения
  29. Шаг 1. Подготовьте скрипт Python
  30. Шаг 2. Открытие планировщика задач
  31. Шаг 3: Создание задачи
  32. Шаг 4. Вкладка «Действия»
  33. Шаг 5. Установка времени для действия
  34. Выход процесса
  35. Заключение

Изменить настройки Google

В этом руководстве мы используем службу Google Gmail и SMTP (Simple Mail Transfer Protocol) для отправки электронных писем. Но Google может не позволить нам сделать это по соображениям безопасности. Итак, прежде всего нам нужно изменить настройки безопасности в нашей учетной записи Google.

Вы можете изменить эти настройки, войдя в свою учетную запись Google, а затем перейдя к настройкам безопасности.

1. Отключите двухэтапную аутентификацию.

Отключите двухэтапную аутентификацию

2. Разрешить доступ менее безопасным приложениям.

Разрешить доступ менее безопасным приложениям

Как отправить сегодняшнее астрономическое изображение по электронной почте

Наша цель — загрузить Astronomy Picture of the Day (APOD) с помощью NASA API, как мы это делали в предыдущем руководстве. Но вместо того, чтобы отображать его в блокноте, мы отправим его на адрес электронной почты. После загрузки изображения на нашу локальную машину мы собираемся использовать модуль SMTP, чтобы отправить его на нашу электронную почту.

Посмотрим, как это делается.

Шаг 1. Импортируйте необходимые библиотеки

#Import required libraries:
import nasapy
from datetime import datetime
import urllib.request
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
  • nasapy: Мы используем библиотеку nasapy для доступа к информации, предоставляемой NASA API.
  • datetime: Чтобы получить дату в определенном формате, мы будем использовать библиотеку datetime.
  • urllib: Изображение, которое мы получаем из NASA API, будет в форме URL.
  • smtplib: Мы используем модуль smtp для создания объекта клиентского сеанса, который можно использовать для отправки почты на любой компьютер в Интернете, который слушает smtp.
  • MIMEMultipart: Содержание нашей почты будет содержать простой текст и вложения.
  • MIMEText: MIMEText предназначен для текста / html / простого текста. Если сообщение в текстовой форме, мы используем это.
  • MIMEBase: MIMEBase предоставляется в первую очередь как удобный базовый класс для более конкретных подклассов, поддерживающих MIME.
  • encoders: Здесь мы импортируем модуль кодировщиков для кодирования полезной нагрузки или вложений при отправке электронных писем.

Шаг 2: Создайте объект класса НАСА

Здесь мы создаем объект с именем nasa. Мы используем библиотеку nasapy и зарегистрированный ключ api. Мы будем использовать этот объект для вызова метода класса NASA для получения информации об астрономических изображениях.

#Initialize Nasa class by creating an object:
k = «523p5hPYHGzafYGLCkqa54kKMTV2vbP0XcPxkcLm»
nasa = nasapy.Nasa(key = k)

Шаг 3. Получите дату в нужном формате

Теперь, чтобы получить изображение для определенной даты, нам нужно передать дату в определенном формате. Требуемый формат даты — YYYY-MM-DD. Чтобы получить сегодняшнюю дату, мы будем использовать datetime.today()функцию.

Нам нужно преобразовать этот кортеж в строку с помощью функции strftime(%Y-%m-%d), которая преобразует наши даты в правильный формат.

#Get today’s date in YYYY-MM-DD format:
d = datetime.today().strftime(‘%Y-%m-%d’)

Шаг 4. Получите информацию из API НАСА

Теперь, когда у нас есть сегодняшняя дата в требуемом формате, мы можем разместить запрос на сегодняшнее астрономическое изображение. Здесь мы собираемся использовать picture_of_the_day()метод для получения данных изображения.

Обратите внимание, что наши данные хранятся в переменной apod.

#Get the image data:
apod = nasa.picture_of_the_day(date=d, hd=True)

Шаг 5: Имя файла для файлов изображений

Теперь мы должны поддерживать определенную структуру имен для сохранения изображений. Итак, здесь мы будем использовать следующую структуру по порядку: дата изображения, заголовок изображения, расширение изображения. Мы также заменяем двоеточия и пробелы подчеркиванием.

#file name of the image:
title = d + «_» + apod[«title»].replace(» «,»_»).replace(«:»,»_») + «.jpg»

Шаг 6. Скачивание файлов

Теперь, когда у нас достаточно информации для загрузки файлов, мы загружаем только файлы изображений. Кроме того, если hdизображение недоступно, мы получим доступ к sdизображению.

Downloading only image files:
#POINT A:
if apod[‘media_type’] == ‘image’:
        if ‘hdurl’ in apod.keys():
            #Downloading the image:
            urllib.request.urlretrieve(url = apod[«hdurl»] , filename = title)
        else:
            urllib.request.urlretrieve(url = apod[«url»] , filename = title)

Шаг 7. Адреса электронной почты

Теперь, когда мы загрузили изображения, пришло время отправить их по электронной почте. Здесь используются два адреса: from_addrи to_addr. Вы можете добавить дополнительные адреса электронной почты to_addrчерез запятую.

#POINT B:
        #Sending email:
        #Email addresses:
        from_addr = «sppratik22@gmail.com»
        to_addr = [«shuklapratik22@gmail.com»]

Шаг 8: Создание объекта

В электронном письме мы отправим текстовое описание и изображение. Поскольку на этом изображении несколько частей, мы создаем экземпляр класса MIMEMultipart(). Это позволяет нам добавлять контент в нескольких форматах.

#POINT C:
        #create an instance of MIMEMultipart():
        message = MIMEMultipart()

Шаг 9: Тема электронного письма

Теперь мы отправим электронное письмо с темой. Темой здесь будет имя или заголовок файла. Вы можете изменить его по своему усмотрению.

#POINT D:
        #Subject of the email:
        message[‘Subject’] = apod[«title»]

Шаг 10: основная часть электронного письма

В основной части нашего электронного письма мы пишем простой текст, за которым следует пояснение к приложенному изображению. После написания тела мы собираемся прикрепить его к объекту сообщения, используя MIMEText. Обратите внимание, что наш текст будет в формате обычного текста.

#POINT E:
        #Body of the email:
        body = «Hello, this email is generated using python by Pratik Shukla!\n\n\n» + apod[«explanation»]
        #Attaching the text in body:
        message.attach(MIMEText(body, ‘plain’))

Шаг 11: Откройте вложение

Далее мы открываем файл, который хотим прикрепить. Здесь мы собираемся открыть файл в двоичном режиме.

#POINT F:
        #Opening the attachment:
        filename = title
        #Opening file in binary mode:
        attachment = open(filename, «rb»)

Шаг 12: Создайте объект MIMEBase

Здесь мы создаем объект класса с MIMEBaseименем p. Вложение MIME с типом содержимого application/octet-stream- это двоичный файл.

#POINT G:
        #Creating object of MIMEBase:
        p = MIMEBase(‘application’, ‘octet-stream’)

Шаг 13: Добавьте заголовок с именем файла

Это определяет, как мы хотим отображать контент. Здесь мы собираемся отправить изображение как вложение.

#POINT I:
        #Adding header with file name:
        p.add_header(‘Content-Disposition’, ‘attachment’, filename= title)

Шаг 14: прикрепите файл к сообщению

Теперь мы собираемся прикрепить файл к основному сообщению. Здесь мы также кодируем вложение.

#POINT J:
        #Attachment as payload:
        p.set_payload((attachment).read())
        #Encoding the payload:
        encoders.encode_base64(p)
        #Attaching the payload with message:
        message.attach(p)

Шаг 15: отправьте электронное письмо (-а)

Теперь, когда у нас есть готовый контент, мы отправляем электронное письмо с помощью SMTP-сервера. Здесь я использую номер порта 587 и Gmail. Мы также используем Transport Layer Security (TLS) при отправке электронной почты.

Затем мы даем наш адрес электронной почты и пароль для входа в учетную запись Gmail. Затем мы конвертируем все сообщение в строку. Наконец, мы отправляем электронное письмо с помощью sendmail()функции. После отправки электронного письма мы собираемся завершить сеанс, используя s.quit().

Вы должны увидеть сообщение: «Электронное письмо успешно отправлено!»

#POINT K:
        #Create smtp server:
        s = smtplib.SMTP(‘smtp.gmail.com’, 587)
        #Start TLS for security:
        s.starttls()
        #Credentials authentication:
        s.login(from_addr, password = «Test_Password#011»)
        # Converts the Multipart msg into a string
        text = message.as_string()
        # sending the mail
        s.sendmail(from_addr, to_addr, text)
        # terminating the session
        s.quit()
        print(«Email sent successfully!»)

Шаг 16. Изображение недоступно

Если файл изображения недоступен для загрузки, электронное письмо не будет отправлено. Мы просто напечатаем сообщение «Изображение недоступно».

else:
    print(«Sorry Image not available!»)
    print(«Email not sent!»)
    print(apod[«url»])

Окончательный результат

Если файл изображения недоступен для загрузки, электронное письмо не будет отправлено

Вы можете загрузить и запустить указанный выше файл кода в Интернете на сайте Google Collaboratory.

Как отправить картинку с даты ввода

Теперь, если мы хотим отправить изображение для определенной даты, нам просто нужно получить дату от пользователя. Остальные шаги точно такие же.

#Import required libraries:
import nasapy
from datetime import datetime
import urllib.request
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
#Initialize Nasa class by creating an object:
nasa = nasapy.Nasa(key=»523p5hPYHGzafYGLCkqa54kKMTV2vbP0XcPxkcLm»)
#Get today’s date in YYYY-MM-DD format:
d = input(«Enter date in YYYY-MM-DD format : «)
#Get the image information:
apod = nasa.picture_of_the_day(date=d, hd=True)
#file name of the image:
title = d+»_»+apod[«title»].replace(» «,»_»).replace(«:»,»_»)+».jpg»
#Downloading file only if it’s image:
if apod[‘media_type’] == ‘image’:
        #Downloading the image:
        if ‘hdurl’ in apod.keys():
            urllib.request.urlretrieve(url = apod[«hdurl»] , filename = title)
        else:
            urllib.request.urlretrieve(url = apod[«url»] , filename = title)
        #Sending email:
        #Email addresses:
        from_addr = «sppratik22@gmail.com»
        to_addr = [«shuklapratik22@gmail.com»]
        #create an instance of MIMEMultipart():
        message = MIMEMultipart()
        #Subject of the email:
        message[‘Subject’] = apod[«title»]
        #Body of the email:
        body = «Hello, This is an automatic email by Pratik Shukla.\n\n\n» + apod[«explanation»]
        #Attaching the text in body:
        message.attach(MIMEText(body, ‘plain’))
        #Opening the attachment:
        filename = title
        #Opening file in binary mode:
        attachment = open(filename, «rb»)
        #Creating object of MIMEBase:
        p = MIMEBase(‘application’, ‘octet-stream’)
        #Adding header with file name:
        p.add_header(‘Content-Disposition’, ‘attachment’, filename= title)
        #Attachment as payload:
        p.set_payload((attachment).read())
        #Encoding the payload:
        encoders.encode_base64(p)
        #Attaching the payload with message:
        message.attach(p)
        #Create smtp server:
        s = smtplib.SMTP(‘smtp.gmail.com’, 587)
        #Start TLS for security
        s.starttls()
        #Credentials authentication
        s.login(from_addr, password = «Test_Password#011»)
        #Converts the Multipart msg into a string
        text = message.as_string()
        #Sending the mail
        s.sendmail(from_addr, to_addr, text)
        #Terminating the session
        s.quit()
        print(«Email sent successfully!»)
#If media file is not image:
else:
    print(«Image not available!»)
    print(«Email not sent!»)
    print(«Please enter some other date!!»)

Вывод из приведенного выше кода

Теперь, если мы хотим отправить изображение для определенной даты

Вы можете запустить и загрузить приведенный выше код в Интернете на сайте Google Collaboratory.

Как отправить случайную астрономическую картинку

В последнем уроке мы использовали date_range()функцию для отправки 5 изображений. Теперь мы выберем случайное изображение из загруженных изображений и отправим его по электронной почте.

Теперь мы собираемся немного изменить код. Вместо того, чтобы отправлять объяснение изображения, мы собираемся отправить случайную цитату по астрономии из файла csv.

Обратите внимание, что большая часть кода остается такой же, как и в предыдущем руководстве. Итак, здесь мы обсудим только те части кода, которые отличаются от предыдущего кода.

Шаг 1. Импортируйте библиотеки

#Import required libraries:
import nasapy
import random
import os
import pandas as pd
from datetime import datetime
import urllib.request
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
  • os: Чтобы получить файлы из определенного каталога.
  • pandas: Чтобы прочитать файл csv.
  • random: Для случайного выбора изображения и цитаты.
Читайте также:  Как интегрировать платежный шлюз: краткое руководство?

Шаг 2. Выбор цитаты по астрономии

Мы собираемся прочитать файл csv в переменной с именем data. В данных есть все кавычки с их порядковыми номерами. Теперь мы собираемся случайным образом выбрать число от 1 до len(data).

Теперь мы найдем цитату при этом значении индекса. Это дает нам переменную для цитаты. Помните, что мы собираемся использовать эту цитату в основной части электронного письма.

#Read the csv file to get a quote:
data = pd.read_csv(«Astronomy_Quotes — Sheet1.csv»)
#Selecting a quote index at random:
quote_index = random.randint(1,len(data)-1)
#Selecting a quote based on quote index:
Quote = data[«Quote»][quote_index]

Шаг 3. Получение местоположения изображения

Наши изображения хранятся в формате AAA_Images_1 folder. Мы получаем все файлы, доступные там, в списке с именем astro_images. Мы можем получить доступ к изображениям как к элементам списка.

#Image Directory:
image_dir = «AAA_Images_1»
#List of images in directory:
astro_images = os.listdir(image_dir)

Шаг 4: выберите случайное изображение

Теперь мы собираемся выбрать изображение случайным образом. В astro_imagesпеременной есть список всех изображений, поэтому мы будем случайным образом выбиратьnthп т чизображение из списка доступных изображений. Мы будем использовать заголовок / имя файла в качестве темы электронного письма позже в этом руководстве.

#Random number to select an image:
n = random.randint(0,len(astro_images)-1)
#File name of the image:
title = astro_images[n]
print(title)

Шаг 5. Отправка электронного письма

Здесь мы собираемся внести несколько изменений в наш предыдущий код.

а) В теле мы добавляем случайную цитату вместо объяснения изображения.

б) Заглядываем в каталог в поисках изображения для прикрепления.

Взгляните на полный код ниже!

#Import required libraries:
import nasapy
import random
import os
import pandas as pd
from datetime import datetime
import urllib.request
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
#Read the csv file to get a quote:
data = pd.read_csv(«Astronomy_Quotes — Sheet1.csv»)
#Selecting a quote index at random:
quote_index = random.randint(1,len(data)-1)
#Selecting a quote based on quote index:
Quote = data[«Quote»][quote_index]
#Image Directory»
image_dir = «AAA_Images_1»
#List of images in directory:
astro_images = os.listdir(image_dir)
#Random number to select an image:
n = random.randint(0,len(astro_images)-1)
#File name of the image:
title = astro_images[n]
print(title)
#Email addresses:
from_addr = ‘sppratik22@gmail.com’
to_addr = [‘shuklapratik22@gmail.com’]
#Creating an object of MIMEMultipart():
message = MIMEMultipart()
#Subject of the email:
message[‘Subject’] = title
#Body of the email:
body = «Hello, This is an automatic email generated using python by Pratik Shukla.\n\n» +»Here’s an astronomy quote for you:\n\n» + Quote
#Attaching the text in body:
message.attach(MIMEText(body, ‘plain’))
#Opening the attachment:
filename = os.path.join(image_dir,astro_images[n])
#Opening file in binary mode:
attachment = open(filename, «rb»)
#Creating object of MIMEBase:
p = MIMEBase(‘application’, ‘octet-stream’)
#Adding header with file name:
p.add_header(‘Content-Disposition’, ‘attachment’, filename= title)
#Attachment as payload:
p.set_payload((attachment).read())
#Encoding the payload:
encoders.encode_base64(p)
#Attaching the payload with message:
message.attach(p)
#Create smtp server:
s = smtplib.SMTP(‘smtp.gmail.com’, 587)
#Start TLS for security:
s.starttls()
#Credential authentication:
s.login(from_addr, password = «Test_Password#011»)
#Converts the Multipart msg into a string:
text = message.as_string()
#Sending the mail
s.sendmail(from_addr,to_addr, text)
#Terminating the session
s.quit()
print(«Email sent successfully!»)

Вывод кода выше

Здесь мы собираемся внести несколько изменений в наш предыдущий код

Вы можете загрузить и запустить указанный выше файл кода в Интернете на сайте Google Collaboratory.

Как автоматически отправлять астрономические изображения

Выше узнали, как отправлять изображения по электронной почте с помощью скриптов Python. Но что, если мы сможем автоматизировать этот процесс? Давайте посмотрим, как автоматизировать эти сценарии с помощью планировщика задач на Python.

Для этого вам не потребуется дополнительная загрузка какого-либо программного обеспечения. Мы будем использовать встроенный планировщик задач, предоставляемый операционной системой Windows.

Мы собираемся использовать последнюю часть нашего предыдущего руководства, чтобы отправить электронное письмо. Но на этот раз наш скрипт кода будет работать сам по себе!

Шаг 1. Подготовьте скрипт Python

Для запуска кода нам нужен скрипт python в.pyформате. Если вы используете блокнот jupyter, вы можете легко скачать его из раздела «Файл».

Подготовьте скрипт Python

Шаг 2. Открытие планировщика задач

Зайдите в планировщик задач. выполнив следующие действия:

Панель управления ⇒ Администрирование ⇒ Планировщик заданий.

Если дважды щелкнуть значок планировщика задач, вы увидите следующий экран.

Если дважды щелкнуть значок планировщика задач, вы увидите следующий экран

Шаг 3: Создание задачи

Теперь создадим задачу. Чтобы создать новую задачу, нажмите на опцию «Создать задачу», как показано ниже.

Чтобы создать новую задачу, нажмите на опцию

Теперь, когда вы нажмете на опцию «Создать задачу», откроется окно с запросом более подробной информации. Во-первых, вы должны присвоить имя вашей задаче. Мы можем написать здесь все, что захотим. После этого мы также можем добавить описание нашей задачи. Это полезно, когда нам нужно запланировать много задач. После этого нажмите кнопку «ОК».

Шаг 4. Вкладка «Действия»

Теперь перейдите на вкладку «Действия». Нажимаем на кнопку «Создать», чтобы создать новое действие. Действие в основном определяет задачу, которую мы хотим запланировать.

Нажимаем на кнопку «Создать», чтобы создать новое действие

После нажатия на кнопку New откроется окно. Здесь в текстовом поле Program / Script мы должны добавить полный путь, по которому находится наш python.exeфайл. Затем мы добавим имя файла, которое хотим запустить (.py). Затем мы добавим путь, ведущий к файлу python.

Шаг 5. Установка времени для действия

Затем перейдите на вкладку «Триггеры». Здесь мы должны упомянуть, что только что созданное действие будет запущено в какое время. Укажите время и дату, когда мы хотим запустить наше действие.

Затем перейдите на вкладку «Триггеры»

Выход процесса

Когда придет время, наш файл выполнится, и если он потребует ввода от пользователя, вы должны скормить его этим вводом.

Обратите внимание, что наш планировщик задач выполнил программу в 23:00, и мы получили почту в то же время.

Обратите внимание, что наш планировщик задач выполнил программу

Заключение

Поздравляем с завершением этого веселого задания с НАСА, планировщиками задач и Python. Я надеюсь, что это упражнение научило вас некоторым новым вещам, которые вы можете делать с Python, и вдохновило вас на дальнейшее обучение.

Оцените статью
bestprogrammer.ru
Добавить комментарий