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.
+
+
+
+
+
+[![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")
+
+
+
+
+## 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()