Sport Online: следим за результатами матчей с Windows Phone

Проекты

Tagged Under : ,

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

Это послужило идеей для создания приложения для смартфонов с windows phone, которое бы позволяло следить за счётом в матче и ходом событий посредством текстовых и аудио трансляций. В ходе развития идеи добавился функционал добавления напоминаний на предстоящие матчи, для которых будут вестись трансляции.
Причём напоминание устанавливается на время корректное именно для времени установленном на смартфоне, т.е. независимо от часового пояса напоминание сработает в нужное время.

Базой для приложения стал портал livetv.ru

В результате реализации описанных идей появилось приложение Sport Online.

скачать Sport Online для Windows Phone

OAuth + ASP.NET (Часть 5): авторизация через Odnoklassniki по протоколу OAuth 2.0

Программирование, Проекты

Tagged Under : , , , , , ,

Итак, на очереди авторизация через одноклассники: я не поленился и всё-таки зарегистрировал тестовое приложение. Вопреки ожиданиям всё оказалось гораздо проще.
Итак, метод контроллера, перебрасывающий пользователя на одноклассники для авторизации и для получения кода (используется разработанная ранее библиотека для авторизации через OAuth 1.0 и 2.0 AOAuthNET):

public ActionResult odnoklassniki()
{
    OAuth2 odnoklassniki = new OAuth2("id вашего приложения", "секретный ключ приложения", "http://www.odnoklassniki.ru/oauth/authorize", "http://api.odnoklassniki.ru/oauth/token.do", "http://twitter.kosfiz.net/auth/odnoklassniki/");
    odnoklassniki.GetAuthCode(new Dictionary<string, string>() { { "scope", "" } });
    return View();
}

Метод контроллера, получающий токен и после данные о пользователе:

public ActionResult odnoklassniki(string code)
{
    if (!string.IsNullOrEmpty(code))
    {
        OAuth2 odnoklassniki = new OAuth2("id вашего приложения", "секретный ключ приложения", "http://www.odnoklassniki.ru/oauth/authorize", "http://api.odnoklassniki.ru/oauth/token.do", "http://twitter.kosfiz.net/auth/odnoklassniki/");
        odnoklassniki.Code = code;
        OAuth2Token token = odnoklassniki.GetAccessToken(new Dictionary<string, string> { { "client_secret", "секретный ключ приложения" } }, OAuth2.AccessTokenType.JsonDictionary);
        if (token != null)
        {
            if (token.dictionary_token != null)
            {
                Dictionary<string, string> dict = new Dictionary<string, string>();
                dict.Add("client_id", "id приложения");
                dict.Add("application_key", "публичный ключ");
                dict.Add("method", "users.getCurrentUser");
                Response.Write(OAuth2UserData.GetOdnoklassnikiUserData(token.dictionary_token["access_token"], "секретный ключ", dict));
            }
        }
    }
    return View();
}

Для получения данных о пользователе пришлось доработать класс OAuth2UserData и добавить следующие методы:

public static string GetOdnoklassnikiUserData(string access_token, string secret_key, Dictionary<string,string> dict)
{
    string sig = GetSig(GetMD5(access_token + secret_key), dict);
    dict.Add("access_token", access_token);
    dict.Add("sig", sig);
    return GetUserData(ODNOKLASSNIKI_ME_URL, dict);
}

private static string GetMD5(string key)
{
    MD5 md5 = MD5.Create();
    byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(key));
    return string.Concat(hash.Select(x => x.ToString("x2")).ToList());
}

Пример авторизации через одноклассники с помощью библиотеки AOAuthNET

Исходный код библиотеки AOAuthNET

OAuth + ASP.NET (Часть 4): авторизация через Windows Live ID по протоколу OAuth 2.0

Программирование, Проекты

Tagged Under : , , , , , ,

В рамках проверки своей библиотеки и её расширения решил заняться интеграцией с Windows Live ID. Совсем недавно live не поддерживал OAuth, но время течёт и всё меняется. Теперь если вы рассчитываете привлечь на сайт аудиторию в том числе и c live-аккаунтами не затрудняя их очередной регистрацией, то возможно использовать OAuth для авторизации пользователя на своём сайте и получения данных о нём.

Ниже я приведу пример как это сделать с помощью библиотеки AOAuthNET для ASP.NET MVC сайта, для классического ASP.NET отличий будет немного.

Итак, метод контроллера, отрабатывающий по нажатию пользователя на кнопке войти

[HttpGet]
public ActionResult live()
{
    OAuth2 live = new OAuth2("id приложения", "секретный ключ", "https://oauth.live.com/authorize", "https://oauth.live.com/token", "на эту страницу будет совершён редирект с передачей кода");
    live.GetAuthCode(new Dictionary<string, string>() { { "display", "page" }, { "scope", "wl.basic" } });
    return View();
}

