Показаны сообщения с ярлыком FilmOnline. Показать все сообщения
Показаны сообщения с ярлыком FilmOnline. Показать все сообщения

понедельник, 6 октября 2008 г.

Video Sitemap

Sitemap полезная технология, для указания поисковым системам где находится контент. Они конечно могут найти его и по ссылкам, но это дает возможность указать в первую очередь новые и изменившиеся страницы. Её поддерживают основные поисковики – Гугл, Яндекс, Яху, Лайв.

Этот протокол изначально планировался легко расширяемым (в кратце – это просто xml файл) и гугл уже добавил полезные дополнения. Это раширение протокола – Video Sitemaps. Оно полезно для разнообразных видеохостингов – указывает дополнительную информацию о видео, проигрывающихся на страницах. Гугл его использует при поиске по видео (http://video.google.com). Поэтому если у вас на сайте публикуется видео – настоятельно рекомендую обратить внимание. Также надеюсь, что Яндекс на своем поиске по видео http://video.yandex.ru тоже будет его использовать.

А теперь, по уже наметившейся традиции, хватит теории и немного практики. Конечно на .NET :)

В .NET 3.5 стало намного проще и изящнее создавать xml документы в коде с помощью LINQ to XML.
Вот небольшие выдержки из кода на FilmOnline.ru video sitemap сделан для трейлеров фильмов:

    /// <summary>

    /// For protocols details see https://www.google.com/webmasters/tools/docs/en/protocol.html

    /// </summary>

    public static readonly XNamespace sitemap =

      "http://www.sitemaps.org/schemas/sitemap/0.9";

 

     ...

 

    private static XDocument CreateSitemap(IEnumerable<MyPair<string, DateTimeOffset?>> locations,


      Func<string, XElement, XElement> processor)


    {


      return new XDocument(


        new XElement(sitemap + "urlset",


          locations


            .Where(loc => !string.IsNullOrEmpty(loc.First))


            .Select(loc => processor(loc.First,


              new XElement(sitemap + "url",


                new XElement(sitemap + "loc", loc.First),


                loc.Second.CoalesceEx(date =>


                  new XElement(sitemap + "lastmod",


                    date.Value.ToString("yyyy-MM-ddTHH:mm:ss%K")))


                )))));


    }


 


    ...


 


    /// <summary>


    /// For protocols details see http://www.google.com/support/webmasters/bin/answer.py?answer=80472&topic=10079


    /// </summary>


    public static readonly XNamespace video =


      "http://www.google.com/schemas/sitemap-video/1.0";


 


    ...


 


          element.Add(new XElement(video + "video", 


            new XElement(video + "content_loc", trailer.Data.AbsoluteUri),


            new XElement(video + "title", trailer.Title),


            trailer.Thumbnail.CoalesceEx(thumb =>


              new XElement(video + "thumbnail_loc", thumb.AbsoluteUri))));



 



Пример результата можно посмотреть, например, здесь: http://filmonline.ru/Sitemap/External/Trailers/www.afisha.ru/movie/trailer/190429/.

пятница, 3 октября 2008 г.

Cooliris (Piclens) на своем сайте

Cooliris это прикольный плагин для всех основных браузеров для просмотра картинок и видео с веб-страниц. На словах звучит довольно пространно, так что лучше просто скачать и посмотреть.

Работает он на большинстве фото и видео хостинговых сайтов (YouTube, Flickr, Picasa Web, Яндекс.Фотки). Если в кратце – данные берет он из каналов RSS с раширением Media RSS (введеным Yahoo). Т.е. для того, что бы он заработал на собственном сайте надо просто cоздать такой RSS канал и сделать чтобы он автоматически находился (RSS Autodiscovery). Если более детально – то читаем расширенное руководство для разработчиков.

С помощью .NET 3.5 это сделать довольно просто – берем SyndicationFeed, заполняем его данными. К каждому элементу не забываем добавить необходимые расширения из Media RSS через свойство ElementExtensions.

Пример его работы можно наблюдать на FilmOnline.ru на страницах с описанием фильмов – там показываются трейлеры, постеры и кадры. Например, здесь (постеры) или здесь (трейлеры).

Кстати, обнаружилось недокументированное поведение. Когда на станице опубликовано несколько фидов (каналов), при нажатии кнопки плагина на тулбаре – он запускает всегда первый (хотя должен показывать все). Так что меняйте порядок подключения ваших фидов в нужном порядке. Например, опять же на FilmOnline, на всех страницах относящихся к фильму публикуются фиды и для фотографий, и для видео. Но на странице с трейлерами фид с видео на первом месте, а на странице постеров – фид с фотками.

четверг, 18 сентября 2008 г.

OpenSocial - авторизированные изменения на внешнем сервере

В OpenSocial (по крайней мере версии 0.7) есть возможность хранить пользовательские данные в самом контейнере. Мне необходимо также (или вместо) хранить эти данные на моем сервере.

В версии 0.8 возможно будут какая-то интеграция с OAuth, так как там появляется дополнительные интерфейсы, для работы по принципу REST с внешними серверами. Однако в версии 0.7 такого нет.

Очевидно, надо вывесить какой-то внешний интерфейс, при вызове которого (обязательно методом POST) можно записывать данные. Но надо как-то авторизовывать эти вызовы (подразумевается злоумышленник знает url этого интерфейса). Как-то надо ограничивать вызовы только с моего приложения.

Есть идея, что после установки приложения в контейнер, оно получает какой-то уникальный ID (по крайне мере в контейнере). Т.е. после установки приложения надо узнать этот ID, и прописать его на моем сервере вместе с доменом контейнера. Потом, при вызове интерфейса для записи данных, ему будут передаваться ID вызывающего приложения вместе с адресом контейнера, а на сервере они будут проверяться из списка разрешенных.

Но тут возникает проблема, раз злоумышленник знает принцип работы интерфейса, он может зайти на страничку приложения в контейнере, узнать его ID - и подставлять при своих вызовах. Т.е. надо найти какой-то секретный ID, который нигде не показывается, а доступен только изнутри приложения.

Также, остается еще возможность перехвата трафика и выуживания оттуда ID - но этот вариант мы не рассматриваем как маловероятный, и решающийся с помощью SSL.

Any ideas or suggestions?

UPDATE: В OpenSocial 0.8 с этим все хорошо, смотрим использование параметра gadgets.io.AuthorizationType.SIGNED. Осталось узнать как с этим в 0.7 (вроде этот параметр есть) и даже если он есть, как с его поддержкой в наших отечественных социальных сетях (вернее, пока единственной сети поддерживающей OpenSocial – МойМир).