Pernahkah Anda berada dalam posisi di mana Anda sedang menunggu model machine learning Anda selesai dan perlu pergi ke suatu tempat? Atau Anda sedang mengerjakan tugas lain dan terus-menerus berpikir apakah script Anda telah berhasil berjalan atau tidak? Saya pernah berada dalam posisi itu sebelumnya, dan itulah sebabnya saya membuat sistem notifikasi otomatis ke email saya menggunakan Python.
Dalam artikel ini, saya akan menjelaskan cara membuat sistem automasi dengan Python dalam beberapa langkah sederhana. Mari kita mulai.
Email Preparation
Kali ini saya akan menggunakan sistem email dari Gmail. Yang perlu kita lakukan pertama adalah menyiapkan Gmail API dari Google API Console. Di dasbor developer, pilih ENABLE APIS AND SERVICES.
Dari sini, coba ketik dan cari Gmail API.
Pada pilihan Gmail API, klik ENABLE untuk mengaktifkan Gmail API.
Setelah selesai, kita perlu membuat kredensial untuk mengakses email dan mengirim notifikasi menggunakan Gmail.
Pilih OAuth client ID, dan ketika ditanya Application Type, karena saya menggunakan Jupyter Notebook untuk menjalankan skrip saya, maka saya akan memilih Aplikasi Desktop.
Anda bisa beri nama file ini sesuai keinginan, disini saya beri nama file ini menjadi gmail_python. Setelah selesai membuat kredensial, Anda perlu mengunduhnya dalam bentuk JSON. Sebaiknya Anda mengganti nama file tersebut menjadi “credentials.json”.
Letakkan file ini pada folder yang sama dengan scrip atau Jupyter Notebook.
Membuat Sistem Notifikasi
Sistem email akan didasarkan pada rekomendasi yang diberikan oleh Google Gmail API untuk mengirim email. Saya juga akan menggunakan email module untuk membantu membangun sistem pengiriman email.
Pertama, mari kita buat fungsi untuk membuat pesan.
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import base64
import os
def create_message(sender, to, subject, message_text):
"""Create a message for an email.
Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.
Returns:
An object containing a base64url encoded email object.
"""
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}
Kemudian kita membuat fungsi untuk mengirim pesan.
def send_message(service, user_id, message):
"""Send an email message.
Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
message: Message to be sent.
Returns:
Sent Message.
"""
try:
message = (service.users().messages().send(userId=user_id, body=message)
.execute())
print('Message Id: {}'.format(message['id']))
return message
except:
print ('An error occurred')
Sekarang kita telah memiliki dua fungsi untuk membuat pesan dan mengirim email. Untuk langkah selanjutnya, mari kita buat fungsi untuk mengotomatiskan sistem notifikasi. Di sini kita memerlukan kredensial yang dibuat sebelumnya dari Google Gmail API. Di sini, saya mengatur sistem saya untuk menggunakan file JSON kredensial sebagai ‘credentials.json’.
def notification(sender, to, subject, notification):
#Sender is the sender email, to is the receiver email, subject is the email subject, and notification is the email body message. All the text is str object.
SCOPES = 'https://mail.google.com/'
message = create_message(sender, to, subject, notification)
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
#We use login if no valid credentials
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('gmail', 'v1', credentials=creds)
send_message(service, sender, message)
Fungsi notifikasi kita sudah siap, kita bisa mencoba untuk mengirim notifikasinya. Sebagai contoh, saya akan mencoba mempelajari model machine learning di bawah ini.
import seaborn as sns
import pandas as pd
from sklearn.linear_model import LinearRegression
#Loading the dataset and only using the numerical variables
mpg = sns.load_dataset('mpg').drop(['origin', 'name'], axis = 1)
linear_model = LinearRegression()
try:
#Training the model
linear_model.fit(mpg.drop('mpg', axis =1), mpg['mpg'])
notification('test1@gmail.com', 'test2@gmail.com', 'Notification - Success Training', 'The model has finish')
except:
notification('test1@gmail.com', 'test2@gmail.com', 'Notification - Failed Training', 'The model encountered error')
Sekarang saya mendapatkan notifikasi ketika training telah selesai atau jika terjadi error. Data yang kami gunakan untuk pelatihan di atas mengandung nilai NaN, sehingga jelas akan menyebabkan kesalahan. Meskipun demikian, poin saya adalah kita sekarang bisa membuat sistem notifikasi untuk email.
Kesimpulan
Dalam artikel ini, saya telah menunjukkan kepada Anda bagaimana membuat sistem notifikasi sederhana untuk email Anda menggunakan Python. Anda dapat memodifikasi sistem ini sesuai keinginan Anda.
Comments