Python ile anımsatıcı yapma

Arkadaşlar merhaba anımsatıcı yapmak istiyorum fakat kafamda mantığı bir türlü oturtamıyorum o yüzden sizlere danışmak istedim. Yapmak istediğim program hatırrlamak istediğim şeyin ne olduğunu ve hangi tarihte hatırlatması gerektiğini soracak benden tarih ve text girdisi alacak ve o gün gelince bana mail atacak. Gelelim işin kafa karıştırıcı kısmına:

  1. tarihi sürekli takip etmesi için programın sürekli açık olması gerekiyor diye biliyorum bu sorunu kendimce şöyle çözmeyi düşünüyorum ben bilgisayarı açtığımda tarih kontrol etmesi için gereken py dosyası arka planda bilgisayar açık olduğu müddetçe çalışacak (çalıştığım işten dolayı sabahtan akşama kadar bilgisayar açık kalıyor) bilgisayarı açtıkça arka planda çalışan py dosyası tarihi sürekli check edecek. Ama sorun şu ki ben programa girdiğim tarihi ve mesajı kaybolmaması için ve programın sürekli görmesi için bir veritabanında mı tutmalıyım? aksi halde bilgisayar kapanınca program sıfırlanacak.

Kendimce temel mantığı oluşturabilmek adına mail fonksiyonunu oluşturdum test amaçlı dakika sayıp örneğin 1 dakika sonra mail gönder dediğimde mail atacak bir kod yazdım

import time
import smtplib
from email.message import EmailMessage


def mail():
    # mesaji oku
    with open(r'mesaj.txt') as fp:
        # olustur
        msg = EmailMessage()
        msg.set_content(fp.read())
        msg.set_charset("utf-8")

    # email bilgileri
    msg['Subject'] = 'başlık'
    msg['From'] = "mail atacak adres"
    msg['To'] = "mail gidecek adres"

    # Giriş
    s =server = smtplib.SMTP('smtp.office365.com', 587)
    s.starttls()

    s.login('maili atan e posta',"sifre")

    # Mesaj gönderir
    s.send_message(msg)
    s.quit()


print('kaç dk sonra?')
local_time = float(input())
local_time = local_time * 60
time.sleep(local_time)
mail()`
  1. Ben mail olarak atacağım mesajı yukarıdaki kodda denemek için şu şekilde çağırmıştım:
with open(r'mesaj.txt') as fp:

eğer ki veritabanı tarzı bir yere yazdırmam gerekirse bu mesajı insert edebilir miyim?

Biraz uzun oldu kusura bakmayın uzun zamandır unutkanlığımdan dolayı yapmak istediğim bir projeydi yardımcı olacak arkadaşlara şimdiden teşekkür ederim :slightly_smiling_face:

2 Beğeni

Hocam aklıma şöyle bir yöntem geldi belki size uygun değildir ama yinede aklımdakinden bahsedeyim .Programı sürekli kendi bilgisayarınızda çalıştırmak hoş olmaz bence bir yazılım geliştirip ücretsiz sunuculardan birine atıcaksınız haberleşmek içinde telegram yada wp kullanıcaksınız.wp konusuna hakim değil nasıl işlediğini bilmiyorum ama telegramda anlattığım şeyi yapmak çok basit olur .
Mail atılıcak bilgiyi ve süreyi telegramdan göndericez sunucumuzdaki program bunu işliycek ve gerekliliklerini yerine getiricek.

1 Beğeni

1- Eger tarihin kayitli olmasi gereken dosya mevcut degilse veya bossa kullanicidan tarih ve saat al, datetime objesine donustur ve timestamp olarak dosyaya kaydet.

2- Belli bir periyotta surekli tarih ve saati kayitli timestamp ile karsilastir. an >= kayitli_an

3- Kosul saglandiysa kullaniciya mail at.


Tek bir python programi ile bu sekilde yapilabilir, veya crontab kullanilabilir. Bilgisayar acik oldugu surece arkaplanda ek bir sey yapmaya gerek de kalmaz.

1 Beğeni

Neden? Bir programi kendi bilgisayarimda, kendi istedigim sartlar altinda calistirmaktan daha hos bir sey dusunemiyorum.

Tamam.

Burada surekliligi saglayan sey dosya sistemi; veriyi bir dosyada tutmak lazim. Bu dosyanin database dosyasi olmasina gerek yok, text dosyasi da olabilir.

Burada neyin soruldugunu anlamadim. Kod ornegi neyi temsil ediyor?

Veritabanina mesaj insert edebilir miyiz mi? Veritabanina gore degisir. Evet.
Veritabanindan programa mesaji insert edebilir miyiz mi? Edebiliriz tabi, veritabanindan okuma islemi yaparak.

2 Beğeni

Hocam bana gereksiz bir yük gibi geldi enazında yazılımı bilgileri alan ve mail atan olarak ikiye bölüp mail atan kısmını sunucuya atardım.Ayrıca sunucuda da kendi istediğimiz şartlar altında çalıştırabiliriz ve istediğimiz zaman ulaşabiliriz

1 Beğeni

Hocam ayrı bir sunucuda çalıştırmayı düşündüm iki türlü de olabilir diye düşünüyorum. Nasıl yani yazılımı telegrama bağlayıp bana şu tarihte şu mesajı hatırlat diye yine telegramdan mı komut veriyoruz? Geri dönüşü de telegramdan oluyor.

Basit olarak anlatıcaksam telegramda bir bot oluşturuyoruz.Bu bota gelen mesajları telegram apiyle alıyoruz bundan sonrası sana kalmış istersen anımsatıcı olarak telgramdanda mesaj gönderebilirsin istersen mail olarak atabilirsin.Telegram kulanmaktaki amacımız kullanıcıdan basit olarak isteklerini almak bir not deftderinin içindeki texti almak gibi düşünebilirsiniz

1 Beğeni

Hocam timestamp olarak kaydettiğim dosyada sadece tarihler mi olması gerekiyor? Eğer öyleyse hangi tarihte hangi mesajı anımsatması gerektiğini programa nasıl öğreteceğim?

Bu da güzel fikir denenebilir teşekkürler. Fakat önceliğim kendi arayüzümü tasarlamak.

Ne demek buarada eğer sleep kullanıcaksan asenkron fonksiyon kullanmanı taviye ederim birden fazla kullanıcı yada mesaj olucağını varsayarsak bir mesajı beklerken diğerinide alabilsin

1 Beğeni

Tarihler? Programin birden fazla tarihle mi calismasi gerekiyor? Oyleyse ben soyle bir sey yapardim:

[
    {
        "name": "Hatirlatici 1",
        "timestamp": "..."
    },
    {
        "name": "Hatirlatici 2",
        "timestamp": "..."
    }
]

Bu durumda siradan bir text dosyasi yerine json ile calisabilirsin.

1 Beğeni

Yardımcı olan herkese teşekkürler sorunu şu şekilde çözdüm :

  1. input olarak aldığım tarihi yıl/ay/gün şeklinde bölerek datetime objesine dönüştürdüm
  2. bilgisayarımdaki tarih ile input olarak aldığım ve parçalara böldüğüm tarihi birbirinden çıkarıp sonuç 0 sa mail atacak bir fonksiyon oluşturdum ve bu fonksiyonu while döngüsüne aldım
while True:
	kontrol = datetime.datetime.today()
	sonuc_yil = yil_login - kontrol.year
	sonuc_ay = ay_login - kontrol.month
	sonuc_gun = gun_login - kontrol.day
	if sonuc_yil == 0:
		if sonuc_ay == 0:
			if sonuc_gun == 0:
				mail()
				break