-Bu telefona gelen sms doğrulamalar nasıl işliyor çalışıyor?
Paragrafımı çok uzun utmadan konuya giriş yapıcam yapmadan önce de şu Twilio nedir neyin nedisir ne işe yarar ondan bahsedeyim.
Bize çeşitli programlama dilleri aracılığı ile telefonumuza API olanağı tanıyan Twilio; sms, sesli mesaj, whatsapp mesajı atabilmemize olanak tanıyan bir şirket.
Wikipedia'da ise şöyle geçiyor: "Twilio, telefon görüşmeleri yapmak ve almak, metin mesajları göndermek ve almak ve web hizmeti API'lerini kullanarak diğer iletişim işlevlerini gerçekleştirmek için programlanabilir iletişim araçları sağlayan San Francisco, California merkezli bir Amerikan şirketidir."
Artık Twilioyu tanıdığımıza göre sitesine girip başlayabiliriz.
Yapmanız gereken ilk şey siteye kayıt olmak
- Nasıl kayıt olurum?
+ Google'a sor
Gerekli adımları tamamladıktan sonra Bizlere sistem tarafından verilen bilgiler şöyle:
-Account SID
-Auth Token
-My Twilio phone number
Para vermeden ücretsiz versiyonunu kullanacağımız için yaptığımız işlemler yalnızca kendi telefon numaramızda gerçekleşecek. Bu kısıtlamayı kaldırmak için belirli ücret vermeniz gerekiyor. (Bu kaynakta da açıklanmış.)
Başlamadan belirtmem gerekiyor Twilioya ait twilio.py kütüphanesini de projeye dahil etmeniz gerekiyor. Dahil etmek için de sizde bulunması gerekiyor. Bulunması için de....
Bizde yapacağımız uygulamada para vermeyeceğimiz için (trial version) kendi numaramızı kullanacağız.
Eğer yazılan kod doğru ise karşımıza yeni bir pencere çıkıyor. Ve bunu her saniye kontrol ettiğinden yanlış ya da eksik yazıldığında yeni bir pencere açılmıyor. Verilen süre içerisinde de yazmanız gerekiyor. (bunda çok fazla ilgilenmedim hata bug vs olursa zaten siz düzeltirsiniz
Yazdığım koda geliyorum:
Python:
import tkinter as tk
from twilio.rest import Client
import random
from time import sleep
import threading
__AUTHOR__ = "Helmsys"
cipher = "" # oluşturulan doğrulama kodunun tutulduğu değişken
count = 120
class Main(tk.Tk):
def __init__(self,sid,token):
super(Main,self).__init__()
self.tkWindow()
self.sid = sid
self.token = token
self.r = random.randint(300000,350000) # üç yüz bin ile üç yüz elli bin arasında rastgele sayı oluşturuyorum
def tkWindow(self):
self.geometry("300x300")
tk.Label(self,text="Kod Doğrula",font=("arial",15,"bold")).pack()
self.time = tk.Label(self,text="0 saniye")
self.time.place(x=240)
self.var = tk.StringVar()
self.e1 = tk.Entry(self,font=("arial",12,"bold"),justify="center",textvariable=self.var)
self.e1.pack()
self.sendButton = tk.Button(self,text="Kod gönder",command=lambda: threading.Thread(target=self.send).start())
self.sendButton.pack()
def topLevel(self):
self.tl = tk.Toplevel()
self.tl.geometry("300x400")
self.tl.title("Sayfa")
tk.Label(self.tl,text="Hoşgeldiniz !",font=("arial",15,"italic")).pack()
def settings(self):
if len(self.var.get()) == 6:
if cipher == self.var.get():
print("doğru kod")
self.topLevel()
return True
else:
return False
return None
def whileLoop(self): # count olarak belirttiğim değişkenin değeri 120 yani 2dk =)
global count # bu while döngüsü çeşitlendirilebilir o sizin hayal gücünüze kalmış =)
while count > 0:
sleep(1)
count -= 1
self.time.config(text=str(count)+" saniye")
if count == 0:
self.sendButton["state"] = "normal"
self.time.config(text="0 saniye")
break
else:
if self.settings(): # eğer settings methodu True değer döndürürse
self.sendButton["state"] = "normal"
self.time.destroy()
break
def send(self):
self.sendButton["state"] = "disabled"
self.twilio()
threading.Thread(target=self.whileLoop()).start()
def twilio(self): # api nin bulunduğu method
global cipher
client = Client(self.sid, self.token) # dışardan aldığım bilgileri burada kullanıyorum
message = client.messages.create(
body=f'Doğrulama kodun {self.r}', # random olarak üretilen sayıyı buraya yazıyorum
from_='twilio_number', # twilio apiden alınan numara
to='+90_numaranız' # kendi numaranız
)
for i in message.fetch().body.split(" - ")[1]: # mesajı yakalayıp split ile ikiye ayırıyoruz. ayırdıktan sonra ikinci elemanda for döngüsü ile dolaşıyoruz
if i.isdigit(): # eğer i değişkeni ikinci elemanda bir sayıya denk gelirse
cipher += i # gelen sayıları cipher adlı değişkene kaydediyoruz
cipher.strip() # önünde ve sonunda bir boşluk varsa onları kaldırıyoruz
tk.Label(self,text="Kod Gönderildi!",font=("arial",15,"bold")).pack()
return cipher # fonksiyondan bu değeri döndürüyoruz ( yazmasakta olur test ederken kaldırmamışım =) )
if __name__ == "__main__":
account_sid = 'TWILIO_ACCOUNT_SID'
auth_token = 'TWILIO_AUTH_TOKEN'
Main(sid=account_sid,token=auth_token).mainloop()
Yazdığım kodda anlaşılmayan yer varsa lütfen belirtin...
Hoşçakalın....
Hoşçakalın....
Son düzenleme:






