Minap egyik ismerősömnek szüksége volt egy programra, ami txt fileból töménytelen mennyiségű email címet beolvas, és elküldi egy oldalnak, amiből majd a program tudni fogja, hogy hogyan tovább. Úgy éreztem, hogy erre a feladatra c# a legalkalmasabb és a legszebb megoldás, mégis csak szebb amikor konzol ablakban pörögnek az adatok.
Nos az ismerősöm az akarta tudni, hogy azok az email címek amik a birtokában vannak, tartoznak e valamilyen felhasználóhoz az adott weboldalon. A szóban forgó oldal a következő: httx://clanbase.ggl.com/personlist.php. Itt fut az a script ami egy keresést végez a saját dbjükön, hogy a megkapott információk alapján létezik e olyan player. Ugye nekünk csak email címünk van, ezért logikus, hogy az email mezőbe kell majd beszúrnunk az adatot, majd valahogy elküldeni a servernek.
Első lépésként, határozzuk meg milyen result kell nekünk, hogyha az adott email címhez nem tartozik player.
Tehát most source nézegetés jön :)
Ezt a resultot kapjuk, hogyha nincsen player:
<div class="small">No players matching criteria (email 'loolok@dfel', limit 30).</div>
Mint tudjuk, ha van playerhez tartozó email címünk, akkor nem ezt a resultot kapjuk, tehát a feltételünkbe majd ezeket a kulcs szavakat kell keresnünk.
Azt is tudjuk, hogy az adatok POST-ban, vagy GET-ben közlekedbek, a submit gomb megnyomása után. Vizsgáljuk csak meg, hogy milyen adatok zúznak át:
text=&country=&email=lol%40hotmail.com&guidid=0&guidvalue=&gid=0&post=1&setlanguage=&x=33&y=6
Tehát a keresett paraméterünk az email paraméter. Most ezeket az adatokat GET ben is elküldöm, hátha azt is lekezeli a szerver.
Nem tévedtem, lekezeli, máris könnyebb lett a dolgunk. Mint már mondtam, nekünk csak az email paraméter kell, tehát elég azt elküldenünk GET ben, a script nem fog sipolni, hogy hiányzó paraméterek vagy valami.
Innentől már csak a programot kell megírnunk, ami lehetőleg eltud bánni 2 millió email cím nagyságú txt vel is :D
A kód ITT érhető el, úgy érzem nincs benne semmi megváltó ami érthetetlen lenne a kül világ számára.
Persze, elég egyszerűen szűröm ki, hogy nincs felhasználó, lehetne itt regexp ekkel csekkolni a dolgokat, meg minden, de nem éreztem szükségesnek :D
Egy runtime kép pedig ITT érhető el.