Scriptul PHP de mai jos extrage adrese de email de pe o pagina web.
<?php
$url = "http:/www.genericwebsite.com/contact.php";
//getting the source-code of the web page
$sc = file_get_contents($url);
$sc = strtolower($sc);
$forbidden_symbols = array('?', '!', ',', ';', ':', '+', '=', '/', '\\', '"', '\'', '`', '’', '“', '”', '#', '$', '%', '^', '&', '*', '(', ')', '[', ']', '{', '}', '|', '<', '>');
//removing all symbols from the source-code less "@", "." and "_"
$sc = str_replace($forbidden_symbols, ' ', $sc);
//storing all words from the source-code into an array
$words_found = explode(' ', $sc);
//verifying each word from array if it is an email address
for ($i = 0; $i < count($words_found); $i++) {
//if the word contains the symbols "@" that means it is an email address
if (strpos($words_found[$i], '@')) {
//I make sure that the email address has no empty spaces in the beginning and in the and of it
$email_address = trim($words_found[$i]);
//I make sure that the email address has no symbols in the beginning and in the and of it
//I apply all these cleaning filters because the source-code can be pretty messy
$first_char = substr($email_address, 0, 1);
while (!ctype_alpha($first_char)) {
$email_address = substr($email_address, 1, strlen($email_address));
$first_char = substr($email_address, 0, 1);
}
$last_char = substr($email_address, strlen($email_address) - 1, 1);
while (!ctype_alpha($last_char)) {
$email_address = substr($email_address, 0, strlen($email_address) - 1);
$last_char = substr($email_address, strlen($email_address) - 1, 1);
}
//I make sure that the extracted string is really an email address
if (eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $email_address)) {
echo $email_address.'<br />';
}
}
}
?>
O caracteristica importanta a scriptului este ca poate rula foarte bine pe un server local ca EasyPHP sau XAMPP. Nu trebuie sa ruleze neaparat pe un server de hosting care poate sa fi restrictionat utilizarea functiei PHP file_get_contents(). Aceasta restrictie se face editand fisierul php.ini al serverului Apache. Mai exact, urmatoare linie de cod: allow_url_fopen = Off.
Incepand de la acest script pot fi dezvoltate aplicatii web mult mai complexe cu multe campuri de formulare, tot felul de scripturi jQuery si o baza de date unde sa fie stocate adresele de email. Deci, simte-te liber sa iti dezvolti propria aplicatie bazata pe propriile interese. Eu doar am prezentat idea de baza. Am aratat cum se poate obtine codul-sursa al unei pagini web din care putem extrage ce dorim. De exemplu, adrese de email, URL-uri, cuvinte-chie s.a.m.d.. Depinde ce doresti.
Inainte sa termin articolul vreau sa mentionez ca scriptul nu are nimic de a face cu spamming-ul. Spamming inseamna mesagerie electronica nesolicitata. Deci, atat timp cat scriptul nu trimite emailuri nesolicitate cu reclame scriptul nu poate fi considerat bot de spamming. Seamana mai mult cu crawlerele motoarelor de cautare (Yahoo, Bing si evident maretul Google) care aduna informatii de pe Internet sapand adanc in codul-sursa al paginilor web. Scriptul poate fi adaptat sa adune URL-uri sau intreg textul de pe pagina web sau ce vrea mintea ta in loc de adrese de email.
Privitor la adresele de email de pe paginile web, am vazut pe Internet persoane care incearca sa isi protejeze adresele de email inlocuind "@" cu "[at]" si "." cu "[dot]". Aceasta metosa are doua dezavantaje: primul este ca se pot scrie scripturi care foarte usor pot sparge acest sistem: scrptul cauta in codul-sursa "[at]" in loc de "@". Deci va obtine adresa de email in acest format: accesinterzis[at]gmail.com. Urmatorul pas este sa inlocuiasca "[at]" cu "@" folosind functia PHP str_replace() si va obtine intr-un sfarsit adresa de email adevarata. Al doilea dezavantaj al metodei este ca adresa de email arata urat. Asadar, cea mai buna cale de a proteja o adresa de email este de a o genera pe ecran folosind Javascript asa cum am facut eu in pagina mea de contact. Avem nevoie doar de cateva linii de cod:
<script type="text/javascript"> var first_half = "accesinterzis"; var at = "@"; var second_half = "gmail.com"; document.write(first_half + at + second_half); </script>
Utilizand aceste linii de cod Javascript niciun bot nu poate extrage adresa de email din codul-sursa al paginii web si adresa de email arata mult mai friendly in browser. Cand lucram cu Javascript, principala ingrijorare este ca scriptul Javascript ar putea sa nu fie cross-browser. Dar in acest caz codul este simplu si nu trebuie sa ne ingrijoram in aceasta privinta.
Astept sugestii de a imbunatati acest algoritm de extragere a adreselor de email de pe o pagina web.
Publica acest articol pe Twitter
Articole asemanatoare:
Bun am inteles cum se extrage adresa dar unde se stocheaza informatia?
Dupa ce extragi adresa de email din codul-sursa al paginii web o poti baga intr-o baza de date. E recomandat, ca de fiecare data cand vrei sa bagi o adresa de email in baza de date, sa verifici daca acea adresa exista deja in baza de date. Daca nu exista o bagi. Daca exista nu o mai bagi.
Dupa ce strangi adresele in baza de date poti face un script PHP care sa iti bage adresele din baza de date intr-un fisier .txt.
De fapt, poti face ce vrei tu…depinde de imaginatia ta si de ce intentionezi sa faci.
exact acele randuri care sa creeze baza de date in care sa se stocheze ma omoara pe mine. transcrierea lor din baza in TXT, cred ca reusesc sa o fac
Multumesc oricum de timpul pe care il pierzi cu novici ca mine
Pai…e simplu. Iti creezi tabelul in baza de date si apoi cu INSERT le bagi in tabel. Apoi le extragi din bd cu SELECT si le bagi in fisier cu fopen().
Daca chiar nu ii dai de cap iti postez scriptul. Facusem unu` da` tre` sa-l caut prin PC. Nu mai stiu pe unde l-am ratacit.
Daca il gasesti esti maret, as spune ca fac cinste dar nu stiu daca esti din Craiova. Eu am sa incerc si eventual am sa postez si eu tampenia care imi iese sa imi spui daca e bine
Offtopic
Am incercat sa intru pe siteul tau si mi-a sarit Avira in aer. Chrome-ul imi zice ca siteul e dubios. What’s the business there???
Ontopic
PoC pentru bagat in bd:
//Begin - SECOND EXTRACTION ALGORITHM $sc = file_get_contents($row['url']); $sc = strtolower($sc); $forbidden_characters = array('?', '!', ',', ';', ':', '+', '=', '/', '\\', '"', '\'', '`', '’', '“', '”', '#', '$', '%', '^', '&', '*', '(', ')', '[', ']', '{', '}', '|', '<', '>'); $sc = str_replace($forbidden_characters, ' ', $sc); //echo htmlentities($sc); $words_found = explode(' ', $sc); echo '<br /><br />'; for ($i = 0; $i < count($words_found); $i++) { if (strpos($words_found[$i], '@')) { $email_address = trim($words_found[$i]); //cleaning filters $first_char = substr($email_address, 0, 1); if (!ctype_alpha($first_char)) $email_address = substr($email_address, 1, strlen($email_address)); /*while (!ctype_alpha($first_char)) { $email_address = substr($email_address, 1, strlen($email_address)); $first_char = substr($email_address, 0, 1); }*/ $last_char = substr($email_address, strlen($email_address) - 1, 1); if (!ctype_alpha($last_char)) $email_address = substr($email_address, 1, strlen($email_address)); /*while (!ctype_alpha($last_char)) { $email_address = substr($email_address, 0, strlen($email_address) - 1); $last_char = substr($email_address, strlen($email_address) - 1, 1); }*/ //I make sure that the extracted string is really an email address if (eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $email_address)) { $email_addresses_found[] = $email_address; $q = "SELECT email_address_id FROM ai_getemailaddresses WHERE email_address='".$email_address."'"; $result = mysql_query($q) or die('73 line'.mysql_error()); //I check if the email address already exists in database if (mysql_num_rows($result) == 0) { $q = "INSERT INTO ai_getemailaddresses(`email_address`) VALUES('$email_address')"; if (mysql_query($q)) { $new_email_addresses[] = $email_address; } } } } } //End - SECOND EXTRACTION ALGORITHMPoC pentru bagat in .txt din bd:
include('includes/connect_to_db.inc.php'); if (file_exists('_emailaddressesdb.txt')) { unlink('_emailaddressesdb.txt'); } $q = "SELECT email_address FROM ai_getemailaddresses ORDER BY email_address_id ASC"; $result = mysql_query($q) or die(mysql_error()); $email_addresses_saved = 0; while ($row = mysql_fetch_array($result)) { $file = fopen('_emailaddressesdb.txt', 'a'); if (fwrite($file, $row['email_address']."\r\n")) $email_addresses_saved += 1; } fclose($file); echo $email_addresses_saved.' email addresses saved';esti maret nene iti multumesc mult nu cred ca reusesc sa invat PHP dar macar sa am ideea sa traduc un script si tot ma chinui. Site-ul meu a fost atacat un pic de baieti pe cand aveam forumul activ si serverul unde am host mi-a bagat avertismentul. O sa ma ocup de el cat de curand acum sunt la experimentat si strans date despre PHP
tu ce editor de PHP folosesti?
Eu folosesc Notepad++. Nu recomand Dreamweaver.
Cat despre PHP, ca sa fi cu adevarat programator PHP trebuie sa stii OOP si MVC si sa codezi platforme folosind aceste doua tehnici de programare.
Oricum, programarea e grea. Trebuie sa ai multa rabdare.
Programez si eu in VB cu C++, Pascal, BD in SQL nu sunt tocmai novice dar PHP desi este un C++ inca imi face probleme
imi da o eroare in sintaxa si nu imi dau seama unde? Care este comentariu? cel cu // sau /*
Ambele sunt comentarii:
// e pentru o singura linie iar
/**/ e pentru mai multe linii.
Daca iti da o eroare de sintaxa ar trebui sa iti afiseze pe ecran la ce linie este eroarea. Te duci la respectiva linie si vezi ce este gresit.
asa este, cand am copiat pierdusem o * si imi deschidea o sintaxa din comentariu. Nu l-am facut inca functional, mai lucrez la platforma. cand il termin iti dau linkul sa iti dai o parere
Chiar as dori sa arunc o privire pe script. Ideal ar fi sa te folosesti cat mai mult de OOP si MVC cand scrii platforma.
@admin: de ce nu recomanzi dreamweaver? este mult superior notepad++
@admin: programarea e grea??? programarea nu e grea. iti trebuie doar un pic de pasiune si curiozitate pt ea. atat. si atunci va fi foarte usoara. vb din proprie experienta. iar php este cel mai usor limbaj de programare.
Nu recomand DW deoarece multi au tendinta sa creeze codul din click-uri si drag and drop-uri. Mai sunt si functiile alea de autocompletare. Toate astea nu fac decat sa iti faca rau fiindca lucrand asa nu o sa inveti niciodata sa scrii cod si sa intelegi ce faci acolo. Nu mai zic ca mai toti care folosesc DW nu cumpara licenta si folosesc un crack. Notepad++ e free si e suficient pentru programarea web.
Programarea este intr-adevar grea. Mai ales daca o studiezi singur. Nu toti au facut un liceu/facultate de mate-info. Sper sa intelegem amandoi acelasi lucru prin expresia “programare web”. Eu unul cred ca esti programator web doar atunci cand dezvolti platforme web folosind tehnicile de programare OOP si MVC. Intru de mult timp de forumuri si multi nu prea sunt familiarizati cu principiile acestor doua tehnici si culmea ei se considera web developeri.
@admin: chiar asta e ok la dreamweaver, ca sa iti completeze automat ce vrei sa faci. In acest fel scriu codul mult mai rapid. si cum adica “nu o sa inveti niciodata sa scrii cod si sa intelegi ce faci acolo”? prostie! crezi ca nu stiu ce am scris???
si ma repet inca o data: programarea este foarte usoara cat timp iti place. nam facut scoala in acest sens si sunt “programator web”. am invatat oop de cand ma stiu si lucrez numai in stil mvc. am frameworkul propriu. am la activ peste o suta de proiecte facute. si nu sunt toate din alea de prezentare. alea le faceam cand eram la inceput. acum fac magazine online si portale. cele mici le face altcineva care e “micut”. te rog sa nu sperii userii ca cine stie cine trebuie sa fii ca sa stii programare. pasiune si curiozitate sa ai si inveti cat ai clipi ( in maxim 6 luni poti face ORICE iti doreste sufletul
).
am sa fac in viitor un site inca care sa impartasesc si altora ceea ce am invatat.
Chiar ar fi grozav sa faci acel site in care sa impartasesti si cu altii cunostintele tale de programare web. Si asa nu prea gasesti multe tutoriale in romana de OOP si MVC pe net.
Si eu ca un novice as dori un astfel de site
hi to admin!
Roxanne ma numesc si as dori sa te intreb mai multe chestii in particular,probabil o sa zici ca pierzi timp…nu! acum cateva zile invatam ce este hack-ul,si crede-ma…am priceput foarte bine! happy…asa,as dori sa invat si cum sta chestia asta cu crawlerele si fiind fata si mai ales blondutza biggrin sunt mai grea de cap! daca se poate un id ceva? smile senszual_lips
by the way…inca sunt la inceput si caut un tutore!
Putem vb pe skype mai bine. Id-ul meu de skype e acceinterzis.ro.
SALUT. MA POATE AJUTA SI PE MINE CINEVA IN LEGATURA CU ACEST SCRIPT? VREAU SI EU SA EXTRAG E-MAIL DIN BAZA DE DATE DAR NU STIU CUM SA IL FOLOSESC!
I-AM DAT COPY SI PASTE INTR-UN NOTEPAD SI L-AM SALBAT SCRIPT.PHP, DAR NU S-A INTAMPLAT NIMIC CA SA SPUN ASA… CUM ALTCUMVA L-AS PUTEA FOLOSII? UN RASPUNS VA ROG. MULTUMESC ANTICIPAT. loss1k@yahoo.com