Сканирование по фамилии на сайте 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;
}
А как же geni.com ? Флеш не нравится?
Комментарий для kurapov.name:
На MyHerritage тоже флеш. А чем нравится именно geni? А то изучать и перетаскивать туда дерево — долго. Описанный мною функционал (когда сервис сам ищет пересечения) там есть?
Комментарий для kurapov.name:
Ага, вижу. «If we find your relatives in other trees we can merge profiles that overlap». Надо будет поизучать. Но за отзывы чем понравился сервис, я был бы благодарен.
Комментарий для kurapov.name:
Быстро зарегистрировался. Пока ощущение, что возможностей в разы меньше.
Да, я давно туда не заходил и теперь смотрю они стали монетизировать активно его.. до 100 человек можно только добавить, раньше было удобней. А поиск что ты говорил у них был давно сделан, только в платной версии. У них что хорошо так совмещение профилей было продумано.. Что если два человека начали создавать свои деревья.. а потом оказалось что они друг друга знают, то их деревья можно совместить тоже (по именам, датам рождения и тп.)
Надо будет скачать весь gencom себе, а то глядишь и это отключат.
А я как раз сегодня в Geni начал активно дерево растить и подключать родственников. Теперь, видимо, придется всех перетаскивать на Heritage. Он выглядит поприличнее.
Посоветуйте как лучше не Heritage вводить географические названия
Гы… Если имя одного или обоих родителей неизвестно — зарегистрироваться не получится :(
Кстати на myheritage тоже ограничение на размер дерева, 250 человек.
«Heritage» с одной «r» пишется :)
Комментарий для fulc.ru:
Спасибо, поправил.
Комментарий для alexeit.myopenid.net:
Я не заморачиваюсь, ввожу максимум информации, что знаю. Страна, район, город/село и в комментарии название на момент рождения, если оно отличается. Или что имеется ввиду.
Комментарий для mr-simm.livejournal.com:
Это где так?
Комментарий для kurapov.name:
В бесплатной версии — да. Я купил платную, более того, меня бы насторожило, что я размещаю такие ценные для меня данные на каком-то сервисе, которому я денег не плачу́ и они мне ничего не обязаны. Откуда у них деньги и что будет, когда они у них закончатся?
Тут платный сайт, с понятными источниками доходов, с многолетней историей, с десятками миллионов пользователей.
На http://myheritage.com
В принципе, можно забить в родителя(ей) какую-нибудь ерунду, а потом её просто почистить.
Комментарий для mr-simm.livejournal.com:
Нет, не нужно. Например, когда я создаю семью, где с родителями что-то непонятно, я могу указать там только фамилию (фамилия-то известна? у материя — фамилия по мужу, есть отдельное поле). Конечно, если у меня нет надежды скоро узнать кто там родители, я просто не указываю.
Комментарий для Евгения Степанищева:
Вы говорите о том, что происходит уже ПОСЛЕ регистрации. А я — о первичной регистрации, для которой необходимы данные обоих родителей.
Ой, хотя нет, похоже я ошибаюсь — обязательна только фамилия отца, судя по звёздочкам — в общем, для детей из детдома или ничего не знающих об отце (довольно распространённый случай — матерей одиночек у нас много) процедура регистрации затруднена.
Комментарий для mr-simm.livejournal.com:
Думаю, можно им в поддержку написать, чтобы поправили.
А оттуда можно как-то экспортировать в читаемом виде данные? Ну на случай, если им чего-то в голову ударит и они сервис решать закрыть или сильно испортить
Комментарий для http://roman.yankovsky.me/:
За 90 рублей в месяц можно купить сервис резервного копирования, на сервера «Амазона» постоянно выгружается всё дерево в формате GEDCOM ( http://ru.wikipedia.org/wiki/Gedcom ), это легкочитаемый формат. С «Амазона» дерево можно списать себе.
Болк, а что ты думашь про privacy всего этого дела с онлайн-древом? точнее, про то, что вся эта информация (открытая) может быть как-то использована против тебя..
Комментарий для v.bogatov@gmail.com:
Там почти нет открытой информации. И я что-то не могу придумать как можно против меня её использовать.