diff --git a/README.md b/README.md new file mode 100644 index 0000000..f5ee31d --- /dev/null +++ b/README.md @@ -0,0 +1,117 @@ +TCDD bilet yer kontrol programi sayesinde tcdd sitesine surekli girmek zorunda kalmadan, ayarlayacaginiz periyotlarla websitesinden bilet yer durumunu ogrenebilmeniz saglanmistir. + +mcagriaksoy - tcdd-bilet-yer-kontrol +GitHub tag +License +issues - tcdd-bilet-yer-kontrol +[![OS - Linux](https://img.shields.io/badge/OS-Linux-blue?logo=linux&logoColor=white)](https://www.linux.org/ "Go to Linux homepage") +[![Hosted with GH Pages](https://img.shields.io/badge/Hosted_with-GitHub_Pages-blue?logo=github&logoColor=white)](https://pages.github.com/ "Go to GitHub Pages homepage") +[![OS - Windows](https://img.shields.io/badge/OS-Windows-blue?logo=windows&logoColor=white)](https://www.microsoft.com/ "Go to Microsoft homepage") + +stars - tcdd-bilet-yer-kontrol +forks - tcdd-bilet-yer-kontrol + +## Indir + +[![Download - v2.2.1](https://img.shields.io/static/v1?label=Download&message=v2.2.1&color=2ea44f)](https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol/releases/download/v2.2.1/TCDD.Bilet.Bulma.Botu.v2.2.1.zip) + +## Versionlar +v2.2.1 +Chrome kaldirildi. Artik Edge ile tarama yapiliyor. +Seleniumdan kaynaklanan bir hata sebebiyle .exe surumu bozuldu. Gecici sureyle GUI arkasinda konsol cikacak. + +v2.2 +- [25.03.2024] Hata cikaran telegram modulu suan icin kaldirildi. +- Daha kucuk executable icin pygame kutuphanesi kucultuldu. +- Icon kaldirildi, iconu avast virus olarak tanimliyordu. :D + +v2.1 +- Eksik olan Eskisehir ili eklendi! + +v2.0 + +- Bilet bulunca ortaya cikan bir hata giderildi. +- Bilet arama algoritmasi optimize edildi. +- Koltuk sayisi hesaplama algoritmasi bastan tasarlandi. +- Ses kutuphanesi duzenlendi. Artik her denemede bir uyari sesi cikiyor. +- Bilet bulununca ortaya cikan ses calamama sorunu cozuldu. +- Eksik olan tum sehirler eklendi. 100+ durak eklendi. + +v1.7 + +- Windows destegi genisletildi! +- Calistirilabilir icerik (.exe) Eklendi! +- Telegram mesaj botu destegi eklendi. Artik bilet bulundugunda telegram uzerinden telefonuna mesaj gonderilebilecek! +- Sesli uyari butonu eklendi. +- Kod optimizasyonu yapildi. Uygulama artik daha hizli calisiyor! + +v1.6 + +- Linux, macOS destegi eklendi. +- PyLint sorunlari cozuldu. +- Dizinleme yapildi. + +v1.5 + +- Yorucu bir release +- Tüm tcdd arayüzü değiştiği için selenium tekrar configure edildi. +- tcdd sitesi bloklamasına karşı, gizli chrome araması kapatıldı, artık chrome program ile birlikte açılıyor. +- selenium hata ayarları güncellendi. +- return mekanizması eklendi, hata kodları ve butonlar güncellendi. +- durak isimleri güncellendi. +- birden fazla aramanın önüne geçebilmek için buton kilitleme işlevi eklendi. + +v1.4 + +- sesli uyarı eklendi. + +v1.3 + +- icon eklendi +- .exe düzeltildi. +- selenium performansı arttırıldı. +- loglama mekanizması düzeltildi. +- bilinen çökme sorunları çözüldü. +- yeni rotalar eklendi. + +SS: +![python_k81455g7zP](https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol/blob/master/img/screenshot.png) + +v1.1 + +- Slider eklendi. +- Bilet bulunca ortaya çıkan popup eklendi! +- Bulunan kişi sayısındaki hata giderildi. + +v1.0 + +- GUI Düzenlendi, loglama mekanizması eklendi, stdout loglara yazdırıldı. +- Yeni durak isimleri eklendi. +- Mekanizmalar yeniden düzenlendi. + +- Ocak 2023 Gelecek Güncellemeler +- .exe sürümü yayımlanacak - DONE! +- logo eklenecek. +- hatalar giderilecek. +- Bildirim sistemi güncellenecek, sms ya da e posta eklenecek. +- tcdd chapta koruması tespiti yapılacak. + +# TCDD Bilet Kontrol + +- Uygulama TCDD sitesine özel tasarlanmıştır. + +- Uygulama seçilen dakika aralıklarında (1 - 10 dk) sorgu yapmaktadır + +- Bilet bulunursa telegram uzerinden mesaj gonderebilmektedir. + +- Bilet bulunursa sesli uyari ve popup uyarisinda bulunabilmektedir. + +### Kullanımı + +```sh +$ python main.py +``` + +ya da .exe dosyasini calistirabilirsiniz. + +Buradan indirebilirsiniz: [tcddBiletYerKontrol_v2.0.zip](https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol/releases/download/v2.0/TCDD.Bilet.Bulma.Botu.v2.0.zip) diff --git a/src/Control.py b/src/Control.py index 139d289..bd3befd 100644 --- a/src/Control.py +++ b/src/Control.py @@ -41,23 +41,25 @@ def sayfa_kontrol(self): sleep(1) xpath = ('//*[@id="mainTabView:gidisSeferTablosu_data"]/tr[' f'{row}]/td[1]/span') - aranan_element = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located( + aranan_element = WebDriverWait(self.driver, 50).until(EC.visibility_of_element_located( (By.XPATH, xpath))) aranan = aranan_element.text sleep(1) if self.zaman == aranan: - message_element = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located( + message_element = WebDriverWait(self.driver, 50).until(EC.visibility_of_element_located( (By.XPATH, f'//*[@id="mainTabView:gidisSeferTablosu:{row-1}:j_idt109:0:somVagonTipiGidis1_label"]'.format(row)))) message = message_element.text - match = re.search(r'\((\d+) \)', message) + + # Search pattern of ) ( + match = re.search(r'\) \(.', message) if match is None: sys.stdout.write( "\nSayfa yüklenirken hata oluştu...") return ErrCodes.TEKRAR_DENE - koltuk_sayisi = int(match.group(1)) + koltuk_sayisi = int(match.group()[3]) if koltuk_sayisi > 2: sys.stdout.write( - f"\nBoş koltuk sayısı: {koltuk_sayisi}") + f"\nTrende yeteri kadar bos ver mevcut!") return ErrCodes.BASARILI elif koltuk_sayisi == 2 or koltuk_sayisi == 1: sys.stdout.write( diff --git a/src/DriverSetting.py b/src/DriverSetting.py index d3cc5f4..1123f94 100644 --- a/src/DriverSetting.py +++ b/src/DriverSetting.py @@ -5,11 +5,13 @@ from selenium.webdriver import Edge from selenium.webdriver.edge.service import Service as EdgeService from webdriver_manager.microsoft import EdgeChromiumDriverManager - +from selenium.webdriver.edge.options import Options as EdgeOptions class DriverSetting: """Driver'ı ayarlar.""" def driver_init(self): - driver = Edge(service=EdgeService(EdgeChromiumDriverManager().install())) + options = EdgeOptions() + options.add_experimental_option('excludeSwitches', ['enable-logging']) + driver = Edge(service=EdgeService(EdgeChromiumDriverManager().install()), options=options) return driver diff --git a/src/__pycache__/Control.cpython-311.pyc b/src/__pycache__/Control.cpython-311.pyc new file mode 100644 index 0000000..c00e35f Binary files /dev/null and b/src/__pycache__/Control.cpython-311.pyc differ diff --git a/src/__pycache__/DriverGet.cpython-311.pyc b/src/__pycache__/DriverGet.cpython-311.pyc new file mode 100644 index 0000000..423cf7e Binary files /dev/null and b/src/__pycache__/DriverGet.cpython-311.pyc differ diff --git a/src/__pycache__/DriverSetting.cpython-311.pyc b/src/__pycache__/DriverSetting.cpython-311.pyc new file mode 100644 index 0000000..0e7eed8 Binary files /dev/null and b/src/__pycache__/DriverSetting.cpython-311.pyc differ diff --git a/src/__pycache__/Rota.cpython-311.pyc b/src/__pycache__/Rota.cpython-311.pyc new file mode 100644 index 0000000..d1e97f4 Binary files /dev/null and b/src/__pycache__/Rota.cpython-311.pyc differ diff --git a/src/__pycache__/Sehirler.cpython-311.pyc b/src/__pycache__/Sehirler.cpython-311.pyc new file mode 100644 index 0000000..e909160 Binary files /dev/null and b/src/__pycache__/Sehirler.cpython-311.pyc differ diff --git a/src/__pycache__/error_codes.cpython-311.pyc b/src/__pycache__/error_codes.cpython-311.pyc new file mode 100644 index 0000000..6fdd56e Binary files /dev/null and b/src/__pycache__/error_codes.cpython-311.pyc differ diff --git a/src/__pycache__/ui.cpython-311.pyc b/src/__pycache__/ui.cpython-311.pyc new file mode 100644 index 0000000..3939ebf Binary files /dev/null and b/src/__pycache__/ui.cpython-311.pyc differ diff --git a/src/requirements.txt b/src/requirements.txt index 8e0f5f0..47afe93 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,4 +1,4 @@ -pygame==2.5.2 PySimpleGUI==4.60.5 selenium==4.18.1 webdriver_manager==4.0.1 +python-dotenv==1.0.1 diff --git a/src/ui.py b/src/ui.py index 045d050..adb54b7 100644 --- a/src/ui.py +++ b/src/ui.py @@ -5,12 +5,13 @@ """ from os import path, system -from sys import platform +import platform from datetime import date, datetime from time import sleep from threading import Thread -from pygame import mixer -from pygame import time as pyt + +if platform.system() == "Windows": + import winsound import Control import DriverGet @@ -53,25 +54,24 @@ def control(driver, time, delay_time, telegram_msg, bot_token, chat_id, ses): if response == ErrCodes.BASARILI: # Ses cal! if ses: - mixer.music.load(path.abspath("sound/notification.mp3")) - mixer.music.play() - while mixer.music.get_busy(): - pyt.Clock().tick(10) + for i in range(5): + if platform.system() == "Windows": + winsound.PlaySound("SystemExclamation", winsound.SND_ALIAS) + elif platform.system() == "Darwin" or platform.system() == "Linux": + os.system('play -n synth 0.1 sine 660') """ # Telegram mesaji gonder! if telegram_msg: TelegramMsg.TelegramMsg().send_telegram_message(bot_token, chat_id) """ sg.Popup( - "Hey Orada mısın? Biletin bulundu. Satın alabilirsin", + "Hey Orada mısın? Biletin bulundu. Satın alabilirsin ❤️❤️❤️❤️", keep_on_top=True, button_type=5, ) elif response == ErrCodes.TEKRAR_DENE: print("\n" + str(delay_time) + " Dakika icerisinde tekrar denenecek...") - mixer.music.load(path.abspath("sound/beep.mp3")) - mixer.music.play() else: window["Aramaya Başla"].update(disabled=False) @@ -90,7 +90,7 @@ def control(driver, time, delay_time, telegram_msg, bot_token, chat_id, ses): currentTime = now.strftime("%H:%M") sg.popup( - "Selam :)", + "💖 Selam, Hos geldin 💖", "Ilk defa kullaniyorsaniz, ilk taramada biraz bekleyebilirsiniz!", keep_on_top=True, ) @@ -204,26 +204,46 @@ def thread2(): t2.start() if event == "Aramaya Başla": - window["Aramaya Başla"].update(disabled=True) - window["Durdur!"].update(disabled=False) nereden = values["nereden"] nereye = values["nereye"] tarih = values["tarih"] saat = values["saat"] + + if saat == "": + sg.popup("Lütfen saat bilgisini giriniz!") + continue + elif tarih == "": + sg.popup("Lütfen tarih bilgisini giriniz!") + continue + elif nereden == nereye: + sg.popup("Nereden ve Nereye aynı olamaz!") + continue + + if "/" in tarih: + tarih = tarih.replace("/", ".") + elif "-" in tarih: + tarih = tarih.replace("-", ".") + + # If saat has , . replace with : + if "." in saat: + saat = saat.replace(".", ":") + elif "," in saat: + saat = saat.replace(",", ":") + delay_time = values["delay_time"] telegram_msg = values["telegram_msg"] bot_token = values["bot_token"] chat_id = values["chat_id"] ses = values["ses"] + + window["Aramaya Başla"].update(disabled=True) + window["Durdur!"].update(disabled=False) + print("Arama başladı. Lütfen bekleyin...") t1 = Thread( target=thread1, args=(delay_time, telegram_msg, bot_token, chat_id, ses) ) - mixer.init() - mixer.music.load(path.abspath("sound/beep.mp3")) - mixer.music.play() t1.start() - def __main__(): main()