Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: e-mail парсер.
 
 автор: Holodok   (28.09.2006 в 20:48)   письмо автору
 
 

Привет всем. У меня тут такая задача. мне нужна написать парсер email на PHP. Вроде бы что сложного? Но я элементарно не могу придумать хотя бы нормальный алгоритм. У меня пока два незаконченных варианта.
1. Искать по тексту @ а затем идти до пробела или одинарной кавычки. Проблема в том как идти? Ведь нужно и слева и справа отследить знаки. Можно ли это сделать?
2. Регулярные выражения. Тут я вообще на стопоре сижу... Думаю искать по шаблону мыльник затем заносить в массив после всего писать в файл. Хотя тут тоже все очень размыто и к тому же я не умею еще с ними работать.
Если у кого то есть идеи по этому поводу, поделитесь пожалуйста. Заранее спасибо всем

   
 
 автор: Axxil   (28.09.2006 в 21:04)   письмо автору
 
   для: Holodok   (28.09.2006 в 20:48)
 

Я помню стырил почти все email с жёлтых страниц и спользуя только регулярное выражение:

$pattern = '|"mailto:([^"]*)"|is';

А в общем случае надо смотреть страницы которые парситься будут

   
 
 автор: Holodok   (28.09.2006 в 21:16)   письмо автору
 
   для: Axxil   (28.09.2006 в 21:04)
 

Ну вот допустим, взять .html страницу или .txt файл. Прочитать его функциями file или fgets разница будет какая-либо? Если можно пример, пожалуйста.

   
 
 автор: Axxil   (28.09.2006 в 21:24)   письмо автору
 
   для: Holodok   (28.09.2006 в 21:16)
 

Вот реальный, рабочий парсер:

<?
  
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);
?>

Скачивает страницу в переменную, разбирает её спомощью регулярного выражения и если мыло нашёл на странице, то пишет в файл.

   
 
 автор: Holodok   (28.09.2006 в 21:29)   письмо автору
 
   для: Axxil   (28.09.2006 в 21:24)
 

Сказать спасибо - не сказать ничего... :)

   
 
 автор: Holodok   (29.09.2006 в 16:44)   письмо автору
 
   для: Holodok   (28.09.2006 в 21:29)
 

Тут копался, так чё-т и не вышло, а если выдирать мыла из текстовика или из БД ?????
Помогите плз.

   
 
 автор: Axxil   (29.09.2006 в 17:41)   письмо автору
 
   для: Holodok   (29.09.2006 в 16:44)
 

так откуда всё же?
Нужен пример текстового файла.
Если из БД то как выглядят данные в БД.
Больше конкретики...

   
 
 автор: Night_Charter   (29.09.2006 в 17:15)   письмо автору
 
   для: Holodok   (28.09.2006 в 20:48)
 

Ув. администрация!
Предлагаю закрыть тему, лучше даже удалить.

   
 
 автор: Axxil   (29.09.2006 в 17:39)   письмо автору
 
   для: Night_Charter   (29.09.2006 в 17:15)
 

Уважаемый Night_Charter агрументируйте пожалуйста своё предложение.

   
 
 автор: Holodok   (29.09.2006 в 17:50)   письмо автору
 
   для: Axxil   (29.09.2006 в 17:39)
 

Ну ладно, с БД разобрался с помощью phpMyaddmin.
А вот с текстовиком, бы помочь...
В текстовике, обычный текст, сплошняком, в несколько строк

   
 
 автор: Axxil   (29.09.2006 в 17:58)   письмо автору
 
   для: Holodok   (29.09.2006 в 17:50)
 

ну убираем цикл и меняем filename на имя текстового файла и всё собственно:

<? 
    $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 ...

   
 
 автор: Holodok   (29.09.2006 в 19:02)   письмо автору
 
   для: Axxil   (29.09.2006 в 17:58)
 

Ну пусть в текстовом файле они в обычном виде, типа : mail@mail.ru
То как я понимаю их надо проверять таким выражением?:

 "/^[-0-9a-z_]+@[-0-9a-z_^\.]+\.[a-z]{2,3}$/i"  

Хм, только вот не особо выходит

   
 
 автор: kasmanaft   (29.09.2006 в 19:17)   письмо автору
 
   для: Holodok   (29.09.2006 в 19:02)
 


^\.]

Для того, чтобы запретить точку, ее достаточно не писать в скобки ...
а так это отрицанием не будет ... таким образом вы разрешили в адресе
использовать знаки ^ и .

"/^[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,3}$/i"  

   
 
 автор: Holodok   (29.09.2006 в 19:51)   письмо автору
 
   для: kasmanaft   (29.09.2006 в 19:17)
 

Мамой прощу ))))))
Можно пример?

   
 
 автор: Axxil   (30.09.2006 в 10:34)   письмо автору
 
   для: Holodok   (29.09.2006 в 19:51)
 

Блин...
Пример чего????

   
 
 автор: Holodok   (30.09.2006 в 17:37)   письмо автору
 
   для: Axxil   (30.09.2006 в 10:34)
 

Ну, в предыдущем примере, он же ищёт по mailto:. Но если это обычный текстовый документ без html тегов ??? И просто надо выбрать из текстовика все мыла(тоесть искать не по mailto, а по @), и записать в жругой текстовик.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования