8 июня 2009 г.

PageGlimpse.com и HttpHandler

Итак, что же такое PageGlimpse? PageGlimpse.com – это бесплатный сервис, который предоставляет услуги по созданию скриншотов к сайтам. В действительности сервис очень может пригодиться если у вас есть свой сайт, на котором есть много ссылок на другие ресурсы и вам хочется кроме названия ресурса показать пользователю еще и уменьшенное изображение страницы. Сервис является бесплатным и для его использования нужно просто пройти бесплатную регистрацию по окончании, которой вам выдадут свой персональный ключ на использование данного сервиса.

Вся информация по использованию сервиса расположена на одной странице: http://www.pageglimpse.com/features/api

Для того, чтобы продемонстрировать возможности сервиса пройдите регистрацию и получите свой уникальный ключ. После введите в браузере следующий адрес: http://images.pageglimpse.com/v1/thumbnails?url=http://www.itcommunity.ru/&size=large&devkey=123456789

Нас здесь интересуют следующие значения:

url – адрес страницы, изображение, которой мы хотим получить.

size – размер изображения:

small    150x108    ~ 4kb
medium    280x202    ~ 11kb
large    430x310    ~ 25kb

devkey – ключ, который вы получили после регистрации.

Если все было указано правильно, то вы получите изображение сайта сделанное сервисом PageGlimpse.com.

Как же теперь использовать полученную нами информацию? Я покажу использование данного сервиса на ASP.NET сайте, и для этого напишу и зарегистрирую новый HttpHandler.

В только, что созданный сайт на ASP.NET добавьте новый модуль – PageGlimpseHandler.

public class PageGlimpseHandler:IHttpHandler
{
    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.Params["site"] != null)
        {
            string uri = "
http://images.pageglimpse.com/v1/thumbnails?url=";
            string size = "&size=large";
            string devkey = "&devkey=hjk34h342j3h4kj23n42j3h4";
            uri += context.Request.Params["site"] + size + devkey;

            System.Net.WebRequest request = System.Net.WebRequest.Create(uri);
            System.Net.WebResponse response = request.GetResponse();
            BinaryReader reader = new BinaryReader(response.GetResponseStream());
            byte[] buffer = reader.ReadBytes((int)response.ContentLength);

            if (buffer != null)
            {
                context.Response.ContentType = "image/jpeg";
                context.Response.BinaryWrite(buffer);
                context.Response.End();
            }
            context.Response.StatusCode = 404;
        }
    }
}

Созданный нами класс является наследником IHttpHandler и реализует его метод: ProcessRequest, который обрабатывает HTTP запрос и свойство IsReusable.

В ProcessRequest мы формируем запрос к нашему сервису, получаем от него данные в виде массива байтов.

Теперь нам осталось только зарегистрировать наш PageGlimpseHandler в web.config. Для этого найдите раздел httpHandlers и добавьте в него следующую строку

<add verb="GET" path="pageglimpse.aspx" type="PageGlimpseHandler"/>

Вот собственно и все.. Откройте страницу Default.aspx и добавьте на неё вызов изображения какого-либо сайта.

<img src="pageglimpse.aspx?site=http://www.google.com/" />
<img src="pageglimpse.aspx?site=
http://www.microsoft.com/" />

image

Конечно же в реальном приложении все настройки сервиса не должны храниться в коде их лучше перенести в web.config и забирать когда нужно оттуда.

Комментариев нет: