Однажды вечером, я как обычно сидел за компьютером и гуглил яндекс. Но ни на одном сайте нужной мне информации не нашлось. Я уже было отчаялся, когда мне на глаза попалась нужная ссылка, но как назло, сайт был удален, и выдернуть информацию можно было только из кэша гугла или из вебархива. И я решил написать небольшой парсер вэбархива на php.
Задача парсера заключалась в том, чтобы найти все сохраненные страницы нужного сайта, выбрать из них самые свежие и выдать ссылки на них.
Собственно для того чтобы получить все ссылки которые есть в архиве, нужно открыть страницу
$content=file_get_contents('http://web.archive.org/web/*/site.ru*');
где site.ru - искомый сайт.
Далее нужно пропарсить страницу и определить дату последнего добавления в архив каждой страницы site.ru.
preg_match_all("/(web\/query\?q([a-zA-Z0-9.&;_=%+-]){1,})\">(.*)/i",$content,$matches,PREG_SET_ORDER); //находим все ссылки у которых несколько копий в архиве
preg_match_all("/web\/([0-9]{14})(.*)\">(.*)/i",$content,$matches1,PREG_SET_ORDER); // находим ссылки у которых только одна копия
preg_match_all("/(.*)/i",$content,$last,PREG_SET_ORDER); //парсим дату последнего обновления страницы
Ссылка на страницу, которую вэбархив сканировал только один раз выглядит примерно так:http://web.archive.o...te.ru/index.phpгде 20111110094202 - дата и время сканирования (2011.11.10 09:42:02). Теперь, когда у нас есть даты последнего обновления, мы можем перевести их в требуемый формат:
function convert($str){
$tmp=str_replace(",","",$str);
$tmp=strtotime($tmp);
$m=idate("m",$tmp);
if($m<10)$m="0".$m;
$d=idate("d",$tmp);
if($d<10)$d="0".$d;
$tmp=idate("Y",$tmp).$m.$d."235959";
return $tmp;
}
Ну и наконец обрабатываем все ссылки:
foreach($matches as $m){
$m[1]=convert($m[1]);
echo "<a href="http://web.archive.org/web/$m/'.$m[3].'">'.$m[3]."</a><br>\r\n";
}
foreach($matches1 as $mc){
echo "<a href=\"http://web.archive.org/web/".$mc[1].$mc[2]."\">".$mc[2]."</a><br>\r\n";
}