Рубрики
Мысли Стиль программирования

Узнать район по адресу — очень просто!

Любой, кто хоть раз пытался узнать район города по адресу, знает, что это не так просто, даже с помощью поисковика и карты… Для таких случаев, я написал небольшой сервис — raionpoadresu.ru. Я пользуюсь, мне нравится.

Рубрики
.NET Framework Программирование Стиль программирования

Подключить сервис сокращения ссылок bit.ly к ASP.NET сайту

Недавно столкнулся с интересной задачей, нужно было прикрутить короткие ссылки к ASP.NET сайту. Использовал один из самых известных сервисов коротких ссылок — bit.ly Документация к API на английском.

Как это работает: bit.ly создаёт короткую ссылку на нашу ссылку. Таким образом, идёт запрос к bit.ly, а bit.ly «перекидывает» пользователя на наш адрес.

Алгоритм такой:

1. Регаемся на bitly.com

2. Для запросов на короткие ссылки, нам понадобится авторизация, чтобы сервис мог вести квоты по запросам. Я использовал «api key», то есть передавал логин и ключ в get-запросе прямо в ссылке. Узнаём свой api key по адресу http://bitly.com/a/your_api_key.

3. Будем использовать ссылку /v3/shorten (описание). Теперь нам нужно всего лишь создать get-запрос (можно прямо через браузер) вида:

http://api-ssl.bitly.com/v3/shorten?format=xml&longUrl=_longurl_&login=_login_&apiKey=_apikey_

Здесь нужно подставить login — получен на шаге 1, apiKey — получен на шаге 2, longUrl — ссылка, которую хотим укоротить (начиная с http://).
Мы указали format=xml для получения результата в этом формате.

4. Проверили, всё работает через браузер. Теперь нужно создать программный запрос. Вот класс, в нём запрограммировано, как это сделать:

public static class BitlyApi
    {
        private const string HttpStatusOk = "200";
        private const string ApiSslUrl = "http://api-ssl.bitly.com/v3/shorten";
        private const string Login = "ваш_логин";
        private const string ApiKey = "ваш_ключ";

        public static string GetShortenedUrl(string longUrl)
        {
            string url = string.Format("{0}?format=xml&longUrl={1}&login={2}&apiKey={3}",
                                       ApiSslUrl, HttpUtility.UrlEncode(longUrl), Login, ApiKey);
            XDocument resultXml = XDocument.Load(url);

            if (resultXml.Descendants("status_code").FirstOrDefault().Value == HttpStatusOk)
            {
                XElement shortUrlElement = resultXml.Descendants("data").Elements("url").FirstOrDefault();
                if (shortUrlElement != null)
                {
                    //всё в порядке, возвращаем короткую ссылку
                    return shortUrlElement.Value;
                }
            }

            //что-то пошло не так - возвращаем, исходную длинную ссылку
            return longUrl;
        }
    }

Использован метода XDocument.Load(string url), который создаёт XDocument из полученного в ответе на запрос xml-файла. Проверяется пришедший в xml status_code и если всё нормально, идёт небольшой разбор, получение значения нужной ветки файла и возвращается коротка ссылка!