Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Сканирование по фамилии на сайте MyHeritage

Я «дерево» своих родственников храню на сайте «MyHeritage» (сейчас там 543 человека, но это включая очень дальних). На сайте есть интересная функция, киллер-фича, буквально — он самостоятельно ищет совпадения (даже неточные) людей из вашего в деревьях других пользователей. Отталкивается от структуры и заполенных полей, учитывая, что поля профилей могут быть заполнены с ошибками.

На сайте зарегистрирован 61 миллион пользователей и заведено 861 миллион профилей, так что функция имеет смысл. Наша с женой практика это подтверждает — нашлись три дерева её родственников.

У меня из родни пока никто не нашёлся, поэтому я решил поискать сам. Написал скрипт, который сканирует выдачу поиска по сайту и выдаёт администраторов найденных сайтов. Открываете полученные УРЛы в браузере и пишете всем им письмо. Автоматическую рассылку я делать не стал, смысла нет, на сайте полный набор защиты — разные виды «капчи» и лимит на количество сообщений в сутки. У меня получилось порядка 35 ссылок на мою фамилию, ради этого делать полную автоматику не интересно.

<?php
    $SURNAME = array('Иванов', 'Иванова');
    $EXCLUDETREE = array(111111); // дерево, которое надо пропустить (например, ваше собственное)

    $MANMASK = 'http\://www\.myheritage\.com/person\-(\d+)_(\d+)_(\d+)/[^"]+';
    $CONTACTMASK = 'contactWebmasterViaInbox\((\d+)\)';
    $CONTACTURL = 'http://www.myheritage.com/site-%d/t?lang=RU';
    $URL = 'http://www.myheritage.com/FP/smart-research-search.php?offset=%d&l=%s';

    $trees = array();

    $context = stream_context_create(array(
        'http' => array(
            'method' => 'GET',
            'header' => "User-agent: Opera/9.80 (Darwin x86_64; U; Edition Next; ru) Presto/2.10.238 Version/12.00\r\n".
                        "Accept-encoding: gzip",
            'protocol_version' => PHP_VERSION >= 5.3 ? '1.1' : '1.0',
            'timeout' => 5,
        )
    ));

    foreach ($SURNAME as $surname) {
        echo 'Поиск по фамилии «', $surname, "».\n";

        for ($i = 0;;$i += 10) {
            echo 'Смещение: ', $i;

            $content = DecodeResponse(file_get_contents(sprintf($URL, $i, urlencode($surname)), false, $context), $http_response_header);

            echo ", длина полученного документа: ", strlen($content), " байт, ";

            if (preg_match_all("!$MANMASK!", $content, $m)) {
                echo 'найдено записей: ', $peoplecount = count($m[0]), ".\n";

                $trees = array_merge($trees, $m[3]);
            } else {
                $peoplecount = 0;
                echo "записей не найдено.\n";
            }

            if ($peoplecount != 10) {
                break;
            }
        }
    }

    $trees = array_diff(array_unique($trees), $EXCLUDETREE);

    echo 'Найдено деревьев: ', count($trees), ".\n";

    foreach ($trees as $id) {
        $content = DecodeResponse(file_get_contents(sprintf($CONTACTURL, $id), false, $context), $http_response_header);

        if (preg_match("!$CONTACTMASK!", $content, $m)) {
            echo "http://www.myheritage.com/FP/inbox.php?lang=RU&compose=1&recipient={$m[1]}&type=1\n";
        }
    }

    function DecodeResponse($content, $headers) {
        foreach ($headers as $header) {
            if (stripos($header, 'Content-Encoding:') === 0 && strpos($header, 'gzip') !== false) {
                return gzinflate(substr($content, 10));
            }
        }

        return $content;
    }
23 комментария
Artjom Kurapov (kurapov.name) 2011

А как же geni.com ? Флеш не нравится?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для kurapov.name:

На MyHerritage тоже флеш. А чем нравится именно geni? А то изучать и перетаскивать туда дерево — долго. Описанный мною функционал (когда сервис сам ищет пересечения) там есть?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для kurapov.name:

