Konu Başlıkları Gizle
Merhaba,
Birkaç gündür üzerinde düşündüğüm küçük Python script'imi sunmaya sonunda hazırım. Bu gece oturup toplamda 1-2 saatte ancak bitirebildim. Sunacağım script, Sosyal'de yazdığınız tüm mesajlardaki (profil mesajları dahil) toplam karakter sayısını buluyor (sadece alıntılar hariç). Ben alıntılardaki karakterleri hariç tutacak şekilde yazdım kodu ama 62. satırı kaldırırsanız veya yoruma alırsanız alıntıları da sayıyor olmalı.
Kütüphane olarak
Buyurun:
Programı çalıştırmak için
Biraz yavaş çalıştığını belirteyim.
Örnek çıktı (29. mesajda
[CODE title="Kendi mesajlarım için örnek çıktı"]Mesaj 1: https://techolay.net/sosyal/konu/r5-5600-rx-6800-xt-b450m-s2h-macos-sonoma-14-0.5632/#post-73831
Toplam 207 karakter
Mesaj 2: https://techolay.net/sosyal/uye/maat.4/#profile-post-1542
Toplam 251 karakter
Mesaj 3: https://techolay.net/sosyal/konu/korku-oyunlarini-sever-misiniz.5611/page-2#post-73634
Toplam 539 karakter
Mesaj 4: https://techolay.net/sosyal/konu/son-pismanlik-neye-yarar.5618/#post-73621
Toplam 760 karakter
Mesaj 5: https://techolay.net/sosyal/konu/ekmekara-siram.5606/page-5#post-73603
Toplam 824 karakter
Mesaj 6: https://techolay.net/sosyal/konu/moderatoerluek-anilariniz.5616/#post-73566
Toplam 900 karakter
Mesaj 7: https://techolay.net/sosyal/konu/moderatoerluek-anilariniz.5616/
Toplam 1276 karakter
Mesaj 8: https://techolay.net/sosyal/konu/ekmekara-siram.5606/page-4#post-73449
Toplam 1336 karakter
Mesaj 9: https://techolay.net/sosyal/konu/ekmekara-siram.5606/page-2#post-73401
Toplam 1374 karakter
Mesaj 10: https://techolay.net/sosyal/konu/ekmekara-siram.5606/#post-73372
Toplam 1407 karakter
Mesaj 11: https://techolay.net/sosyal/konu/baska-insanlar-olmasaydi-yasamanin-bir-anlami-olur-muydu.5336/page-2#post-73317
Toplam 1906 karakter
Mesaj 12: https://techolay.net/sosyal/konu/ekmekara-siram.5606/
Toplam 2064 karakter
Mesaj 13: https://techolay.net/sosyal/konu/oeneri-konularina-oy-verirken-oenceden-verilmis-oylar-goezuekmesin.4790/page-5#post-73149
Toplam 2237 karakter
Mesaj 14: https://techolay.net/sosyal/konu/benim-gibi-online-oyunlarin-hicbirinde-basarili-olamayan-var-mi.5585/page-2#post-73143
Toplam 2556 karakter
Mesaj 15: https://techolay.net/sosyal/konu/oeneri-konularina-oy-verirken-oenceden-verilmis-oylar-goezuekmesin.4790/page-5#post-73120
Toplam 2793 karakter
Mesaj 16: https://techolay.net/sosyal/konu/benim-gibi-online-oyunlarin-hicbirinde-basarili-olamayan-var-mi.5585/#post-73087
Toplam 3131 karakter
Mesaj 17: https://techolay.net/sosyal/konu/veri-kaybindan-dolayi-oezuer-dileriz.5527/page-6#post-73056
Toplam 3733 karakter
Mesaj 18: https://techolay.net/sosyal/konu/sony-psx.5558/page-2#post-72877
Toplam 3820 karakter
Mesaj 19: https://techolay.net/sosyal/konu/sony-psx.5558/#post-72862
Toplam 3923 karakter
Mesaj 20: https://techolay.net/sosyal/konu/dualshock-4te-gta-5-karakteri-yavas-kosuyor.5462/page-2#post-72768
Toplam 4131 karakter
Mesaj 21: https://techolay.net/sosyal/konu/lolde-rankiniz-ve-maininiz-nedir.5561/#post-72732
Toplam 4217 karakter
Mesaj 22: https://techolay.net/sosyal/konu/lolde-rankiniz-ve-maininiz-nedir.5561/#post-72702
Toplam 4367 karakter
Mesaj 23: https://techolay.net/sosyal/konu/yasuha-fly-day-chinatown.5552/#post-72654
Toplam 4456 karakter
Mesaj 24: https://techolay.net/sosyal/konu/herkes-masauestue-fotografini-atsin.73/page-17#post-72650
Toplam 4547 karakter
Mesaj 25: https://techolay.net/sosyal/konu/yasuha-fly-day-chinatown.5552/#post-72634
Toplam 4677 karakter
Mesaj 26: https://techolay.net/sosyal/konu/r5-5600-rx-6800-xt-b450m-s2h-macos-sonoma-14-0.5632/#post-73831
Toplam 4884 karakter
Mesaj 27: https://techolay.net/sosyal/uye/maat.4/#profile-post-1542
Toplam 4928 karakter
Mesaj 28: https://techolay.net/sosyal/konu/korku-oyunlarini-sever-misiniz.5611/page-2#post-73634
Toplam 5216 karakter
Mesaj 29: https://techolay.net/sosyal/konu/son-pismanlik-neye-yarar.5618/#post-73621
Toplam 5437 karakter
Toplamda 29 mesaj gezildi ve 5437 karakter bulundu[/CODE]
Programı bitene kadar çalıştırdığımda 852 mesajım içinde toplam 372356 karakter olduğunu buldu.
Maalesef anlatılacak çok şey olduğu için koddaki yorumlarla yetinmekle kalacağım, üşendim. Herhangi bir sorunuz olursa hiç çekinmeden sorun. Onun dışında kodu alıp istediğiniz gibi inceleyebilir, düzenleyebilir ve geliştirebilirsiniz. Kaçırdığım bazı uç durumlar olabilir, açıkçası biraz aceleye getirdim ama kendi mesajlarımı denerken iyi çalışıyor gibiydi.
Umarım işinize yarar. Eğer programı çalıştırma konusunda bilginiz yoksa benden sizin için çalıştırmamı isteyebilirsiniz. Müsait olduğum zaman çalıştırıp haber verebilirim bir ihtimal.
Birkaç gündür üzerinde düşündüğüm küçük Python script'imi sunmaya sonunda hazırım. Bu gece oturup toplamda 1-2 saatte ancak bitirebildim. Sunacağım script, Sosyal'de yazdığınız tüm mesajlardaki (profil mesajları dahil) toplam karakter sayısını buluyor (sadece alıntılar hariç). Ben alıntılardaki karakterleri hariç tutacak şekilde yazdım kodu ama 62. satırı kaldırırsanız veya yoruma alırsanız alıntıları da sayıyor olmalı.
Kütüphane olarak
sys standart kütüphanesi dışında sadece selenium kullandım hatta bu ilk kullanışım oldu. Güzel bir kütüphaneymiş. Kodu çalıştırmadan önce kütüphanenin ortamınızda yüklü bulunması gerekiyor. Ben direkt pip install selenium komutunu kullandım.Buyurun:
Python:
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
def calculateTotalChars(initialPage: str):
# Tarayıcı açılmaması için:
# https://sqa.stackexchange.com/questions/2609/running-webdriver-without-opening-actual-browser-window
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("log-level=3") # Log mesajlarını gizliyor
# Selenium'la tarayıcı açıp ilk mesaj listesi sayfasına giriyoruz
browser = webdriver.Chrome(options)
browser.get(initialPage)
totalChars = 0 # Toplam karakter sayısı
currentMessageNo = 0 # Mevcut mesaj numarası
while True:
try:
messageIndex = 0
while True:
# Mesaj listesi elementini alıp ardından içindeki tüm mesaj maddelerini alıyoruz.
messageList = browser.find_element(By.CSS_SELECTOR, "ol.b-body").find_elements(By.XPATH, "*")
# Önceki iterasyonda son mesaja gelmişsek duruyoruz.
if messageIndex == len(messageList):
break
# Mesaj bağlantısını almak için şu 3 satır:
listElem = messageList[messageIndex]
contentMain = listElem.find_element(By.CLASS_NAME, "contentRow-main")
postUrl = contentMain.find_element(By.TAG_NAME, "a").get_attribute("href")
assert postUrl # Ne olur ne olmaz, bağlantı yoksa (edge case).
# Mesaj konusuna gidiyoruz (bağlantıda mesajın numarası var).
browser.get(postUrl)
# Edge case varsa diye try-except var.
try:
# Mesajımızın ID'si.
postId = browser.current_url.split("#")[-1]
# Profil veya konu mesajıysa.
if postId.startswith("post") or postId.startswith("profile-post"):
# Sadece mesajımızın bulunduğu elementi alıyoruz.
allMessage = browser.find_element(By.CSS_SELECTOR, f'div[data-lb-id="{postId}"]')
# Konunuzun ilk mesajıysa.
else:
# Sadece mesajımızın bulunduğu elementi alıyoruz.
allMessage = browser.find_element(By.CSS_SELECTOR, f"div.m-userContent")
# Mesajımızın içindeki alıntılar
quotes = allMessage.find_elements(By.TAG_NAME, "blockquote")
# Toplam karakter sayısına mesaj uzunluğumuzu ekliyoruz (boşluklar da dahil oluyor).
totalChars += len(allMessage.text)
# Bu satırı, alıntıları da saymak istiyorsanız silin veya yoruma alın.
totalChars -= sum(map(lambda q: len(q.text), quotes))
# Mesaj numaramızı bir artırıyoruz.
currentMessageNo += 1
except:
pass
# Burası işte, bilgileri yazdırdığımız yer.
print(f"Mesaj {currentMessageNo}: {browser.current_url}\nToplam {totalChars} karakter\n")
# Tarayıcıda geri gidiyoruz ki mesaj listemize dönelim.
browser.back()
# Bir sonraki mesaj için index'i 1 artırıyoruz.
messageIndex += 1
try:
# Mesaj listesinde "Sonraki" butonunu alıyoruz.
# Alamazsak hata veriyor, except'e gidiyor.
nextPageButton = browser.find_element(By.CLASS_NAME, "pageNav-jump--next")
except:
try:
# Son sayfadayız, "Daha eski sonuçları görüntüle" butonunu alıyoruz.
# O da yoksa mesajlarımızın sonuna gelmişizdir, except'e gidecek.
nextPageButton = browser.find_element(
By.XPATH, "//*[contains(text(), 'Daha eski sonuçları görüntüle')]"
).find_element(By.XPATH, "..")
except:
break
# Aldığımız butondaki bağlantıyı seçiyoruz.
nextPageLink = nextPageButton.get_attribute("href")
assert nextPageLink # Ne olur ne olmaz
# Bir sonraki mesaj listesi sayfasına gidiyoruz.
browser.get(nextPageLink)
# Ctrl-C vb. durumlarda program kapanmadan önce son durumu söylüyor.
except KeyboardInterrupt:
print(f"Toplamda {currentMessageNo} mesaj gezildi ve {totalChars} karakter bulundu")
break
except:
# Program buraya gelince de son mesaja gelmiş olmasından başka, beklenmedik bir hata olmamışsa
# bitmiş olacak.
break
if __name__ == "__main__":
initialPage = sys.argv[1]
calculateTotalChars(initialPage)
Programı çalıştırmak için
python dosya_adı.py <ilk mesaj sayfa bağlantısı> komutunu kullanabilirsiniz. Buradaki "ilk mesaj sayfa bağlantısı"nı, mesaj sayınıza sağ tıklayıp bağlantıyı kopyalayarak veya sayıya tıklayınca açılan sayfanın adres çubuğundan elde edebilirsiniz:Biraz yavaş çalıştığını belirteyim.
Ctrl + C kısayolunu programı istediğiniz an durdurmak için kullanabilirsiniz. Program mesajları yeniden eskiye doğru geziyor ve her bir mesaja geldiğinde o mesajın bağlantısını, geldiği kaçıncı mesaj olduğunu ve o ana kadarki toplam karakter sayısını söylüyor. Programı bir klavye kısayoluyla durdurduğunuzdaysa yine toplam kaç mesaj gezdiğini ve o ana kadar hesaplanmış toplam karakter sayısını söyleyecektir.Örnek çıktı (29. mesajda
Ctrl + C ile durdurdum):[CODE title="Kendi mesajlarım için örnek çıktı"]Mesaj 1: https://techolay.net/sosyal/konu/r5-5600-rx-6800-xt-b450m-s2h-macos-sonoma-14-0.5632/#post-73831
Toplam 207 karakter
Mesaj 2: https://techolay.net/sosyal/uye/maat.4/#profile-post-1542
Toplam 251 karakter
Mesaj 3: https://techolay.net/sosyal/konu/korku-oyunlarini-sever-misiniz.5611/page-2#post-73634
Toplam 539 karakter
Mesaj 4: https://techolay.net/sosyal/konu/son-pismanlik-neye-yarar.5618/#post-73621
Toplam 760 karakter
Mesaj 5: https://techolay.net/sosyal/konu/ekmekara-siram.5606/page-5#post-73603
Toplam 824 karakter
Mesaj 6: https://techolay.net/sosyal/konu/moderatoerluek-anilariniz.5616/#post-73566
Toplam 900 karakter
Mesaj 7: https://techolay.net/sosyal/konu/moderatoerluek-anilariniz.5616/
Toplam 1276 karakter
Mesaj 8: https://techolay.net/sosyal/konu/ekmekara-siram.5606/page-4#post-73449
Toplam 1336 karakter
Mesaj 9: https://techolay.net/sosyal/konu/ekmekara-siram.5606/page-2#post-73401
Toplam 1374 karakter
Mesaj 10: https://techolay.net/sosyal/konu/ekmekara-siram.5606/#post-73372
Toplam 1407 karakter
Mesaj 11: https://techolay.net/sosyal/konu/baska-insanlar-olmasaydi-yasamanin-bir-anlami-olur-muydu.5336/page-2#post-73317
Toplam 1906 karakter
Mesaj 12: https://techolay.net/sosyal/konu/ekmekara-siram.5606/
Toplam 2064 karakter
Mesaj 13: https://techolay.net/sosyal/konu/oeneri-konularina-oy-verirken-oenceden-verilmis-oylar-goezuekmesin.4790/page-5#post-73149
Toplam 2237 karakter
Mesaj 14: https://techolay.net/sosyal/konu/benim-gibi-online-oyunlarin-hicbirinde-basarili-olamayan-var-mi.5585/page-2#post-73143
Toplam 2556 karakter
Mesaj 15: https://techolay.net/sosyal/konu/oeneri-konularina-oy-verirken-oenceden-verilmis-oylar-goezuekmesin.4790/page-5#post-73120
Toplam 2793 karakter
Mesaj 16: https://techolay.net/sosyal/konu/benim-gibi-online-oyunlarin-hicbirinde-basarili-olamayan-var-mi.5585/#post-73087
Toplam 3131 karakter
Mesaj 17: https://techolay.net/sosyal/konu/veri-kaybindan-dolayi-oezuer-dileriz.5527/page-6#post-73056
Toplam 3733 karakter
Mesaj 18: https://techolay.net/sosyal/konu/sony-psx.5558/page-2#post-72877
Toplam 3820 karakter
Mesaj 19: https://techolay.net/sosyal/konu/sony-psx.5558/#post-72862
Toplam 3923 karakter
Mesaj 20: https://techolay.net/sosyal/konu/dualshock-4te-gta-5-karakteri-yavas-kosuyor.5462/page-2#post-72768
Toplam 4131 karakter
Mesaj 21: https://techolay.net/sosyal/konu/lolde-rankiniz-ve-maininiz-nedir.5561/#post-72732
Toplam 4217 karakter
Mesaj 22: https://techolay.net/sosyal/konu/lolde-rankiniz-ve-maininiz-nedir.5561/#post-72702
Toplam 4367 karakter
Mesaj 23: https://techolay.net/sosyal/konu/yasuha-fly-day-chinatown.5552/#post-72654
Toplam 4456 karakter
Mesaj 24: https://techolay.net/sosyal/konu/herkes-masauestue-fotografini-atsin.73/page-17#post-72650
Toplam 4547 karakter
Mesaj 25: https://techolay.net/sosyal/konu/yasuha-fly-day-chinatown.5552/#post-72634
Toplam 4677 karakter
Mesaj 26: https://techolay.net/sosyal/konu/r5-5600-rx-6800-xt-b450m-s2h-macos-sonoma-14-0.5632/#post-73831
Toplam 4884 karakter
Mesaj 27: https://techolay.net/sosyal/uye/maat.4/#profile-post-1542
Toplam 4928 karakter
Mesaj 28: https://techolay.net/sosyal/konu/korku-oyunlarini-sever-misiniz.5611/page-2#post-73634
Toplam 5216 karakter
Mesaj 29: https://techolay.net/sosyal/konu/son-pismanlik-neye-yarar.5618/#post-73621
Toplam 5437 karakter
Toplamda 29 mesaj gezildi ve 5437 karakter bulundu[/CODE]
Programı bitene kadar çalıştırdığımda 852 mesajım içinde toplam 372356 karakter olduğunu buldu.
Maalesef anlatılacak çok şey olduğu için koddaki yorumlarla yetinmekle kalacağım, üşendim. Herhangi bir sorunuz olursa hiç çekinmeden sorun. Onun dışında kodu alıp istediğiniz gibi inceleyebilir, düzenleyebilir ve geliştirebilirsiniz. Kaçırdığım bazı uç durumlar olabilir, açıkçası biraz aceleye getirdim ama kendi mesajlarımı denerken iyi çalışıyor gibiydi.
Umarım işinize yarar.
İyi Sosyal'ler!
Son düzenleme: