Сканирование по фамилии на сайте 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;
    }
1 декабря 2011 20:57

Artjom Kurapov (kurapov.name)
2 декабря 2011, 11:26

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

bolk (bolknote.ru)
2 декабря 2011, 12:11, ответ предназначен Artjom Kurapov (kurapov.name):

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

bolk (bolknote.ru)
2 декабря 2011, 12:12, ответ предназначен Artjom Kurapov (kurapov.name):

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

bolk (bolknote.ru)
2 декабря 2011, 12:14, ответ предназначен Artjom Kurapov (kurapov.name):

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

Artjom Kurapov (kurapov.name)
2 декабря 2011, 12:49

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

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

alexeit.myopenid.net (инкогнито)
2 декабря 2011, 13:10

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

alexeit.myopenid.net (инкогнито)
2 декабря 2011, 13:45

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

SiMM (mr-simm.livejournal.com)
2 декабря 2011, 14:40

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

Artjom Kurapov (kurapov.name)
2 декабря 2011, 15:00

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

Vladimir Moskva (fulc.ru)
2 декабря 2011, 15:07

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

bolk (bolknote.ru)
2 декабря 2011, 15:22, ответ предназначен Vladimir Moskva (fulc.ru):

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

bolk (bolknote.ru)
2 декабря 2011, 15:23, ответ предназначен alexeit.myopenid.net

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

bolk (bolknote.ru)
2 декабря 2011, 15:24, ответ предназначен SiMM (mr-simm.livejournal.com):

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

bolk (bolknote.ru)
2 декабря 2011, 15:27, ответ предназначен Artjom Kurapov (kurapov.name):

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

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

SiMM (mr-simm.livejournal.com)
2 декабря 2011, 16:05

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

bolk (bolknote.ru)
2 декабря 2011, 16:29, ответ предназначен SiMM (mr-simm.livejournal.com):

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

SiMM (mr-simm.livejournal.com)
3 декабря 2011, 10:33, ответ предназначен bolk (bolknote.ru):

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

SiMM (mr-simm.livejournal.com)
3 декабря 2011, 10:35

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

bolk (bolknote.ru)
3 декабря 2011, 12:31, ответ предназначен SiMM (mr-simm.livejournal.com):

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

http://roman.yankovsky.me/ (инкогнито)
3 декабря 2011, 14:14

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

bolk (bolknote.ru)
3 декабря 2011, 14:53, ответ предназначен http://roman.yankovsky.me/

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

v.bogatov@gmail.com (инкогнито)
16 декабря 2011, 17:30

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

bolk (bolknote.ru)
16 декабря 2011, 21:15, ответ предназначен v.bogatov@gmail.com

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)