goomod + 1C
Я большой поклонник игры World of Goo. Однажды пройдя ее полностью и влюбившись в смешные шарики Goo, прекрасную физику и атмосферу игры я не успокоился и выкачал все доступные дополнительные уровни, так называемые mod’ы, созданные фэнами этой игрушки. На тот момент, когда я ее проходил, а это было где-то в середине 2009 года, на сайте было негусто уровней. Помимо этого выкачал кучу разного видео, оформлений, других игрушек автора и других интересных фич, создав тем самым своего рода анталогию игры у себя на компьютере. И вот недавно мне понадобилось освободить место на компе. Взор пал на увесистую папку с игрушками. Чтобы залить это все дело на диск, я решил зайти на сайт, проверить, не добавилось ли там еще новых уровней. Количество добавившихся модов превзошло все мои ожидания и поэтому, чтобы не выкачивать их всех вручную я решил натравить на сайт Offline Explorer. Мне удалось выкачать весь сайт, но к сожалению, как я ни старался, не смог выдрать и сами вложения. Так как из языков «программирования» у меня сейчас на компе стоит только 2С’ка, то буквально за полчаса родилась обработка, которая парсит файлы на предмет ссылок на файлы с расширением .goomod 🙂 Дальше — дело техники: в редакторе PSPad с помощью макроса привести внутренние ссылки во внешние и стравить это все дело Download Монстру. Вуаля 😉 В данной обработке расширение можно указать свое. В данном виде обработка парсит внутренние ссылки, начинающиеся с ../, но раскомментировав строки 31 и 35, и закомментировав, соответсвенно, строки 32 и 36 можно добится парсинга http:// ссылок. Привожу код обработки:
Процедура КнопкаВыполнитьНажатие(Кнопка) gooFiles = Новый СписокЗначений; Если ЗначениеЗаполнено(Каталог) Тогда СписокФайлов = НайтиФайлы(Каталог, "*.*"); Для каждого htmlFile Из СписокФайлов Цикл ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(htmlFile.ПолноеИмя); Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл ОбработкаПрерыванияПользователя(); СтрокаДокумента = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); tmpСтрокаДокумента = СтрЗаменить(СтрокаДокумента, Символ(10), " "); ПозицияРасширения = Найти(tmpСтрокаДокумента, "." + РасширениеИскомыхФайлов); Пока ПозицияРасширения <> 0 Цикл Для поз = 3 По ПозицияРасширения Цикл //http:// ../ //1234567 123 Если Сред(tmpСтрокаДокумента, ПозицияРасширения - поз, 1) = "/" Тогда //Если Сред(tmpСтрокаДокумента, ПозицияРасширения - поз - 1, 1) = "/" Тогда //http:// Если Сред(tmpСтрокаДокумента, ПозицияРасширения - поз - 1, 1) = "." И Сред(tmpСтрокаДокумента, ПозицияРасширения - поз - 2, 1) = "." Тогда //../ //gooFiles.Добавить(Сред(tmpСтрокаДокумента, ПозицияРасширения - поз - 6, ПозицияРасширения - (ПозицияРасширения - поз - 6) + СтрДлина(РасширениеИскомыхФайлов) + 1)); gooFiles.Добавить(Сред(tmpСтрокаДокумента, ПозицияРасширения - поз - 2, ПозицияРасширения - (ПозицияРасширения - поз - 2) + СтрДлина(РасширениеИскомыхФайлов) + 1)); прервать; КонецЕсли; КонецЕсли; КонецЦикла; tmpСтрокаДокумента = Сред(tmpСтрокаДокумента, ПозицияРасширения + СтрДлина(РасширениеИскомыхФайлов) + 1); ПозицияРасширения = Найти(tmpСтрокаДокумента, "." + РасширениеИскомыхФайлов); КонецЦикла; НомерСтроки = НомерСтроки + 1; КонецЦикла; КонецЦикла; КонецЕсли; //удалим дубликаты УдаленныеЭлементы = 0; Для file = 0 по gooFiles.Количество() - 1 Цикл Для file_tmp = 0 по gooFiles.Количество() - 1 Цикл Если file_tmp = file - УдаленныеЭлементы Тогда продолжить КонецЕсли; Если gooFiles[file - УдаленныеЭлементы].Значение = gooFiles[file_tmp].Значение Тогда gooFiles.Удалить(file - УдаленныеЭлементы); УдаленныеЭлементы = УдаленныеЭлементы + 1; КонецЕсли; КонецЦикла; КонецЦикла; Для каждого gooFile Из gooFiles Цикл Сообщить(gooFile.Значение) КонецЦикла; КонецПроцедуры Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка) ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДиалогФыбораФайла.Заголовок = НСтр("ru = 'Выберите каталог файлов с ссылками на моды World of Goo'; uk = ''"); ДиалогФыбораФайла.ПредварительныйПросмотр = ЛОЖЬ; Если ЗначениеЗаполнено(Каталог) Тогда ДиалогФыбораФайла.Каталог = Каталог; КонецЕсли; //ДиалогФыбораФайла.Фильтр = "Файлы с ссылками на моды World of Goo (*.html)|*.html"; Если ДиалогФыбораФайла.Выбрать() Тогда Каталог = ДиалогФыбораФайла.Каталог; КонецЕсли; КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) Каталог = ВосстановитьЗначение("Каталог_goomod"); РасширениеИскомыхФайлов = ВосстановитьЗначение("РасширениеИскомыхФайлов_goomod"); Если НЕ ЗначениеЗаполнено(РасширениеИскомыхФайлов) Тогда РасширениеИскомыхФайлов = "goomod" КонецЕсли; КонецПроцедуры Процедура ПриЗакрытии() СохранитьЗначение("Каталог_goomod", Каталог); СохранитьЗначение("РасширениеИскомыхФайлов_goomod", РасширениеИскомыхФайлов); КонецПроцедуры
Скачать: goomod.epf (985 Загрузок)