База имен и фамилий

Discussion in 'PHP' started by Solker, 23 Jan 2010.

  1. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Понадобилась база английских имен и фамилий. Поискал в интернете, не нашел. Набрел на сайт с более-менее приличной базой, http://www.familytree.ru/.
    Заодно решил освоить curl, т.к. руки раньше не доходили.

    Написал простенький парсер вменяемых (без всяких там апострофов и прочей ерести) английских имен и фамилий с сайта http://www.familytree.ru/.

    PHP:
    <?php

    set_time_limit
    (0);
    parse('dbfamily.php','family.txt');
    parse('dbname.php','name.txt');

    function 
    parse($file_parse,$file_save)
    {
        
    $start 1;
        
    $reg '#<a href='.str_replace('.','\.',$file_parse).'\?pos=[0-9]+>([A-z]+)</a>#';
       
        while(
    true)
        {
            
    $url 'http://www.familytree.ru/ru/dbf/'.$file_parse;
            
    $post 'kpgdn=+%3E+&ipos='.$start;
            
    $start += 201;
           
            
    $ch curl_init(); 
                
    curl_setopt($chCURLOPT_URL$url);
                
    curl_setopt($chCURLOPT_HEADER1);
                
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
                if(
    $cookiecurl_setopt($chCURLOPT_COOKIE$cookie);
                
    curl_setopt($chCURLOPT_POST1);
                
    curl_setopt($chCURLOPT_POSTFIELDS$post);
                
    $res_curl curl_exec($ch);
                
    curl_close($ch);
               
            
    preg_match_all($reg,$res_curl,$matches);

            if(empty(
    $matches[0])) break;
            else
            {
                foreach(
    $matches[1] as $val$final[] = $val;
            }

            if(
    preg_match('/^Set-Cookie: (.*)/m'$res_curl$source_cookie))
                
    $cookie trim($source_cookie[1]);
        }
       
        
    $final_write implode(chr(10),$final);
        
    file_put_contents($file_save,$final_write);
    }

    ?>
    На выходе имеем примерно 7к имен и 30к фамилий.
    Забрать то, что имеем, можно по ссылке:
    http://solker.spb.ru/family.zip

    Для русских имен и фамилий я парсил сайт http://www.vse-familii.com/ и http://www.vse-imena.com/ соответственно.

    PHP:
    <?php 

    set_time_limit
    (0); 

    // Name 

    $url 'http://vse-imena.com/'
    $ch curl_init();  
        
    curl_setopt($chCURLOPT_URL$url);  
        
    curl_setopt($chCURLOPT_HEADER0); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
        
    $res_curl curl_exec($ch); 
        
    curl_close($ch); 

    preg_match_all('#imena-g[0-9]+\.html#',$res_curl,$female_pages); 
    preg_match_all('#imena-m[0-9]+\.html#',$res_curl,$male_pages); 


    $pre_all_pages array_merge($female_pages[0],$male_pages[0]); 
    $all_pages $pre_all_pages

    foreach(
    $pre_all_pages as $page

        
    $url 'http://vse-imena.com/'.$page

        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url);  
            
    curl_setopt($chCURLOPT_HEADER0); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
            
    $res_curl curl_exec($ch); 
            
    curl_close($ch); 
             
        
    $page str_replace('.html','',$page); 
        
    preg_match_all('#'.$page.'-[0-9]+\.html#i',$res_curl,$temp_pages); 
        foreach(
    $temp_pages[0] as $tmp) {
          if(
    $tmp$all_pages[] = $tmp
        }
         


    foreach(
    $all_pages as $page

        
    $url 'http://vse-imena.com/'.$page

        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url);  
            
    curl_setopt($chCURLOPT_HEADER0); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
            
    $res_curl curl_exec($ch); 
            
    curl_close($ch); 
             
        
    $res_curl iconv("windows-1251","utf-8"$res_curl);

        
    preg_match_all('#(<TD width=30% valign=top>|<br>)(.+?)(<br>|<\/td>)#i',$res_curl,$matches);
       
        foreach(
    $matches[0] as $source_name
        { 
            
    $name strip_tags($source_name);    

            
    var_dump('n: ' $name);

            if(!
    $name or $name == 'Заказать вытяжка кухня') continue; 
            if(
    strpos($name,' '))  
            { 
                
    $temp explode(' ',$name); 
                
    $name $temp[0]; 
            } 
            if(
    strpos($name,'.')) continue; 
            if(
    strlen($name) < 3) continue;
            if(
    ord(substr($name,0,1)) < 192 or ord(substr($name,0,1)) > 223) continue; 
             
            
    $names[] = $name
        } 


    sort($names); 

    $final_write implode(chr(10),$names); 
    file_put_contents('name_rus.txt',$final_write); 

    // Family 

    $url 'http://www.vse-familii.com/'
    $ch curl_init();  
        
    curl_setopt($chCURLOPT_URL$url);  
        
    curl_setopt($chCURLOPT_HEADER0); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
        
    $res_curl curl_exec($ch); 
        
    curl_close($ch); 

    preg_match_all('#familii-[0-9]+\.html#',$res_curl,$pre_all_pages); 
    $pre_all_pages $pre_all_pages[0]; 
    $all_pages $pre_all_pages

    $family = array();

    foreach(
    $pre_all_pages as $page

        
    $url 'http://www.vse-familii.com/'.$page
        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url);  
            
    curl_setopt($chCURLOPT_HEADER0); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
            
    $res_curl curl_exec($ch); 
            
    curl_close($ch); 
             
        
    $page str_replace('.html','',$page); 
        
    preg_match_all('#'.$page.'-[0-9]+\.html#i',$res_curl,$temp_pages); 
        foreach(
    $temp_pages[0] as $tmp)  
            if(
    $tmp$all_pages[] = $tmp


    foreach(
    $all_pages as $page

        
    $url 'http://www.vse-familii.com/'.$page

        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url);  
            
    curl_setopt($chCURLOPT_HEADER0); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
            
    $res_curl curl_exec($ch); 
            
    curl_close($ch); 

        
    $res_curl iconv("windows-1251""utf-8"$res_curl);
             
        
    preg_match_all('#(<TD width=30% valign=top>|<br>)(.+?)(<br>|<\/td>)#i',$res_curl,$matches); 
         
        foreach(
    $matches[0] as $source_name
        { 
            
    $name strip_tags($source_name);        
            if(!
    $name or $name == 'Заказать вытяжка кухня') continue; 

            if(
    strpos($name,' '))  
            { 
                
    $temp explode(' ',$name); 
                
    $name $temp[0]; 
            } 

            if(
    strpos($name,'.')) continue; 
            if(
    strlen($name) < 3) continue; 
            if(
    ord(substr($name,0,1)) < 192 or ord(substr($name,0,1)) > 223) continue; 

            
    // If surname already in array skip it.
            
    if(in_array($name$family)) continue;

            
    var_dump('f:' $name);
             
            
    $family[] = $name
        } 


    sort($family); 

    $final_write implode(chr(10),$family); 
    file_put_contents('family_rus.txt',$final_write); 

    ?>
    На выходе получил 17к фамилий и 14к имен.
    Забрать можно по ссылке:
    http://solker.spb.ru/family_rus.zip
     
    #1 Solker, 23 Jan 2010
    Last edited: 6 Oct 2015
    3 people like this.
  2. GlooK

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

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Думаю посту место в http://forum.antichat.ru/thread65761.html
     
  3. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Совсем позабыл про нее.
     
  4. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    Ты бы лучше базой поделился.
     
  5. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    mr.The
    Добавил в первое сообщение.
     
    1 person likes this.
  6. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Нашел интересную ссылку, жалко поздно.
    По ссылке добрый человек выложил базу на 9 мб.

    http://www.seocoder.org/2008/10/01/baza-angloyazychnyx-imen-i-familij/
     
  7. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Добавил парсер русских имен и фамилий для сайтов
    http://www.vse-familii.com/ и http://www.vse-imena.com/
     
  8. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Это раздел программирования, вы извратили понятие само слова "Программист", что тут может быть полезного для нормального кодера? Банальный парсинг странички с регуляркой. Пусть так и остается в отдельной теме, возможно кто-то с гугла прийдет, а засорять топики связанные с программированием не стоит.
     
  9. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Вообще-то, это намного полезнее 90% того, что выложено в "Полезных скриптах". Что касается англоязычных имен/фамилий - то данные переписи США доступны официально с указанием частоты употребления.

    http://www.census.gov/genealogy/names/names_files.html
     
  10. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Изначально, срочно нужен был антивирус, залез на torrents.ru и качнул Avira. Позже в поисках кряка в той же теме, узнал, что Avira раздает триальные ключи по 3 месяца на каждое мыло. Оттуда же узнал о забавном сервисе, которые генерирует мыло на 10 минут.

    Краткая инструкция для получения ключа выглядела так:
    Тут естественно в голове всплыло, что бы генерировать эти ключи каждые день автоматически. И по необходимости просто заходить на страницу и брать ключ с максимальным временем использования. Собственно нужна была база фамилий и имен, что бы это выглядело более менее правдоподобно, хотя потом оказалось, в те поля хоть мыло можно вписывать. Для этого и накатал скрипт представленный в первой темы.

    А вот собственно код сервиса, который я и хотел реализовать.
    PHP:
    <?php

    set_time_limit
    (0);

    $names file('name.txt');
    $name $names[rand(0,count($names))];

    $familys file('family.txt');
    $family $familys[rand(0,count($familys))];

    list(
    $mail,$cookie) = reg_new_mail();

    if(
    submit_form_avira($name,$family,$mail))
    {
        for(
    $i=0;$i<20;$i++)
        {
            if(
    check_mail($cookie))
            {
                echo 
    'Latter!'.chr(10);
                
    $link read_letter($cookie);
                list(
    $location,$cookie) = avira_login($link);
                
    $file get_avira_key($location,$cookie);
                
    $file_name 'Hbedv(Avira_Premium_Security_Suite_Valid_Until_'.date('d-m-Y',time()+60*60*24*90).').key';
                
    file_put_contents('keys/'.$file_name,$file);
                
                echo 
    $file_name.' created!';
                break;
            }        
            else
            {
                echo 
    'Wait...'.chr(10);
                
    sleep(10);
            }    
        }
    }

    function 
    submit_form_avira($name,$family,$mail)
    {
        
    $url 'https://license.avira.com/en/promotion-hylm9fbv7chaxs8zbl83';

        
    $ch curl_init();  
                
    curl_setopt($chCURLOPT_URL$url); 
                
    curl_setopt($chCURLOPT_HEADER1);
                
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
                
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
                
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
                
    $res_curl curl_exec($ch);
                
    curl_close($ch);
                
        
    preg_match_all('#action="(.+?)"#',$res_curl,$matches);
        
    $action $matches[1][1];

        
    preg_match('/^Set-Cookie: (.*)/m'$res_curl$source_cookie);
        
    $cookie trim($source_cookie[1]);

        
    $post "customerSalutationId=MIS&customerFirstname=$name&customerLastname=$family&customerEmail=$mail&customerCountryId=BI&buttonActivate=Request license now";
        
    $url 'https://license.avira.com/'.$action;

        
    $ch curl_init();  
                    
    curl_setopt($chCURLOPT_URL$url); 
                    
    curl_setopt($chCURLOPT_HEADER1);
                    
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
                    
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
                    
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
                    
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
                    
    curl_setopt($chCURLOPT_COOKIE$cookie);
                    
    curl_setopt($chCURLOPT_POST1);
                    
    curl_setopt($chCURLOPT_POSTFIELDS$post);
                    
    $res_curl curl_exec($ch);
                    
    curl_close($ch);
                    
        return 
    $res_curl;
    }

    function 
    reg_new_mail()
    {
        
    $url 'http://10minutemail.com/10MinuteMail/index.html';
        
        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url); 
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res_curl curl_exec($ch);
            
    curl_close($ch);
            
        
    preg_match('/^Set-Cookie: (.*)/m'$res_curl$source_cookie);
        
    $cookie trim($source_cookie[1]);
        
        
    preg_match('#<br \/>(.+) is your temporary e-mail address#i',$res_curl,$source_mail);
        
    $mail $source_mail[1];
        
        return 
    $array = array($mail,$cookie);
    }

    function 
    check_mail($cookie)
    {
        
    $url 'http://10minutemail.com/10MinuteMail/index.html';
        
        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url); 
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_COOKIE$cookie);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res_curl curl_exec($ch);
            
    curl_close($ch);
        
        if(
    preg_match('#[email protected]#',$res_curl,$match))
            return 
    $res_curl;
        else return 
    false;
    }

    function 
    read_letter($cookie)
    {
        
    $url 'http://10minutemail.com/10MinuteMail/index.html?dataModelSelection=message%3Aemails%5B0%5D&actionMethod=index.xhtml%3AmailQueue.select';
        
        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url); 
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_COOKIE$cookie);
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res_curl curl_exec($ch);
            
    curl_close($ch);
        
        
    preg_match('#^https:\/\/license\.avira\.com\/en\/hs-(.+)\.#m',$res_curl,$matches);
        
    $link 'https://license.avira.com/en/hs-'.$matches[1];
        return 
    $link;
    }

    function 
    avira_login($link)
    {
        
    $url $link;

        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url); 
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
            
    curl_setopt($chCURLOPT_COOKIESESSION1);
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION0);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res_curl curl_exec($ch);
            
    curl_close($ch);
        
        
    preg_match('/^Set-Cookie: (.*)/m'$res_curl$source_cookie);
        
    $cookie trim($source_cookie[1]);

        
    preg_match('/^Location: (.*)/m'$res_curl$source_location);
        
    $location trim($source_location[1]);
        
        return 
    $array = array($location,$cookie);
    }

    function 
    get_avira_key($location,$cookie)
    {
        
    $url 'https://license.avira.com/en/'.$location;

        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url); 
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
            
    curl_setopt($chCURLOPT_COOKIE$cookie);
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION0);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res_curl curl_exec($ch);
            
    curl_close($ch);
        
        
    preg_match('#href="\/customer\/(.+?)"#',$res_curl,$matches);

        
    $key_link 'https://license.avira.com/customer/'.$matches[1];
        
    $url $key_link;
        
        
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL$url); 
            
    curl_setopt($chCURLOPT_HEADER0);
            
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
            
    curl_setopt($chCURLOPT_COOKIE$cookie);
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION0);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res_curl curl_exec($ch);
            
    curl_close($ch);
            
        return 
    $res_curl;
    }
    ?>
    Это дело кидается в крон и выполняется каждые сутки для генерации нового ключа.

    И собственно готовый результат.
    http://solker.spb.ru/avira/
     
    2 people like this.
  11. olegator

    olegator Member

    Joined:
    10 Feb 2009
    Messages:
    17
    Likes Received:
    38
    Reputations:
    0
    Классно...ключ на 3 месяца!))))
     
  12. Solker

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

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Я занимаюсь аутсорсингом фирм, пришел, влепил ключ на 3 месяца.
    Через 3 месяца пришел, обновил, денег получил.
     
  13. GlooK

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

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Маладца, теперь скрипт "Полезный" ;)
     
  14. djazatik

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

    Joined:
    21 Apr 2009
    Messages:
    56
    Likes Received:
    105
    Reputations:
    22
    Киньте плиз в ПМ базу русских фамилий.
     
  15. uhbif19

    uhbif19 New Member

    Joined:
    26 Dec 2009
    Messages:
    9
    Likes Received:
    1
    Reputations:
    0
    Перезалейте, пожалуйста.