Şimdi burada yapacağımız işlem şudur, iphone macbook kullanıcıları bilir, iphone ile mac i birbirine senkronize ettiğinizde iphone unuza gelen sms leri macbook üzerinden cevaplayabilirsiniz.
Bende geçen gece otururken neden android kullanıcılarıda aynısını yapamasın demiştim, özellikle pc de işlerimizle ilgilenirken sürekli telefona bakmak can sıkıcı olabiliyor.
Bende bunun için en kolay yöntem olan python (qpython3) ile telefonda ufak bir script yazdım , bilgisayarda da bunu karşılayacak başka bir script yazdım. Aslında deneme amaçlı yaptığım için sms gönderme ve alma işlemlerini ayrı ayrı scriptlerde yaptım , birleştirecektim fakat birleştirmedim sebebini birazdan anlatacağım.
Öncelikle projede yaptığımız işlem şu , android uygulaması yazan arkadaşlar bilir , sms - arama - alarm vs gibi işlemleri dinlemek için androidin broadcast listener ı vardır. Bu sınıfı extend edip amacınıza göre kullanırsınız. Ama maalesef python için böyle bir şey yok, pythonda anlık olarak gelme bilgisini alamıyorsunuz , bunu farklı bir yolla çözdüm.
Ama pythonun bu işlem için eksik kalmasının tek sebebi bu da değil , android 6 dan kaynaklanıyor olsa gerek , sms i okundu olarak işaretleyemiyoruz , aslında bunun fonksiyonu var fakat çalışmıyor.
Ve bir diğer eksik ise gene android 6 dan kaynaklı ''olabilir'' python scriptini backgroundda çalışıtramıyoruz , console ekranı açık kalmak zorunda ki bu da istenmeyecek bir durum.
Bunlar dışında bütün işlemi bilgisayarınızdan yaparken ,telefonunuzun ekranıda console açık olması sizler için pekte sorun olmayabilir.
Şimdi gelelim programın çalışma mantığına :
- Python scripti ''okunmamış sms sayısını'' sonsuz bir döngüde kontrol ediyor, eğer okunmamış sms sayısı 0 dan büyük olursa socket bağlantısı kurarak bu sms i pc ye gönderiyor
- Sms i okundu olarak işaretleyemediğimizden dolayı sürekli aynı sms i pc ye göndermemek için pc ye gönderdiğimiz sms in id sini bir dizide tutuyoruz ve eğer döngüde kontrol edilen sms id si bu dizide yoksa sms i pc ye gönderiyoruz.
(Bu yazıyı yazarken scripti biraz daha geliştirdim, gönderme ve alma işlemini tek scriptte hallettim aslında bu işlemi size bırakacaktım fakat basit anlamda thread kullanımınıda göstermiş olayım)
- Scriptimiz 2 parça olacak, sms gönderme işlevini yapan, ve sms alma işlevini yapan şeklinde.
Şimdi gelelim scriptimizin parça parça kodlanmasına :
-----ANDROID TELEFONUMUZDA Kİ KISIM-----
öncelikle gerekli kütüphanelerimizi import ediyoruz ve android nesnemizi oluşturuyoruz
Kod:
import android , socket, threading ,json
droid = android.Android()
altınada server socketimizi oluşturuyoruz
Kod:
host = '192.168.0.x'
port = 4595
#client (bilgisayara bağlanacak) socketimiz
sock = socket.socket()
sock.connect((host,port))
#server (bilgisayardan sms alacak) socketimiz
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('',2595))
Kod:
def cevapBekle():
server.listen(5);
while True:
client,address = server.accept()
gelen = client.recv(1024)
if gelen:
msj = json_dumps(gelen.decode('utf-8'))
print('numara : ' + msj['numara'] + ' msj : ' + msj['msj'])
droid.smsSend(msj['numara'],msj['msj']);
client.close()
Kod:
threading.Thread(target=cevapBekle)
Kod:
gelen_id = droid.smsGetMessageIds(True,'inbox') #gelen kutusundaki okunmamış sms lerin id lerini alıyoruz. Eğer False deseydik okunmuş smslerin id lerini alırdık
okunanlar = [] #bir kere bilgisayara gönderdiğimiz sms i tekrar göndermemek için okunan sms lerin listesini bir dizide tutuyoruz
while len(gelen_id) > 0:
for id in gelen_id:
if id not in okunanlar:
msj = droid.smsGetMessageById(id,['address','body']) #okunmamış sms in gönderen bilgisini ve msj içeriğini alıyoruz
sock.sendall(str(msj[1]).encode()) #sms i bilgisayara gönderiyoruz
okunanlar.append(id) #sms i okunanlar listesine alıyoruz
-----Bilgisayar için olan kodlar-----
Sms almak için
Kod:
import socket
s = socket.socket()
port = 4595
#host = socket.gethostname()
host = ''
s.bind((host,port))
s.listen(1)
while True:
c,addr = s.accept()
print 'got connection from' , addr
gelen = c.recv(2048)
while (gelen):
print gelen
gelen = c.recv(2048)
c.close()
Kod:
import socket,json
s = socket.socket()
port = 2595
host = '192.168.0.16'
s.connect((host,port))
cevap = {'numara':'1234','msj':'adsfsadf'}
s.sendall(json.dumps(cevap).encode('utf-8'));
s.close();


Aslında bu script çok daha geliştirilebilir, örneğin ufak bir gui yapıp telefondaki rehberi oraya gönderip numarayı elle yazmak yerine ufak mouse hareketleriyle bu işlemi yapabilirsiniz.
Ben size yazdığım kodun büyük bir çoğunluğunu veriyorum.
Bende bu uygulamayı android için java ile baştan yazıyorum. Çünkü broadcast listener lazım , socketlerin arkaplanda çalışması için service lazım. Uygulamayı yazıp android markette yayınlayacağım inşaAllah.
Ve bilgisayar için olanı da java ile tekrardan yazacağım, aslında bir kısmını yazdım, notification ekranı ve rehber olayı gibi ayrıntılar kaldı.
Bu scripti python sevenler kullanır, parametrik hale getirebilir rahatlıkla. Hatta sl4a yı birazcık kurcalayarak hali hazırda size verdiğim kodlara bir kaç ekleme yaparak rehberinizdeki numaraları bilgisayar aktarıp ufak bir gui sayesinde notification veya benzeri bir şey uygulayıp rahatlıkla pc den mesajlaşabilirsiniz.
Ayrıca pc ye aktarılan mesajları scripti açıp kapattığınızda kaybolmamsı için ''gonderilenler'' isimli diziyi bir dosyaya kaydedip tekrar okutabilirsiniz.
konu notları : telefonunuz ve bilgisayarınız aynı ağa bağlı olmalıdır, ve ip bilgisine kendi ip nizi yazmalısınız. telefonunuzda bu scripti çalıştırmak için qpython3 yüklü olmalıdır , apk sını internetten rahatlıkla bulabilirsiniz.
Güzel bir eğitim yazısı olduğunu düşünüyorum, artık bilgisayarınızdan sms gönderip alabilirsiniz, hepinize hayırlı olsun.
0 yorum :
Yorum Gönder