блогъ

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 Загрузок)

VN:F [1.8.8_1072]
обождите...
Rating: 5.0/5 (3 votes cast)
goomod + 1C5.053