BOROZDILKA.RU

на главную | пишите нам | версия для печати

Автоматическое сохранение сайта из копии поискового сервера

Предисловие

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

Поиск подходящего расширения

При выборе подходящих расширений, я остановился на следующих (с указанием версий), в порядке их отсеивания: DownThemAll! 2.0.1, FireSaver 1.0.2, ScrapBook Plus 1.8.17.31.

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

FireSaver – обладает минимумом функций, что и привлекло моё внимание. Потратив минут пять, изменил форму и её обработчик. Но, ожидаемого эффекта не последовало. Похоже, у нас с разработчиком данного расширения разное понятие о словосочетании «Site Grabber». Он и без моих изменений сохраняет только текущую страницу, после чего, она даже теряет связь с сохранёнными рядом картинками и таблицами стилей. Единственное, что понравилось в расширении – симпатичная иконка.

Форма расширения FireSaver
Форма расширения FireSaver

Форма расширения FireSaver с добавленным полем
Форма расширения FireSaver с добавленным полем

ScrapBook Plus – о нём уже есть статьи на сайте. Кратко скажу, что его назначение – создавать локальную копию сайта, отдельной страницы или выделенного фрагмента страницы. В принципе, это то, что нам нужно.

Модификация расширения

По сравнению с FireSaver, ScrapBook Plus гораздо функциональнее, а значит, больше кода и, соответственно, сложнее в нём разобраться. Мне потребовалось не больше часа, при том, что я абсолютно не знаком с XUL-ем и не особо увлекался JavaScript-ом. В данном случае мне показалось не целесообразным выискивать кусок кода, отвечающий за формирование элементов формы, а потом отслеживать всю цепочку передачи параметров из формы в обработчик. Этим займусь как-нибудь в другой раз, а пока жёстко пропишем, что все загружаемые страницы берутся из сохранённых копий поискового сервера.

Для этого в архиваторе открываем файл «scrapbook.jar» (только предварительно создайте копию, чтобы было проще вернуть всё назад), который находится в папке

*:\Documents and Settings\Имя пользователя\Application Data\Mozilla\Firefox\Profiles\********.default\extensions\scrapbookplus@addons.mozilla.org\chrome

Если не знаете, как это сделать, то измените его расширение на «.zip», но не забудьте переименовать обратно после наших манипуляций.

Теперь находим в этом архиве файл «capture.js» по пути «content\scrapbook», открываем его в блокноте или любом другом подобном редакторе. Находим строку «start : function(aOverriddenURL)». И в теле этой функции меняем строку

sbInvisibleBrowser.load(url);

на

sbInvisibleBrowser.load('http://hghltd.yandex.net/yandbtm?fmode=inject&url=' + url);

А также строку

this.sniffer = new sbHeaderSniffer(url, gRefURL);

на

this.sniffer = new sbHeaderSniffer('http://hghltd.yandex.net/yandbtm?fmode=inject&url=' + url, gRefURL);

При работе расширения получим, что ссылка, например, «http:// домен/страница» будет меняться на «http://hghltd.yandex.net/ yandbtm?fmode=inject&url= http:// домен/страница». Стоит отметить, что данное изменение внешне не будет заметно, потому что подмена адреса происходит непосредственно перед скачиванием файла и на всех формах будут видны обычные ссылки, как будто закачка происходит с самого сайта.

Сохраняем обновлённый файл в архив, меняем расширение обратно на «jar». Теперь ScrapBook Plus будет вместо действующих страниц выкачивать их копии, хранящиеся на поисковом сервере (если они конечно есть).

От себя добавлю, что до лучших времён оставил обе копии файла «scrapbook.jar».

Энтузиастам

Если вы хотите довести до конца данную работу, могу дать несколько советов:

  • сначала найдите в исходном коде, где формируется окно «ScrapBook - Настройки сохранения веб-страницы», добавьте туда поле, отвечающее за префикс;
  • разберитесь, как сохраняются и загружаются настройки этих параметров по-умолчанию;
  • отследите, как передаются выбранные параметры в обработчик, и прописанную константой строку замените на свою переменную, отвечающую за новый параметр;
  • не забывайте, что на всех формах будут отображаться ссылки, ведущие на сам сайт, а не на его копию, что, скорее всего, не правильно, хотя в некоторых случаях даже удобно.

А главное, не забывайте, что при обновлении этот файл, скорее всего, будет перезаписан, поэтому позаботьтесь о резервной копии, или свяжитесь с разработчиком, чтобы он внёс ваши изменения в следующую сборку.