Недавно столкнулся с интересной задачей, нужно было прикрутить короткие ссылки к 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 и если всё нормально, идёт небольшой разбор, получение значения нужной ветки файла и возвращается коротка ссылка!