import time
import json
import certifi
import cloudscraper
import random
import sys
import requests
import threading
from fake_useragent import UserAgent
# API URL'leri
BOOKING_URL = "Api1"
ACCEPT_URL = "Api2"
# API'ye gönderilecek login bilgileri
LOGIN_HASH = "Hash1"
ACCEPT_LOGIN_HASH = "Hash2"
# Araç ID
VEHICLE_ID = "36979"
# Telegram Bot API Bilgileri
TELEGRAM_BOT_TOKEN = "Token"
TELEGRAM_CHAT_ID = "id
# Proxy listesi
proxy_list = [
{"Proxy"},
{"Proxy "},
{"Proxy "},
{"Proxy "},
]
# CloudScraper başlat
scraper = cloudscraper.create_scraper(
browser={"browser": "chrome", "platform": "windows", "mobile": False}
)
previous_hashes = set()
# Yeniden deneme ayarları
MAX_RETRIES = 5
RETRY_DELAY = 3
# Başarılı istek sayacı
success_count = 0
lock = threading.Lock() # Thread güvenliği için kilitleme mekanizması
def get_random_headers():
"""Her istek için rastgele User-Agent döndürür"""
ua = UserAgent()
return {
"Content-Type": "application/json",
"User-Agent": ua.random
}
def send_telegram_message(message):
"""Telegram'a mesaj gönderen fonksiyon"""
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
payload = {"chat_id": TELEGRAM_CHAT_ID, "text": message}
try:
response = requests.post(url, json=payload)
if response.status_code == 200:
print("\n📩 Telegram bildirimi gönderildi!")
else:
print(f"\n❌ Telegram hata kodu: {response.status_code} - {response.text}")
except Exception as e:
print(f"\n⚠️ Telegram bağlantı hatası: {e}")
def accept_booking(booking_hash):
"""Rezervasyonu kabul eden fonksiyon (Thread ile çalışır)"""
global previous_hashes
if booking_hash in previous_hashes:
return # Aynı rezervasyonu iki kez işlememek için
print(f"\n🚀 Yeni Rezervasyon İşleniyor! Booking Hash: {booking_hash}")
accept_payload = {
"login_hash": ACCEPT_LOGIN_HASH,
"booking_hash": booking_hash,
"vehicle_id": VEHICLE_ID,
"refuse": "accept"
}
proxies = random.choice(proxy_list) # Her istek için farklı proxy
headers = get_random_headers() # Her istek için farklı User-Agent
for attempt in range(MAX_RETRIES):
try:
accept_response = scraper.post(ACCEPT_URL, headers=headers, json=accept_payload, verify=certifi.where(), proxies=proxies)
if accept_response.status_code == 200:
with lock:
previous_hashes.add(booking_hash) # Önceki rezervasyonlara ekle
print(f"\n✅ Rezervasyon kabul edildi! {booking_hash}")
# Telegram bildirimi gönder
send_telegram_message(f"✅ Rezervasyon Kabul Edildi! ✅\n\n{booking_hash})")
break
else:
print(f"\n❌ Rezervasyon kabul hatası: {accept_response.status_code} - {accept_response.text}")
time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff
except Exception as e:
print(f"\n⚠️ Bağlantı hatası (Rezervasyon kabulü): {e}, tekrar deneniyor...")
time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff
def check_new_bookings(response):
"""Yeni rezervasyonları kontrol edip, işleme alan fonksiyon"""
try:
current_data = response.json().get("data", {}).get("bookings", [])
except json.JSONDecodeError as e:
print(f"\n❌ JSON dönüşüm hatası: {e}. Yanıt içeriği: {response.text}")
return
for booking in current_data:
booking_hash = booking["booking_hash_link"]
if booking_hash not in previous_hashes:
thread = threading.Thread(target=accept_booking, args=(booking_hash,))
thread.start() # Yeni rezervasyonlar için ayrı bir thread başlat
def send_booking_request():
"""Rezervasyonları takip eden ana fonksiyon"""
global success_count # Global sayaç
while True:
time.sleep(0.5)
proxies = random.choice(proxy_list) # Her istek için farklı proxy
headers = get_random_headers() # Her istek için farklı User-Agent
for attempt in range(MAX_RETRIES):
try:
payload = {"login_hash": LOGIN_HASH}
response = scraper.post(BOOKING_URL, headers=headers, json=payload, verify=certifi.where(), proxies=proxies)
if response.status_code == 200:
with lock:
success_count += 1 # Sayacı artır
sys.stdout.write(f"\r✅ Başarılı istek sayısı: {success_count}") # Aynı satıra yaz
sys.stdout.flush() # Terminali güncelle
check_new_bookings(response)
break # Başarılıysa döngüden çık
else:
print(f"\n❌ Hata: {response.status_code} - {response.text}")
time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff
except Exception as e:
print(f"\n⚠️ Bağlantı hatası: {e}, tekrar deneniyor...")
time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff
# Sürekli çalıştır
send_booking_request() Python Yardım Gerekli İşinin Ehillerinde
2
●142
- 04-04-2025, 18:28:53Üyeliği durdurulduArkadaşlar merhaba 0.5sn de apiye istek atsın diyorum ama ekranda başarılı istek sayısı 2 sn de bir artıyor , istek gönderme sayısını nasıl artırabilirim , ve birde aynı anda 2 rezervasyon geliyor 2. sini bazen alamıyor napmam gerekli
- 04-04-2025, 18:40:08
import time import json import certifi import cloudscraper import random import sys import requests import threading from fake_useragent import UserAgent # API URL'leri BOOKING_URL = "Api1" ACCEPT_URL = "Api2" # API'ye gönderilecek login bilgileri LOGIN_HASH = "Hash1" ACCEPT_LOGIN_HASH = "Hash2" # Araç ID VEHICLE_ID = "36979" # Telegram Bot API Bilgileri TELEGRAM_BOT_TOKEN = "Token" TELEGRAM_CHAT_ID = "id # Proxy listesi proxy_list = [ {"Proxy"}, {"Proxy "}, {"Proxy "}, {"Proxy "}, ] # CloudScraper başlat scraper = cloudscraper.create_scraper( browser={"browser": "chrome", "platform": "windows", "mobile": False} ) previous_hashes = set() # Yeniden deneme ayarları MAX_RETRIES = 5 RETRY_DELAY = 3 # Başarılı istek sayacı success_count = 0 lock = threading.Lock() # Thread güvenliği için kilitleme mekanizması def get_random_headers(): """Her istek için rastgele User-Agent döndürür""" ua = UserAgent() return { "Content-Type": "application/json", "User-Agent": ua.random } def send_telegram_message(message): """Telegram'a mesaj gönderen fonksiyon""" url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": TELEGRAM_CHAT_ID, "text": message} try: response = requests.post(url, json=payload) if response.status_code == 200: print("\n📩 Telegram bildirimi gönderildi!") else: print(f"\n❌ Telegram hata kodu: {response.status_code} - {response.text}") except Exception as e: print(f"\n⚠️ Telegram bağlantı hatası: {e}") def accept_booking(booking_hash): """Rezervasyonu kabul eden fonksiyon (Thread ile çalışır)""" global previous_hashes if booking_hash in previous_hashes: return # Aynı rezervasyonu iki kez işlememek için print(f"\n🚀 Yeni Rezervasyon İşleniyor! Booking Hash: {booking_hash}") accept_payload = { "login_hash": ACCEPT_LOGIN_HASH, "booking_hash": booking_hash, "vehicle_id": VEHICLE_ID, "refuse": "accept" } proxies = random.choice(proxy_list) # Her istek için farklı proxy headers = get_random_headers() # Her istek için farklı User-Agent for attempt in range(MAX_RETRIES): try: accept_response = scraper.post(ACCEPT_URL, headers=headers, json=accept_payload, verify=certifi.where(), proxies=proxies) if accept_response.status_code == 200: with lock: previous_hashes.add(booking_hash) # Önceki rezervasyonlara ekle print(f"\n✅ Rezervasyon kabul edildi! {booking_hash}") # Telegram bildirimi gönder send_telegram_message(f"✅ Rezervasyon Kabul Edildi! ✅\n\n{booking_hash})") break else: print(f"\n❌ Rezervasyon kabul hatası: {accept_response.status_code} - {accept_response.text}") time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff except Exception as e: print(f"\n⚠️ Bağlantı hatası (Rezervasyon kabulü): {e}, tekrar deneniyor...") time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff def check_new_bookings(response): """Yeni rezervasyonları kontrol edip, işleme alan fonksiyon""" try: current_data = response.json().get("data", {}).get("bookings", []) except json.JSONDecodeError as e: print(f"\n❌ JSON dönüşüm hatası: {e}. Yanıt içeriği: {response.text}") return # Thread havuzu oluştur - aynı anda birden fazla rezervasyon için accept_threads = [] for booking in current_data: booking_hash = booking["booking_hash_link"] if booking_hash not in previous_hashes: # Yeni rezervasyonlar için hemen işlem başlat thread = threading.Thread(target=accept_booking, args=(booking_hash,)) thread.daemon = True thread.start() accept_threads.append(thread) # Diğer rezervasyonlara geçerken kısa bekle time.sleep(0.05) # Tüm rezervasyon işlemleri tamamlanana kadar bekle (opsiyonel) # for thread in accept_threads: # thread.join(timeout=5) # 5 saniye bekle def send_booking_request(): """Rezervasyonları takip eden ana fonksiyon""" global success_count # Global sayaç # Thread havuzu oluştur - çoklu istekler için max_threads = 5 # Aynı anda gönderilecek maksimum istek sayısı request_threads = [] while True: # Eğer aktif thread sayısı maksimumdan azsa yeni threadler ekle active_threads = sum(1 for t in request_threads if t.is_alive()) new_threads_needed = max_threads - active_threads for _ in range(new_threads_needed): thread = threading.Thread(target=send_single_request) thread.daemon = True # Ana program sonlandığında thread de sonlanır thread.start() request_threads.append(thread) # Bitmiş threadleri listeden temizle request_threads = [t for t in request_threads if t.is_alive()] # Kısa bir bekleme ile CPU kullanımını dengele time.sleep(0.1) def send_single_request(): """Tek bir rezervasyon isteği gönderir""" global success_count, lock proxies = random.choice(proxy_list) # Her istek için farklı proxy headers = get_random_headers() # Her istek için farklı User-Agent for attempt in range(MAX_RETRIES): try: payload = {"login_hash": LOGIN_HASH} response = scraper.post(BOOKING_URL, headers=headers, json=payload, verify=certifi.where(), proxies=proxies) if response.status_code == 200: with lock: success_count += 1 # Sayacı artır sys.stdout.write(f"\r✅ Başarılı istek sayısı: {success_count}") # Aynı satıra yaz sys.stdout.flush() # Terminali güncelle check_new_bookings(response) break # Başarılıysa döngüden çık else: print(f"\n❌ Hata: {response.status_code} - {response.text}") time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff except Exception as e: print(f"\n⚠️ Bağlantı hatası: {e}, tekrar deneniyor...") time.sleep(RETRY_DELAY * (2 ** attempt)) # Exponential backoff # Sürekli çalıştır send_booking_request()