Рубрики
Без рубрики

Написание простого приложения для напоминания напоминания SMS для абсолютных отсутствующих людей, таких как я.

Простое SMS напоминание. Теги с Python, Telstraapi, SMS, расписание.

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

Наконец я собрал мужество в моих праздниках Uni, чтобы написать то, что абсолютно в его простейшей форме и ударила в самую ценную зону активации человека; SMS текст. Поэтому я постараюсь написать простую программу, которая отправляет мне SMS в определенные дни со специальным сообщением.

Для этого я буду использовать Telstra SMS API Отказ Это дает нам 1000 бесплатных SMS, которые достаточно для меня, так как я посылаю максимум всего 2 смс в неделю, это всего около 104 смс в год. Я также буду использовать Python Расписание Модуль, чтобы помочь мне управлять моими расписаниями. Так что давайте начнем!

Прежде всего, давайте импортируем все необходимые вещи:

from __future__ import print_function
import time
import Telstra_Messaging
from Telstra_Messaging.rest import ApiException
from datetime import datetime

Теперь давайте установим Telstra SMS API:

class SMSender():
    client_id = 'your_client_id' # str | 
    client_secret = 'your_client_secret' # str | 
    grant_type = 'client_credentials' # str |  (default to 'client_credentials')

    def __init__(self):
        self.configuration = Telstra_Messaging.Configuration()

    def authenticate_client(self):
        api_instance = Telstra_Messaging.AuthenticationApi(Telstra_Messaging.ApiClient(self.configuration))

        try:
            # Generate OAuth2 token
            self.api_response = api_instance.auth_token(self.client_id, self.client_secret, self.grant_type)

        except ApiException as e:
            print("Exception when calling AuthenticationApi->auth_token: %s\n" % e)

    def provision_client(self):
        self.configuration.access_token = self.api_response.access_token
        api_instance = Telstra_Messaging.ProvisioningApi(Telstra_Messaging.ApiClient(self.configuration))
        provision_number_request = Telstra_Messaging.ProvisionNumberRequest() 

        try:
            # Create Subscription
            api_response = api_instance.create_subscription(provision_number_request)
            api_response = api_instance.get_subscription()

        except ApiException as e:
            print("Exception when calling ProvisioningApi->create_subscription: %s\n" % e)

    def send_sms(self, msg_to, msg_body):
        api_instance = Telstra_Messaging.MessagingApi(Telstra_Messaging.ApiClient(self.configuration))
        send_sms_request = Telstra_Messaging.SendSMSRequest(to=msg_to, body=msg_body)

        try:
            # Send SMS
            api_response = api_instance.send_sms(send_sms_request)
            return True

        except ApiException as e:
            print("Exception when calling MessagingApi->send_sms: %s\n" % e)

Как видите, каждая функция делает конкретную работу.

authenticate_client
provision_client
send_sms

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

У нас будет 3 функции для этой части. Первый – add_repeat_seate:

def add_repeat_sequence(self, date_from=datetime.today(),\
         repeat_after_days=1, at_time="09:30", msg="This is your alarm!!", to="0444444444"):


        right_now = int(datetime.today().timestamp())
        date_from = int(date_from.timestamp())

        if date_from < today:
            raise ValueError("date_from cannot be before right_now")
        else:
            time_diff = date_from - right_now

            t = Timer(time_diff, self.set_alarm, [repeat_after_days, at_time, msg, to])
            t.start()

Эта функция состоит в том, чтобы в основном установить тревогу на указанную дату, заданную «DATE_FROM». После завершения нашего таймера выполняется функция «SET_ALARM» с параметрами, указанными в списке.

Теперь мы напишем функцию «Set_Alarm», которая передается в параметре таймера. Эта функция будет вызвана, когда наша дата настройки таймера подошла.

    def set_alarm(self, day_diff, time_alarm, msg, to):

        self.send_alarm(msg, to)

        if day_diff <= 1:
            schedule.every().day.at(time_alarm).do(self.send_alarm, msg, to)
        else:
            schedule.every(day_diff).days.at(time_alarm).do(self.send_alarm, msg, to)

Здесь out out_alarm в основном используют нашу пакет «расписание», чтобы повторить таймер в определенные дни интервал.

Наконец, «send_alarm», используемый «set_alarm», используется для отправки фактического сообщения:

    def send_alarm(self, msg, to):
        sender = SMSender()
        sender.authenticate_client()
        sender.provision_client()
        sender.send_sms(to, msg)
        print("Alarm successfully sent!")

Send_alarm использует ранее закодированный SMSender для отправки сообщения. Наконец оберните эти три функции в класс повторителя, и это так!

Наконец наша главная функция выглядит как:

if __name__ == "__main__":

    repeat = Repeater()
    starting_date = datetime.today()
    repeat.add_repeat_sequence(date_from=starting_date, repeat_after_days=14, msg="Heyaaaaa!", \
        to="+61444444444")


    while True:
        schedule.run_pending()
        time.sleep(1)

Это успешно отправит нам “Heyaaaaaa!” Каждые 14 дней начиная сегодня.

Надеюсь, вам понравился пост. Это только простой скелет, чтобы обеспечить цик. Есть еще много места для правильной проверки ошибок, тестирование кода и хорошего дизайна кода. Не стесняйтесь менять код любым способом, которым вы окажетесь, используя его! Все, что вам нужно сделать, это запустить его на сервере где-то, где он может бегать бесперебойным.

Большое спасибо!

Вы можете найти полную версию кода Здесь в моем Github.

Оригинал: “https://dev.to/emalp/writing-a-simple-sms-sending-reminder-app-for-absolute-absent-minded-people-like-me-4gc3”