И теперь, собственно, код отвечающий за получения токена на странице, на которую перекинет пользователя с кодом для получения этого самого токена.

public ActionResult live(string code)
{
    if (!string.IsNullOrEmpty(code))
    {
        OAuth2 live = new OAuth2("id приложения", "секретный ключ", "https://oauth.live.com/authorize", "https://oauth.live.com/token", "на эту страницу будет совершён редирект с передачей кода");
        live.Code = code;
        OAuth2Token token = live.GetAccessToken(new Dictionary<string, string> { { "client_secret", "секретный ключ" }}, OAuth2.AccessTokenType.JsonDictionary);
        if (token != null)
        {
            if (token.dictionary_token != null)
            {
                Response.Write(OAuth2UserData.GetLiveUserData(token.dictionary_token["access_token"]));
            }
        }
    }
    return View();
}

Соответственно, я добавил метод GetLiveUserData, который получает информацию о пользователе (имя, фамилия и т.д.):

public static string GetLiveUserData(string access_token)
{
    return GetUserData(LIVE_ME_URL, new Dictionary<string, string>() { {LIVE_ACCESS_TOKEN, access_token} });
}

Всё просто, о методе GetUserData я писал ранее в первых частях цикла.

Пример работы библиотеки AOAuthNET с windows live id

Библиотека AOAuthNET и исходники

Предложения по расширению возможностей и функционалу приветствуются, так что пишите.

OAuth + ASP.NET (Часть 2): авторизация через facebook, yandex, mail.ru по протоколу OAuth 2.0

Программирование, Проекты

Tagged Under : , , , , , ,

В первой статье, посвящённой авторизации через популярные сервисы с использованием связки OAuth + ASP.NET, я написал небольшой класс для работы по протоколу OAuth 1.0 и вспомогательный класс. Но сейчас начинает активно внедряться вторая версия протокола, которая имеет весьма приличные отличия. Вторую версию, т.е. OAuth 2.0 уже поддерживают facebook, yandex, mail.ru и даже одноклассники. Именно поэтому я продолжил работу над библиотекой AOAuthNET (Another OAuthNET) и решил реализовать класс для авторизации по протоколу OAuth 2.0.

Прежде всего нужно ознакомиться с описания протокола в наших сервисах: mail.ru, yandex, facebook.

В этот раз всё же кратко опишу последовательность действий при авторизации:
1. Перенаправляем пользователя на страницу авторизации, там он подтвержает доступ, сообщая при этом сервису id нашего приложения и то как мы хотим авторизоваться (через js, через запросы между серверами или через обычное приложение);
2. После подтверждения нас переадресуют на страницу либо указанную при редиректе пользователя либо в настройках нашего приложения. На эту страницу получаем параметр code;
3. Берём полученный код и запрашиваем сервис по адресу получения маркера доступа сообщив например секретный ключ, код, id приложения, тип подтверждения и обратный адрес, если требуется. Если всё хорошо, то в ответе получим маркер доступа;
4. Запрашиваем данные о пользователе и радуемся жизни.

Всё это нашло отражение в классе OAuth2 Читать дальше »

OAuth + ASP.NET (Часть 1): авторизуемся через twitter, google и yahoo по протоколу OAuth 1.0

Программирование, Проекты

Tagged Under : , , , , , , , ,

Собственно, понадобилось сделать авторизацию через аккаунты различных популярных сервисов: twitter, facebook, mail.ru, google, yandex и по возможности ещё каких-нибудь. Так как я являюсь ярым сторонником подхода: если есть достаточно времени, то лучше сделать самому, – я решил реализовать это самостоятельно: изобрести велосипед в очередной раз.

Функционал будет минимальным: пройти авторизацию, получить маркер доступа (access_token) и идентификатор пользователя, ник, опционально что-нибудь ещё, например, email.

Итак, начиная с этой статьи, посвященной авторизации через twitter, google и yahoo (взят для дополнительного примера), используя и постигая OAuth 1.0, я попробую начать серию статей об OAuth-авторизации (в том числе и версии протокола 2.0 с отдельным классом и примерами для mail.ru, yandex’а, фейсбука и т.д.) через различные сервисы, поддерживающие её. При этом результатом будет небольшая библиотека с описанной функциональностью.
Читать дальше »

Evercookie: делаем библиотеку для ASP.NET

Программирование, Проекты

Tagged Under : , , ,

Появилась необходимость реализовать механизм анонимной оценки статей, записей и т.п., который бы, по возможности, максимально блокировал вторичное выставление оценки: либо предотвращал вторичное оценивание либо менял предыдущую оценку.

