парсер email

Discussion in 'PHP' started by blaga, 28 Sep 2006.

  1. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Привет всем. У меня тут такая задача. мне нужна написать парсер email на PHP. Вроде бы что сложного? Но я элементарно не могу придумать хотя бы нормальный алгоритм. У меня пока два незаконченных варианта.
    1. Искать по тексту @ а затем идти до пробела или одинарной кавычки. Проблема в том как идти? Ведь нужно и слева и справа отследить знаки. Можно ли это сделать?
    2. Регулярные выражения. Тут я вообще на стопоре сижу... Думаю искать по шаблону мыльник затем заносить в массив после всего писать в файл. Хотя тут тоже все очень размыто и к тому же я не умею еще с ними работать.
    Если у кого то есть идеи по этому поводу, поделитесь пожалуйста. Заранее спасибо всем.
     
  2. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    НУ на регулярнике может так?!:
    PHP:
    "/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2.3}/i" 
    или
    PHP:
    "/^[-0-9a-z_]+@[-0-9a-z_^\.]+\.[a-z]{2,3}$/i"
    Ну а вобщем надо будет смотреть страницы, которые будуи парситься...
    Вот... хех, вроде работает.
    PHP:
    <? 
      for(
    $i=1;$i<3000;$i++){ 
        
    $filename 'http://www.***.ru/center.php?chp=showorg&num='.$i
        echo 
    $i.". "
        
    $str file_get_contents($filename); 
        
    preg_match_all('|href="mailto:([^"]*)"|is',$str,$out); 
        if(empty(
    $out[1][0])) echo " no mail"
        else{ 
          echo 
    " get ".$out[1][0]; 
          
    fwrite($handler,$out[1][0]."\n"); 
        } 
        echo 
    "\n"
      } 
      
    fclose($handler); 
    ?> 

    Скачивает страницу в переменную, разбирает её спомощью регулярного выражения и если мыло нашёл на странице, то пишет в файл.
     
    #2 Ch3ck, 28 Sep 2006
    Last edited: 28 Sep 2006
    2 people like this.
  3. r0

    r0 Elder - Старейшина

    Joined:
    17 Jul 2005
    Messages:
    450
    Likes Received:
    149
    Reputations:
    147
    Скажем так:
    1.Считываем содержимое файла в массив
    2. Разбиваем массив до space (чтобы каждое слово было отделено от другого)
    3. Убираем лишние пробелы, кавычки и т.п.
    4. Согласно шаблону находим адресс+дамп в массив.
    5. Вывод

    Как уже показал Dr.Check, иди на php.net и прочти про preg_match_all().
     
  4. KPOT_f!nd

    KPOT_f!nd положенец общага

    Joined:
    25 Aug 2006
    Messages:
    1,074
    Likes Received:
    502
    Reputations:
    65
    Чел скачать мануал по Php. Выучи и потом сможешь написать такой скрипт!
     
  5. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Всем спасибо. Только все дело в том что мне нужен был парсер из БД или тхт файла. Пытался изменить скрипт от Dr.Check под себя но что то я совсем расслабился.:( Буду дальше напрягать оставшиеся мозги. :)
     
  6. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    ну убираем цикл и меняем filename на имя текстового файла и всё собственно:
    PHP:
    <?  
        
    $filename 'file.txt';  
        echo 
    $i.". ";  
        
    $str file_get_contents($filename);  
        
    preg_match_all('|href="mailto:([^"]*)"|is',$str,$out);  
        if(empty(
    $out[1][0])) echo " no mail";  
        else{  
          echo 
    " get ".$out[1][0];  
          
    fwrite($handler,$out[1][0]."\n");  
        }  
        echo 
    "\n";  
      
    fclose($handler); 
    ?> 
    Правда непонятно в каком виде там email ...
     
  7. n4n0bit

    n4n0bit Elder - Старейшина

    Joined:
    11 Sep 2006
    Messages:
    52
    Likes Received:
    14
    Reputations:
    20
    blaga
    толька сразу добивайся универсальности парсинга,б делай уклон не толька на mailto: но и прост на \w+@\w+\.\w+ т.е. на поиск @ и . между и после где идут буквы и цифры и знаки подчеркивания и еще тирэ, далее некоторые пишут типа domain[zz]mail[ss]ru тут тожу делай регесп. Еще сделай что бы твой скрипт скакал по сайту сам и на лету добовлял результ парсинга уже либо в файл либл еще куда.

    Sбор ссылок:

    1. получаем результат в виде готовых ссылок;
    1.1 конектимся по етим ссылкам в цикле foreach, однавременно текущий урл заносим в качестве ключа в ХЕШ а значение ставим в '1' (уже проканектились), так поступаем со всеми ссылками 1-го результата;
    1.2 парсим контент от конекта этих ссылок (1.1), заносим их в ХЕШ в качестве ключа, а значение устонавливаем в '0' (не конектились), причем уже включаем проверку на наличия уже существующих ключей.
    2.0 Далее мы конектимся уже во 2й раз по ключам, значение которых выставлено в '0', опять потом проверяем контент на наличия сыылок,парсим их , проверям на наличия уже в хеше, добовляем.
     
    #7 n4n0bit, 30 Sep 2006
    Last edited: 1 Oct 2006
  8. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Кто нибудь видел бд например от phpBB? Там нету мейлто. Там только @ искать... Все равно всем спасибо...
     
  9. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    А вот скажи, нафиг, писать парсер для БД, если можно использовать для этих нужд phpMyAdmin??? Видео нитрекса посмотри. Он как раз там этим занимался.