Hocam bu arada kodu yeniden güncelledim. Kazanan ve yedek kazanan sayısı belirlemeyi ekledim. Sanırsam GitHub üzerinden de yayınlanabiliyor fakat dediğim gibi kullanmayı bilmediğim için buradan yayınlayacağım. Kurulum için ek bir modül indirmeye gerek yok.
[CODE lang="python" title="Bahsettiğim Güncelleme"]import requests
from bs4 import BeautifulSoup
import random
import tkinter as tk
from tkinter import messagebox
def get_usernames(url, page_count=1):
usernames = []
selected_usernames = set()
for page in range(1, page_count + 1):
response = requests.get(f"{url}?page={page}")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
comments = soup.find_all(class_='m-userContent')
for comment in comments:
if "Katılıyorum." in comment.text:
username = comment.find_previous(class_='username').text.strip()
if username is None:
username = ""
if username not in selected_usernames:
usernames.append(username)
selected_usernames.add(username)
return usernames
def select_backup_winner(usernames, winner):
remaining_users = [user for user in usernames if user != winner]
if remaining_users:
backup_winner = random.choice(remaining_users)
return backup_winner
else:
return None
for _ in range(winner_count):
winner = select_winner(usernames)
if winner:
winners.append(winner)
usernames.remove(winner)
for _ in range(backup_count):
backup_winner = select_backup_winner(usernames, random.choice(winners) if winners else None)
if backup_winner:
backup_winners.append(backup_winner)
usernames.remove(backup_winner)
if winners:
winner_label.config(text=f"Kazananlar: {', '.join(winners)}")
if backup_winners:
winner_label.config(text=f"Kazananlar: {', '.join(winners)}\nYedek Kazananlar: {', '.join(backup_winners)}")
else:
winner_label.config(text=f"Kazananlar: {', '.join(winners)}\nYedek Kazanan bulunamadı.")
else:
winner_label.config(text="Katılım gösteren kullanıcı bulunamadı.")
# Create the main UI window
root = tk.Tk()
root.title("Çekiliş Kazanan Seçici")
Hocam bu arada kodu yeniden güncelledim. Kazanan ve yedek kazanan sayısı belirlemeyi ekledim. Sanırsam GitHub üzerinden de yayınlanabiliyor fakat dediğim gibi kullanmayı bilmediğim için buradan yayınlayacağım. Kurulum için ek bir modül indirmeye gerek yok.
[CODE lang="python" title="Bahsettiğim Güncelleme"]import requests.
from bs4 import BeautifulSoup.
import random.
import tkinter as tk.
from tkinter import messagebox.
def get_usernames(url, page_count=1):
usernames = []
selected_usernames = set()
for page in range(1, page_count + 1):
response = requests.get(f"{url}?page={page}")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
comments = soup.find_all(class_='m-userContent')
for comment in comments:
if "Katılıyorum." in comment.text:
username = comment.find_previous(class_='username').text.strip()
if username is None:
username = ""
if username not in selected_usernames:
usernames.append(username)
selected_usernames.add(username)
return usernames.
def select_backup_winner(usernames, winner):
remaining_users = [user for user in usernames if user != winner]
if remaining_users:
backup_winner = random.choice(remaining_users)
return backup_winner.
else:
return None.
for _ in range(winner_count):
winner = select_winner(usernames)
if winner:
winners.append(winner)
usernames.remove(winner)
for _ in range(backup_count):
backup_winner = select_backup_winner(usernames, random.choice(winners) if winners else None)
if backup_winner:
backup_winners.append(backup_winner)
usernames.remove(backup_winner)
if winners:
winner_label.config(text=f"Kazananlar: {', '.join(winners)}")
if backup_winners:
winner_label.config(text=f"Kazananlar: {', '.join(winners)}\nYedek Kazananlar: {', '.join(backup_winners)}")
else:
winner_label.config(text=f"Kazananlar: {', '.join(winners)}\nYedek Kazanan bulunamadı.")
else:
winner_label.config(text="Katılım gösteren kullanıcı bulunamadı.")
# Create the main UI window.
root = tk.Tk()
root.title("Çekiliş Kazanan Seçici")
Kimse yapmadan ben yapayım dedim
Belirtilen bir konudaki çekiliş konusunda katılan kullanıcıları topluyor ve bu kullanıcılar arasından rastgele bir kazanan seçiyor.
import random
import requests
from bs4 import BeautifulSoup
def get_usernames(url, page_count=1):
usernames = []
selected_usernames = set()
for page in range(1, page_count + 1):
response = requests.get(f"{url}?page={page}")
if response.status_code == 200:
soup = BeautifulSoup(response.text, "html.parser")
comments = soup.find_all(class_="m-userContent")
for comment in comments:
if "Katılıyorum." in comment.text:
username = comment.find_previous(class_="username").text.strip()
if username is None:
username = ""
if username not in selected_usernames:
usernames.append(username)
selected_usernames.add(username)
return usernames
def select_winner(usernames):
if usernames:
winner = random.choice(usernames)
print("Kazanan:", winner)
else:
print("Katılım gösteren kullanıcı bulunamadı.")
def main():
url = input("Çekiliş konusunun linkini girin: ")
page_count = int(input("Sayfa sayısını girin: "))
usernames = get_usernames(url, page_count)
print("Toplam katılımcı sayısı:", len(usernames))
print("Çekilişe katılan kullanıcılar:")
for username in usernames:
print(username)
select_winner(usernames)
if __name__ == "__main__":
print("wyltre tarafından yapılmıştır. github.com/wyltre")
main()
Python indirin. Sonra modülleri kurun.
Bash:
pip install requests
Bash:
pip install beautifulsoup4
İster GitHub'dan ister buradan kodları alın ve .py olarak kaydedin.
CTRL + Shift sağ Click komut penceresini burada aç (Python dosyasında yapın bunu) "py dosyaismi.py"
Sonra konu linki girin, sonra sayfa sayısını ve bitti.
requests modülü: belirtilen Konu'dan sayfaları almak için. Beautiful Soup modülü: belirtilen konuda kullanıcı yorumlarını ve kullanıcı adlarını bulmak için. random modülü: kullanıcı adları listesinden rastgele bir kazanan seçmek için.
get_usernames fonksiyonu: belirtilen konudaki her bir sayfayı tarar ve "katılıyorum." ifadesini içeren yorumlardan kullanıcı adlarını alıyor. Daha önce seçilmiş kullanıcıları tekrar almaz. select_winner fonksiyonu: kullanıcı adları listesinden rastgele bir kazanan seçiyor. main fonksiyonu: kullanıcıdan çekiliş konusunun URL'sini ve sayfa sayısını alır. get_usernames fonksiyonunu kullanarak katılan kullanıcıları alır, ardından bu kullanıcıları ekrana yazdırır ve select_winner fonksiyonunu: kullanarak bir kazanan seçiyor.
Not: "Katılıyorum." ifadesini alıyor başka bir şey yazmayın.
Konuyu hortlatıyorum ama bir çekiliş planlıyorum ve hiç çekiliş tarzı bir şey yapmadım şimdiye kadar. Bu kodu kullansam işime yarar mı, tam olarak nasıl kullanabilirim?
Konuyu daha önce gördüm gibi hatırlıyorum ama son mesaj ile tekrar görünce göz atarım diye kaydetmiştim. Göz atma fırsatı buldum. Öncelikle söylediklerimi hakaret olarak algılamayın. Kibar eleştiri falan diye düşünün.
Konu tek kelimeyle berbat. En basitinden son mesajda görülebildiği gibi. İnsanlar kullanamıyor. Sıradan insanlardan Python kurmalarını, üstüne 2 tane kütüphane kurmalarını bekliyorsunuz. Hadi kütüphane affedilebilir ama durup dururken sisteme Python kurulması kadar gereksiz az şey var. Kütüphaneler için bir requirements.txt dosyası bile hazırlanmamış.
Konuda kod paylaşmayı amaçlayan 6 mesaj var ve bunlardan sadece 2'si başarılı. Çünkü yönetim kullanmayın dememe rağmen kod renklendiren uygulamayı kullanmış, üyeler de kullanmayın dememe rağmen bu özelliği kullanmış. Sonra da artık eklenti mi bozuldu, başka eklentiye mi geçildi, eklentiye güncelleme mi geldi bilmem. Bir regex ile forumdaki tüm mesajlar elden geçirilip düzeltilebilecek bir şey ama kim bilir ne zamandır bu halde ve ne kadar süre böyle kalacak. Bahsi geçen 2 mesajı da konu sahibi atmış, diğer mesajlardaki kodlar okunabilir halde olmadığı için okumaya çalışmayacağım.
İlk mesaj. Bu tip bir programın biraz daha genel amaçlı olmasını bekliyor insan. Katılıyorum dışında şeyler isteyen veya apaçık bir şekilde belirtmemiş olsa dahi başka kelimeleri de kabul etmek isteyenler olabilir. Bu yok.
Kullanıcılar bitiş tarihi istiyor, yok.
Yedek yok.
Konu sahibini saymama yok.
Sayfa sayısını girmek gerekiyor.
İlk mesajda değil, üçüncü mesajda denedim ama konu bağlantısı https://techolay.net/sosyal/konu/techolay-cekilis-scripti.12016/page-3 gibi hatalı verilirse çalışmıyor.
Alıntı mesajları göz ardı etme yok. Forum halkı devasa mesajları alıntılayıp 2 gramlık cevap yazmayı sever. Bunu bilmiyor olamazsınız.
Bu tip bir konuda sonradan konuşulmasına rağmen ilk mesaja yapılmış bir düzenleme yok. GitHub bağlantısından sonra kod paylaşılmaması daha mantıklı olurdu gibi geliyor.
İkinci mesajda koda bakmadan; yedek eklenmiş, konu sahibini saymama değil de ilk mesaj sayılmamış.
Üçüncü mesaj. Hayır, bütün XenForo forumlarında çalışmıyor. Örnek. Muhtemelen Technopat'ta denediniz, o kadar. Çok çeşitli tasarımlar yapılabiliyor. Sırf bunu göstermek için kodu formatlıyorum. Belki bakmak isteyen olur diye sürprizbozan içinde.
Kod:
import requests
from bs4 import BeautifulSoup
import random
def get_usernames(url, page_count=1):
usernames = []
selected_usernames = set()
for page in range(1, page_count + 1):
response = requests.get(f"{url}?page={page}")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
comments = soup.find_all(class_='m-userContent')
for comment in comments:
if "Katılıyorum." in comment.text:
username = comment.find_previous(class_='username').text.strip()
if username is None:
username = ""
if username not in selected_usernames:
usernames.append(username)
selected_usernames.add(username)
return usernames
def select_winner(usernames):
if usernames:
winner = random.choice(usernames)
print("|||||||||||||||||||||||||KAZANAN:", winner, "||||||||||||||||||||||||||")
else:
print("Katılım gösteren kullanıcı bulunamadı.")
def main():
url = input("Çekiliş konusunun linkini girin: ")
page_count = int(input("Sayfa sayısını girin: "))
usernames = get_usernames(url, page_count)
print("Toplam katılımcı sayısı:", len(usernames))
print("Çekilişe katılan kullanıcılar:")
for username in usernames:
print(username)
print("____________________________")
select_winner(usernames)
if __name__ == "__main__":
print("wyltre tarafından yapılmıştır. github.com/wyltre")
main()
input("Kapatmak İçin Enter Tuşuna Basın.")
Konuda da repoda da bir .exe muhabbeti dönmüş ama ortalıkta yok. İmzasız olacağı için kullanımı çok kolay olmayacaktır diye düşünüyorum. Kaldı ki insanların .exe'ye güvenmemesi beklenir.
Python yazıp GitHub Actions ile çalıştırmak aklıma geldi. Localde sizde nasıl çalışıyor anlamadım ama bende header koymadan requests çalışmıyor. 403 verip duruyor. Başkaları için de böyle olmaması için bir sebep yok bence. Koyduğum header ile GitHub Actions üzerinde çalışmadı, Cloudflare ağlayıp duruyor. Bypass etmenin yolunu bulan varsa sanıyorum ki kullanım açısından nispeten rahat olacaktır diyecektim ama bir kontrol edeyim dediğimde yanlış hatırladığımı fark ettim. Google hesabıyla GitHub hesabı oluşturulabiliyor diye aklımda kalmış. Tüm uçları ballı değnek mübarek.
Bir şekilde halledilebilecek bir şeydir muhtemelen ama kullanıcı deneyimi açısından herhalde en rahatı tarayıcı eklentisi olacaktır.
Asıl sorun kimsenin konudan haberdar olmaması. Tüm çekilişlerde kullanılsa dahi o kadar çok çekiliş olmuyor. 1 saat harcasanız dahi 1 yılda kaç çekiliş oluyor? Ctrl + F ile kelime filtreleyip isimleri bir siteye yapıştırmaya kıyasla ne kadar tasarruf ettirmiş oluyorsunuz? Çekiliş yapanlar 1 yılda toplam 1 saat harcıyor mudur?
Bu yüzden harcanan emeğe değmediğini düşünüyorum.