Ага, вижу. «If we find your relatives in other trees we can merge profiles that overlap». Надо будет поизучать. Но за отзывы чем понравился сервис, я был бы благодарен.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для kurapov.name:

Быстро зарегистрировался. Пока ощущение, что возможностей в разы меньше.

Artjom Kurapov (kurapov.name) 2011

Да, я давно туда не заходил и теперь смотрю они стали монетизировать активно его.. до 100 человек можно только добавить, раньше было удобней. А поиск что ты говорил у них был давно сделан, только в платной версии. У них что хорошо так совмещение профилей было продумано.. Что если два человека начали создавать свои деревья.. а потом оказалось что они друг друга знают, то их деревья можно совместить тоже (по именам, датам рождения и тп.)

Надо будет скачать весь gencom себе, а то глядишь и это отключат.

alexeit.myopenid.net 2011

А я как раз сегодня в Geni начал активно дерево растить и подключать родственников. Теперь, видимо, придется всех перетаскивать на Heritage. Он выглядит поприличнее.

alexeit.myopenid.net 2011

Посоветуйте как лучше не Heritage вводить географические названия

SiMM (mr-simm.livejournal.com) 2011

Гы… Если имя одного или обоих родителей неизвестно — зарегистрироваться не получится :(

Artjom Kurapov (kurapov.name) 2011

Кстати на myheritage тоже ограничение на размер дерева, 250 человек.

Vladimir Moskva (fulc.ru) 2011

«Heritage» с одной «r» пишется :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для fulc.ru:

Спасибо, поправил.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для alexeit.myopenid.net:

Посоветуйте как лучше не Heritage вводить географические названия

Я не заморачиваюсь, ввожу максимум информации, что знаю. Страна, район, город/село и в комментарии название на момент рождения, если оно отличается. Или что имеется ввиду.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для mr-simm.livejournal.com:

Гы… Если имя одного или обоих родителей неизвестно — зарегистрироваться не получится :(

Это где так?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для kurapov.name:

Кстати на myheritage тоже ограничение на размер дерева, 250 человек.

В бесплатной версии — да. Я купил платную, более того, меня бы насторожило, что я размещаю такие ценные для меня данные на каком-то сервисе, которому я денег не плачу́ и они мне ничего не обязаны. Откуда у них деньги и что будет, когда они у них закончатся?

Тут платный сайт, с понятными источниками доходов, с многолетней историей, с десятками миллионов пользователей.

SiMM (mr-simm.livejournal.com) 2011

Это где так?

На  http://myheritage.com
В принципе, можно забить в родителя(ей) какую-нибудь ерунду, а потом её просто почистить.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для mr-simm.livejournal.com:

Нет, не нужно. Например, когда я создаю семью, где с родителями что-то непонятно, я могу указать там только фамилию (фамилия-то известна? у материя — фамилия по мужу, есть отдельное поле). Конечно, если у меня нет надежды скоро узнать кто там родители, я просто не указываю.

SiMM (mr-simm.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Вы говорите о том, что происходит уже ПОСЛЕ регистрации. А я — о первичной регистрации, для которой необходимы данные обоих родителей.

SiMM (mr-simm.livejournal.com) 2011

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для mr-simm.livejournal.com:

Думаю, можно им в поддержку написать, чтобы поправили.

roman.yankovsky.me/ 2011

А оттуда можно как-то экспортировать в читаемом виде данные? Ну на случай, если им чего-то в голову ударит и они сервис решать закрыть или сильно испортить

Евгений Степанищев (bolknote.ru) 2011

Комментарий для http://roman.yankovsky.me/:

За 90 рублей в месяц можно купить сервис резервного копирования, на сервера «Амазона» постоянно выгружается всё дерево в формате GEDCOM ( http://ru.wikipedia.org/wiki/Gedcom ), это легкочитаемый формат. С «Амазона» дерево можно списать себе.

v.bogatov@gmail.com 2011

Болк, а что ты думашь про privacy всего этого дела с онлайн-древом? точнее, про то, что вся эта информация (открытая) может быть как-то использована против тебя..

Евгений Степанищев (bolknote.ru) 2011

Комментарий для v.bogatov@gmail.com:

Там почти нет открытой информации. И я что-то не могу придумать как можно против меня её использовать.