|  | +7 (495) 229-0436 |  | shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 |  |  | 
|  | 
 | 
| 
 
 
 
 
 
 
 
 
 | 
 Synapse + NativeXML. Обработка Sitemap в Delphi.08.04.2011 16:05 Если предыдущий пост предназначался исключительно для пользователей программы "Пинговалка", то этот - для разработчиков. Сегодня будем разбираться с sitemap.xml. В целом sitemap может пригодится для чего угодно, начиная от того, чтобы просто получить список всех страниц, так и, например, для того, чтобы по полученному списку в дальнейшем спарсить названия страниц, проверить индексацию в поисковиках и т.д. Зная путь к sitemap, можно сэкономить достаточно много времени на получение необходимой информации по сайту. Как и сказано в заголовке поста - использовать будем две бесплатные, кроссплатформенные библиотеки - Synapse и NativeXML. Прежде, чем перейдем к реализации чтения sitemap в Delphi, немного разберемся с тем, что нас ждет. Немного слов про SitemapФайл Sitemap представляет собой XML-файл, в котором перечислены URL-адреса веб-сайта в сочетании с метаданными, связанными с каждым URL-адресом. В качестве мета-данных, в sitemap может содержаться следующая информация: дата последнего изменения, частота изменений, приоритетность на уровне сайта. Sitemap используется для того, чтобы поисковые системы могли более грамотно сканировать сайт. Например, запись отдельного URL с мета-данными может выглядеть так: 
 Если сайт более менее старенький, то его Sitemap может насчитывать тысячи URL. К примеру, sitemap моего блога насчитывает сейчас 865 страниц, включая страницы по тегам. А если взять какой-нибудь варезник где обновления могут проходить по 100 штук на день? Или раскрученный, популярный форум? Там sitemap может насчитывать достаточно большое количество страниц. Поэтому разработчики протокола Sitemap сделали ограничение - 50000 URL на один файл. Также файл должен быть размером до 10 Мб. Если передается информация по 50000+ страницам, то в поисковую систему отправляется индексный файл Sitemap. В этом фале перечислены пути к XML-файлам в которых содержаться уже URL"ы страниц. Запись в индексном файле может выглядеть так: 
 Все данные в Sitemap передаются в кодировке UTF-8. Вот, пожалуй, вся та информация, которая нам пригодится для разработки. Теперь перейдем к реализации нашей программы. Парсим Sitemap в DelphiНапишем небольшую программу, которая будет без лишних вопросов скачивать и парсить sitemap любого вида - как с индексным файлом, так и без него. Для этого, вначале немного определимся с алгоритмом. Работать будем так: 
 Получать будем всю доступную информацию - адреса, явки, пароли, даты изменения, приоритеты и т.д. Начнем с описания необходимых типов данных. Каждый элемент в sitemap будет представлен в виде записи (record): 
 Загружать и обрабатывать Sitemap будем в отдельном потоке: 
 Для потока определено всего два события: 
 Теперь жмем Ctrl+Shift+C и, если у вас Delphi не Starter Edition, то IDE создаст вам "скелеты" методов потока. рассмотрим их подробнее. Конструктор: 
 Метод TryLoadHeadSitemap пробует скачать XML-файл, URL которого был задан в конструкторе. Если файл успешно скачан и помещен в поле FHeaderXML (скачать мы можем и не XML), то метод вернет нам True: 
 IsChanked проверяет является ли загруженый в методе TryLoadHeadSitemap XML-файл индексным. Если файл индексный, то в этом же методе считываются URL'ы всех sitemap, содержащих данные по страницам сайта: 
 LoadFile грузит XML-файл, засположенный по адресу URL и, если файл загружен успешно, то этот файл заносится в массив FChankedXML: 
 Ну и, собственно, Execute в котором все эти методы собраны воедино: 
 Теперь нам остается только разработать GUI для нашего приложения. Так как все операции по загрузке Sitemap будут у нас выполнятся по одному клику, то GUI будет аскетичным :) 
 1 Edit, 1 кнопка и 1 ListView для вывода результатов - всё, что нам потребуется. Вначале определим обработчики событий потока: 
 Теперь, в обработчике OnClick кнопки нам остается только правильно запустить поток. Делаем это следующим образом: 
 Запускаем программу, вводим в edit адрес к Sitemap, жмем кнопку и спустя несколько секунд получаем результат: 
 Как и ожидалось, при каждом получении элемента Sitemap наш список обновляется, но из за достаточно высокой скорости работы NativeXML обновление превращается в быстрое мельтешение ListView, поэтому по-хорошему, обновление следовало бы проводить только в самом конце работы потока, а для визуализации процесса заполнять ProgressBar, отсчитывать что-нибудь в Label и т.д. Также было бы неплохо предусмотреть вывод сообщений, в случае, если скачаный файл не содержит XML или скачивание вообще невозможно, но пусть реализация этих моментов останется в качестве самостоятельной работы тем, кто скачает исходники программы :). | 
 
 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| О нас | 
| Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО. На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям. 
 | 
| 119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru | 
 | © ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |