Skip to content

Commit

Permalink
UI fixes, regex alg. fix, webdriver bug removed. UI fixes..
Browse files Browse the repository at this point in the history
  • Loading branch information
Mehmet Aksoy committed Jun 28, 2024
1 parent 6049b85 commit 1281507
Show file tree
Hide file tree
Showing 12 changed files with 166 additions and 25 deletions.
117 changes: 117 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
TCDD bilet yer kontrol programi sayesinde tcdd sitesine surekli girmek zorunda kalmadan, ayarlayacaginiz periyotlarla websitesinden bilet yer durumunu ogrenebilmeniz saglanmistir.

<a href="https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol" title="Go to GitHub repo"><img src="https://img.shields.io/static/v1?label=mcagriaksoy&message=tcdd-bilet-yer-kontrol&color=blue&logo=github" alt="mcagriaksoy - tcdd-bilet-yer-kontrol"></a>
<a href="https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol/releases/"><img src="https://img.shields.io/github/tag/mcagriaksoy/tcdd-bilet-yer-kontrol?include_prereleases=&sort=semver&color=blue" alt="GitHub tag"></a>
<a href="#license"><img src="https://img.shields.io/badge/License-MIT-blue" alt="License"></a>
<a href="https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol/issues"><img src="https://img.shields.io/github/issues/mcagriaksoy/tcdd-bilet-yer-kontrol" alt="issues - tcdd-bilet-yer-kontrol"></a>
[![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")

<a href="https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol"><img src="https://img.shields.io/github/stars/mcagriaksoy/tcdd-bilet-yer-kontrol?style=social" alt="stars - tcdd-bilet-yer-kontrol"></a>
<a href="https://github.com/mcagriaksoy/tcdd-bilet-yer-kontrol"><img src="https://img.shields.io/github/forks/mcagriaksoy/tcdd-bilet-yer-kontrol?style=social" alt="forks - tcdd-bilet-yer-kontrol"></a>

## 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)
12 changes: 7 additions & 5 deletions src/Control.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
6 changes: 4 additions & 2 deletions src/DriverSetting.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Binary file added src/__pycache__/Control.cpython-311.pyc
Binary file not shown.
Binary file added src/__pycache__/DriverGet.cpython-311.pyc
Binary file not shown.
Binary file added src/__pycache__/DriverSetting.cpython-311.pyc
Binary file not shown.
Binary file added src/__pycache__/Rota.cpython-311.pyc
Binary file not shown.
Binary file added src/__pycache__/Sehirler.cpython-311.pyc
Binary file not shown.
Binary file added src/__pycache__/error_codes.cpython-311.pyc
Binary file not shown.
Binary file added src/__pycache__/ui.cpython-311.pyc
Binary file not shown.
2 changes: 1 addition & 1 deletion src/requirements.txt
Original file line number Diff line number Diff line change
@@ -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
54 changes: 37 additions & 17 deletions src/ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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,
)
Expand Down Expand Up @@ -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()

0 comments on commit 1281507

Please sign in to comment.