carlosag - IIS SEO Toolkit - Расширяемость модуля гусеничного механизма
- Введите CrawlerModule
- Кодирование модуля Image Crawler
- Регистрация это
- Тестирование это
- Используй это
- Резюме
В этом блоге мы собираемся написать пример о том, как расширить функциональность SEO Toolkit, так что для этого мы будем притворяться, что у нашей компании есть большой веб-сайт с несколькими изображениями, и теперь мы заинтересованы в том, чтобы убедиться, что все они соответствуют определенному стандарту, скажем, все они должны быть меньше, чем 1024x768 пикселей, и что качество изображений составляет не менее 16 бит на пиксель. Кроме того, мы также хотели бы иметь возможность создавать пользовательские запросы, которые впоследствии позволят нам дополнительно анализировать содержимое изображений и фильтровать их по каталогам и т. Д.
Для этого мы расширим процесс сканирования SEO Toolkit для выполнения дополнительной обработки изображений, добавим следующие новые возможности:
- Захватить дополнительную информацию из Контента. В этом случае мы будем собирать информацию об изображении, в частности мы расширим отчет, добавив «Ширина изображения», «Высота изображения» и «Формат пикселя изображения».
- Отметить дополнительные нарушения. В этом примере мы отметим три новых нарушения:
- Изображение слишком большое. Это нарушение будет помечено всякий раз, когда длина содержимого изображения превышает «Максимальный размер загрузки для URL», настроенный в начале анализа. Это также помечает это нарушение, если разрешение превышает 1024x768.
- Формат изображения слишком мал. Это нарушение будет помечено, если изображение имеет размер 8 или 4 бита на пиксель.
- Изображение имеет небольшое разрешение. Это будет помечено, если разрешение изображения на дюйм меньше 72 точек на дюйм.
Введите CrawlerModule
Модуль сканера - это класс, который расширяет процесс сканирования в Site Analysis, предоставляя настраиваемые функции при обработке каждого URL-адреса. Исходя из этого класса, вы можете легко поднять свой собственный набор нарушений или добавить свои собственные данные и ссылки на любой URL.
открытый абстрактный класс CrawlerModule: IDisposable
{
// Методы
публичная виртуальная пустота BeginAnalysis ();
публичная виртуальная пустота EndAnalysis (bool отменен);
открытый абстрактный void Process (контекст CrawlerProcessContext);
// Свойства
защищенный WebCrawler Crawler {get; }
защищенные настройки CrawlerSettings {get; }
}
Включает три основных метода:
- BeginAnalysis. Этот метод вызывается один раз в начале процесса сканирования и позволяет выполнить любую необходимую инициализацию. Общие задачи включают в себя регистрацию пользовательских свойств в отчете, доступ к которым можно получить через свойство Crawler.
- Процесс. Этот метод вызывается для каждого URL после его загрузки. Аргумент context включает свойство URLInfo, которое предоставляет все метаданные, извлеченные для URL. Он также включает в себя список нарушений и ссылок в URL. Общие задачи включают расширение метаданных URL-адреса, будь то использование его содержимого или внешних систем, пометка новых пользовательских нарушений или обнаружение новых ссылок в содержимом.
- EndAnalysis. Этот метод вызывается один раз в конце процесса сканирования и позволяет вам выполнить любые окончательные вычисления в отчете после обработки всех URL-адресов. Общие задачи в этом методе включают выполнение агрегации данных по всем URL-адресам или выявление нарушений, которые зависят от всех доступных данных (например, поиск дубликатов).
Кодирование модуля Image Crawler
Создайте библиотеку классов в Visual Studio и добавьте код, показанный ниже.
- Откройте Visual Studio и выберите опцию Файл-> Новый проект
- В диалоговом окне «Новый проект» выберите шаблон проекта библиотеки классов и укажите имя и местоположение, например «SampleCrawlerModule».
- С помощью меню «Проект-> Добавить ссылку» добавьте ссылку на клиентскую библиотеку IIS SEO Toolkit (C: \ Program Files \ Reference Assemblies \ Microsoft \ IIS \ Microsoft.Web.Management.SEO.Client.dll).
- Поскольку мы собираемся зарегистрировать это с помощью расширяемости IIS Manager, добавьте ссылку на DLL-библиотеку расширяемости IIS Manager (c: \ windows \ system32 \ inetsrv \ Microsoft.Web.Management.dll), используя «Project-> Add Reference» меню.
- Кроме того, поскольку мы будем использовать класс .NET Bitmap, вам необходимо добавить ссылку на «System.Drawing» с помощью меню «Project-> Add Reference».
- Удалите автоматически сгенерированный Class1.cs, так как мы не будем его использовать.
- Используя меню «Проект-> Добавить новый элемент», добавьте новый класс с именем «ImageExtension».
используя Систему;
использование System.Drawing;
использование System.Drawing.Imaging;
использование Microsoft.Web.Management.SEO.Crawler;
namespace SampleCrawlerModule {
/// <summary>
/// Расширение для добавления проверки и метаданных к изображениям при сканировании
/// </ summary>
внутренний класс ImageExtension: CrawlerModule {
приватная константная строка ImageWidthField = "iWidth";
private const string ImageHeightField = "iHeight";
приватная константная строка ImagePixelFormatField = "iPixFmt";
public override void BeginAnalysis () {
// Регистрация свойств, которые мы хотим увеличить в начале анализа
Crawler.Report.RegisterProperty (ImageWidthField, "Ширина изображения", typeof (int));
Crawler.Report.RegisterProperty (ImageHeightField, «Высота изображения», typeof (int));
Crawler.Report.RegisterProperty (ImagePixelFormatField, «Формат пикселя изображения», typeof (строка));
}
public override void Process (контекст CrawlerProcessContext) {
// Убедитесь, что обрабатываются только те типы контента, которые нам нужны
switch (context.UrlInfo.ContentTypeNormalized) {
case "image / jpeg":
case "image / png":
case "image / gif":
case "image / bmp":
// Обрабатываем только известные типы контента
перерыв;
дефолт :
// игнорировать любые другие
вернуть;
}
// --------------------------------------------
// Если длина содержимого изображения была больше максимальной
// разрешено скачать, затем пометить нарушение и остановить
if (context.UrlInfo.ContentLength>
Crawler.Settings.MaxContentLength) {
Violations.AddImageTooLargeViolation (контекст,
«Это больше, чем допустимый размер загрузки»);
// Остановить обработку, так как у нас нет всего контента
вернуть;
}
// Загрузить изображение из ответа в растровое изображение
using (Bitmap bitmap = new Bitmap (context.UrlInfo.ResponseStream)) {
Размер size = bitmap.Size;
// --------------------------------------------
// Дополнить метаданные, добавив наши поля
context.UrlInfo.SetPropertyValue (ImageWidthField, size.Width);
context.UrlInfo.SetPropertyValue (ImageHeightField, size.Height);
context.UrlInfo.SetPropertyValue (ImagePixelFormatField, bitmap.PixelFormat.ToString ());
// --------------------------------------------
// Дополнительные нарушения:
//
// Если размер выходит за рамки наших стандартов, то флаг нарушается
if (size.Width> 1024 &&
size.Height> 768) {
Violations.AddImageTooLargeViolation (контекст,
String .Format («Размер изображения: {0} x {1}»,
размер. ширина, размер. высота));
}
// Если формат не соответствует нашим стандартам, тогда помечать нарушение
switch (bitmap.PixelFormat) {
case PixelFormat.Format1bppIndexed:
case PixelFormat.Format4bppIndexed:
case PixelFormat.Format8bppIndexed:
Violations.AddImagePixelFormatSmall (context);
перерыв;
}
if (bitmap.VerticalResolution <= 72 ||
bitmap.Hor HorizontalResolution <= 72) {
Violations.AddImageResolutionSmall (контекст,
bitmap.HorizontResolution + "x" + bitmap.VerticalResolution);
}
}
}
/// <summary>
/// Вспомогательный класс для проведения нарушений
/// </ summary>
Нарушения частного статического класса {
приватная статическая только для чтения ViolationInfo ImageTooLarge =
новое ViolationInfo ("ImageTooLarge",
ViolationLevel.Warning,
"Изображение слишком большое." ,
"Изображение слишком большое: {детали}." ,
«Убедитесь, что содержание изображения требуется.» ,
"Изображений" ) ;
приватное статическое чтение только ViolationInfo ImagePixelFormatSmall =
новое ViolationInfo ("ImagePixelFormatSmall",
ViolationLevel.Warning,
"Формат изображения слишком мал." ,
«Формат изображения слишком мал»,
«Убедитесь, что качество изображения хорошее». ,
"Изображений" ) ;
приватное статическое чтение только ViolationInfo ImageResolutionSmall =
новое ViolationInfo ("ImageResolutionSmall",
ViolationLevel.Warning,
«Разрешение изображения маленькое». ,
«Разрешение изображения слишком мало: ({res})»,
«Убедитесь, что качество изображения хорошее». ,
"Изображений" ) ;
внутренняя статическая пустота AddImageTooLargeViolation (контекст CrawlerProcessContext, подробности строки) {
context.Violations.Add (new Violation (ImageTooLarge,
0, «подробности», подробности));
}
внутренняя статическая пустота AddImagePixelFormatSmall (контекст CrawlerProcessContext) {
context.Violations.Add (new Violation (ImagePixelFormatSmall, 0));
}
внутренняя статическая пустота AddImageResolutionSmall (контекст CrawlerProcessContext, разрешение строки) {
context.Violations.Add (new Violation (ImageResolutionSmall,
0, «res», разрешение));
}
}
}
}
Как вы можете видеть в BeginAnalysis, модуль регистрирует три новых свойства в отчете, используя свойство Crawler. Это требуется только в том случае, если вы хотите предоставить пользовательский текст или использовать его для другого типа, кроме строки. Обратите внимание, что текущая версия допускает только примитивные типы, такие как Integer, Float, DateTime и т. Д.
Во время метода Process он сначала проверяет, что он работает только для известных типов контента, затем выполняет любые проверки, вызывающие набор пользовательских нарушений, определенных в статическом вспомогательном классе Violations. Обратите внимание, что мы загружаем контент из потока ответов, который является свойством, содержащим полученные от сервера данные. Обратите внимание, что если вы анализируете текст, свойство Response будет содержать содержимое (это основано на типе содержимого, поэтому HTML, XML, CSS и т. Д. Будут сохранены в этом свойстве String).
Регистрация это
При работе внутри IIS Manager модули искателя должны быть сначала зарегистрированы как стандартный модуль пользовательского интерфейса, а затем внутри их инициализации они должны быть зарегистрированы с использованием интерфейса IExtensibilityManager. В этом случае, чтобы сделать код максимально простым, все добавляется в один файл. Поэтому добавьте новый файл с именем «RegistrationCode.cs» и включите содержимое ниже:
используя Систему;
использование Microsoft.Web.Management.Client;
использование Microsoft.Web.Management.SEO.Crawler;
использование Microsoft.Web.Management.Server;
namespace SampleCrawlerModule {
внутренний класс SampleCrawlerModuleProvider: ModuleProvider {
public override ModuleDefinition GetModuleDefinition (контекст IManagementContext) {
вернуть новое ModuleDefinition (Name, typeof (SampleCrawlerModule) .AssemblyQualifiedName);
}
public override Тип ServiceType {
get {return null; }
}
public override bool SupportsScope (область управленияScope) {
вернуть истину;
}
}
внутренний класс SampleCrawlerModule: Module {
защищенное переопределение void Initialize (IServiceProvider serviceProvider, ModuleInfo moduleInfo) {
base .Initialize (serviceProvider, moduleInfo);
IExtensibilityManager em = (IExtensibilityManager) GetService (typeof (IExtensibilityManager));
em.RegisterExtension (typeof (CrawlerModule), новый ImageExtension ());
}
}
}
Этот код определяет стандартный модуль диспетчера IIS UI и в своем методе инициализации на стороне клиента использует интерфейс IExtensibilityManager для регистрации нового экземпляра расширения Image. Это сделает его видимым для функции анализа сайта.
Тестирование это
Чтобы проверить это, нам нужно добавить модуль UI в Administration.config, это также означает, что сборка должна быть зарегистрирована в GAC.
Сильно назвать сборку
В Visual Studio вы можете легко сделать это, используя меню «Проект-> Свойства», и выбрать вкладку «Подписывание», отметить «Подписать сборку» и выбрать файл, если у вас его нет, вы можете просто выберите New и укажите имя.
После этого вы можете скомпилировать и теперь сможете добавить его в GAC.
GAC это
Если у вас есть SDK, вы можете назвать его, как в моем случае:
"\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ gacutil.exe" / if SampleCrawlerModule.dll
(Обратите внимание, что вы также можете просто открыть Windows Explorer, перейти к папке c: \ Windows \ assembly и перетащить туда свой файл, который автоматически его GAC).
Наконец, чтобы увидеть правильное имя, которое следует использовать в Administration.config, выполните следующую команду:
"\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ gacutil.exe" / l SampleCrawlerModule
В моем случае это отображает:
SampleCrawlerModule, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 6f4d9863e5b22f10,…
Наконец зарегистрируйте его в Administration.config
Откройте Administration.config в Блокноте с использованием экземпляра с повышенными правами, найдите </ moduleProviders> и добавьте строку, подобную приведенной ниже, но заменив правильные значения для Version и PublicKeyToken:
<add name = "SEOSample" type = "SampleCrawlerModule.SampleCrawlerModuleProvider, SampleCrawlerModule, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 6f4d9863e5b22f10 " />
Используй это
После регистрации вы сможете запустить диспетчер IIS и перейти к поисковой оптимизации. Начните новый анализ на вашем веб-сайте. По завершении, если есть какие-либо нарушения, вы правильно увидите их в Сводке нарушений или любом другом отчете. Например, см. Ниже все нарушения в категории «Изображения».
Поскольку мы также расширили метаданные, добавив новые поля (Ширина изображения, Высота изображения и Формат пикселя изображения), теперь вы можете использовать их с инфраструктурой запросов, чтобы легко создать отчет обо всех изображениях:
А поскольку они являются стандартными полями, их можно использовать в фильтрах, группах и любых других функциях, включая экспорт данных. Так, например, следующий запрос может быть открыт в функции Site Analysis и будет отображать среднее значение ширины и высоты изображений, суммированных по типу изображения:
<? xml version = "1.0" encoding = "utf-8"?>
<query dataSource = "urls">
<фильтр>
<выражение field = "ContentTypeNormalized" operator = "Begins" value = "image /" />
</ filter>
<группа>
<field name = "ContentTypeNormalized" />
</ group>
<displayFields>
<field name = "ContentTypeNormalized" />
<field name = "(Count)" />
<field name = "Average (iWidth)" />
<field name = "Average (iHeight)" />
</ displayFields>
</ query>
И, конечно, подробности нарушения отображаются в соответствии с указаниями, включая Рекомендацию, Описание и т.д .:
Резюме
Как вы можете видеть, расширение SEO Toolkit с помощью модуля Crawler позволяет вам предоставлять дополнительную информацию, будь то метаданные, нарушения или ссылки на любой обрабатываемый документ. Это можно использовать для добавления поддержки типов контента, которые не поддерживаются сразу после установки, таких как PDF, офисные документы или что-либо еще, что вам нужно. Его также можно использовать для расширения метаданных путем записи пользовательского кода для передачи данных из другой системы в отчет, что дает вам возможность использовать эти данные, используя возможности запросов анализа сайта.
Encoding = "utf-8"?