Использовать решил evercookie («неубиваемые» куки), поэтому эта запись станет своеобразным продолжением предыдущей с исправлением ошибок.
Читать дальше »

unlikeit.ru — сервис для смелых владельцев сайтов

Проекты

Где-то с неделю назад наблюдал за комментариями к одному событию, где проскочила фраза типа: «здесь есть кнопки нравится, а где можно нажать не нравится?»
И, действительно, у всех социальных сервисов есть кнопки «нравится», таким образом есть возможность либо нажать нравится либо проигнорировать сайт, страницу, новость и т.д..

В итоге получается, что владельцы интернет-ресурсов приветствуют только положительные отзывы, что в принципе логично, но на мой взгляд это достаточно субъективно – не учитывается другое мнение.

Не долго думая сделал по приколу небольшой сервис: unlikeit.ru — сервис для смелых владельцев сайтов. На нём кстати указанная кнопочка «не нравится» тоже есть. Надо заметить, что она даже нажата пару раз, если открыть домен с www. Зато мнение объективное.

Если у вас вдруг появятся предложения по совершенствованию, то пишите предлагайте, может попробую реализовать.

P.S.: за поддержку и ретвитты особая благодарность Александру Савочкину и Георгию Шестаеву.

citiesdb.ru – сервис для работы с базой регионов, городов и других населенных пунктов России

Проекты

От нечего делать своял небольшой проект описание которого размещено дальше.

Данный сервис даёт возможность получить список регионов, городов России и других населённых пунктов с улицами, переулками и т.д. посредством xml- и json-ответов на перечисленные ниже GET-запросы (далее параметр output обозначает тип ответа: xml или json):

  • http://citiesdb.ru/api/GetRegions/output/ – список регионов (пример)
  • http://citiesdb.ru/api/GetRegions/output/filter/ – список регионов согласно тексту в фильтре (пример)
  • http://citiesdb.ru/api/GetCities/output/regionName/ – список городов и других населённых пунктов указанного региона (пример)
  • http://citiesdb.ru/api/GetCities/output/regionName/filter/ – список городов и других населённых пунктов указанного региона с учётом фильтра для города (пример)
  • http://citiesdb.ru/api/GetStreets/output/regionName/cityName/ – список улиц и других объектов для указанного города и региона (пример)
  • http://citiesdb.ru/api/GetStreets/output/regionName/cityName/filter/ – список улиц и других объектов для указанного города и региона с учётом фильтра для объектов (улиц, переулков и т.п.) (пример)

Также есть возможность посылать запросы, в которых содержаться идентификаторы (ID) регионов и населённых пунктов:

  • http://citiesdb.ru/api/GetRegion/output/ID – данные о регионе с ID = 339 (пример)
  • http://citiesdb.ru/api/GetCities/output/regionID/ – список городов и других населённых пунктов указанного региона (пример)
  • http://citiesdb.ru/api/GetCities/output/regionID/filter/ – список городов и других населённых пунктов указанного региона с учётом фильтра для города (пример)
  • http://citiesdb.ru/api/GetStreets/output/cityID/ – список улиц и других объектов для указанного города и региона (пример)
  • http://citiesdb.ru/api/GetStreets/output/cityID/filter/ – список улиц и других объектов для указанного города и региона с учётом фильтра для объектов (улиц, переулков и т.п.) (пример)

Помимо указанного выше для разработчиков использующих технологии Microsoft есть возможность использовать wcf-сервис.

shorten.ru – сервис коротких ссылок

Проекты

Tagged Under : , ,

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

Домен, конечно, длинноват, но в итоге в коротких ссылках используется 3-х буквенный домен, так что они действительно короткие.

Что в итоге реализовано, помимо непосредственно сокращения ссылок:

  • получение исходной ссылки из короткой, причем не обязательно полученной с помощью shorten.ru
  • сбор статистики для зарегистрированных пользователей: когда, сколько, отукда, куда
  • api для генерации коротких и получения исходных ссылок

В дальнейшем планирую сервис немного усовершенствовать, может кому сгодится, хотя подобных сервис ооочень много.

Невидимая капча для ASP.NET сайта

Программирование, Проекты

Tagged Under : ,

Для блогов на базе wordpress есть замечательный плагин Invisible Captcha – это капча от автоматического спама (подробнее тут). Со своей задачей этот плагин вполне справляется, а от ручного спама ни одна капча не спасёт.
Смотря на эту капчу задумал я сделать контрол для ASP.NET сайтов с аналогичной функциональностью, но с некоторыми усовершенствованиями.
Читать дальше »