2015-07-18 5 views

ответ

2

Отъезд https://www.nuget.org/packages/BitlyAPI/ или просто позвоните по адресу bit.ly api. Api очень прост в использовании и работе.

public string Shorten(string longUrl, string login, string apikey) 
{ 
    var url = string.Format("http://api.bit.ly/shorten?format=json&version=2.0.1&longUrl={0}&login={1}&apiKey={2}", HttpUtility.UrlEncode(longUrl), login, apikey); 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    try 
    { 
     WebResponse response = request.GetResponse(); 
     using (Stream responseStream = response.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
      JavaScriptSerializer js = new JavaScriptSerializer(); 
      dynamic jsonResponse = js.Deserialize<dynamic>(reader.ReadToEnd()); 
      string s = jsonResponse["results"][longUrl]["shortUrl"]; 
      return s; 
     } 
    } 
    catch (WebException ex) 
    { 
     WebResponse errorResponse = ex.Response; 
     using (Stream responseStream = errorResponse.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
      String errorText = reader.ReadToEnd(); 
      // log errorText 
     } 
     throw; 
    } 
} 

Вы можете получить свой логин и apikey из bit.ly, перейдя по этой ссылке https://bitly.com/a/your_api_key

2

я имел проблемы с пакетом NuGet Bitly.Net поэтому я реализовал решение @ devfunkd в выше. Однако у меня все еще были те же проблемы на Azure see this related link, поэтому мне пришлось разработать немного другое решение.

Мое решение использует для аутентификации fixed OAuth Token, как это предлагает поддержка bit.ly. Он работал над Azure и имеет то преимущество, что он не обесценивается, как старый «login»/«apiKey». В случае, если это полезно кому-то, вот код, based on @devfunkd, но обновленный:

  • Используйте фиксированный токен OAuth для проверки.
  • Используйте API-интерфейс bit.ly V3, который имеет более удобный формат json.
  • В нем используется Json.NET json deserialiser, который я использую в основном.
  • Я сделал это асинхронно, так как большая часть остальной части моей системы была асинхронной.

Обратите внимание, что в коде поле _bitlyToken должен содержать маркер, созданный будет this page. Переменная _logger содержит какой-то журнал, чтобы ошибки не были потеряны.

public async Task<string> ShortenAsync(string longUrl) 
{ 
    //with thanks to @devfunkd - see https://stackoverflow.com/questions/31487902/nuget-package-for-bitly-to-shorten-the-links 

    var url = string.Format("https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}", 
      _bitlyToken, HttpUtility.UrlEncode(longUrl)); 

    var request = (HttpWebRequest) WebRequest.Create(url); 
    try 
    { 
     var response = await request.GetResponseAsync(); 
     using (var responseStream = response.GetResponseStream()) 
     { 
      var reader = new StreamReader(responseStream, Encoding.UTF8); 
      var jsonResponse = JObject.Parse(await reader.ReadToEndAsync()); 
      var statusCode = jsonResponse["status_code"].Value<int>(); 
      if (statusCode == (int) HttpStatusCode.OK) 
       return jsonResponse["data"]["url"].Value<string>(); 

      //else some sort of problem 
      _logger.ErrorFormat("Bitly request returned error code {0}, status text '{1}' on longUrl = {2}", 
       statusCode, jsonResponse["status_txt"].Value<string>(), longUrl); 
      //What to do if it goes wrong? I return the original long url 
      return longUrl; 
     } 
    } 
    catch (WebException ex) 
    { 
     var errorResponse = ex.Response; 
     using (var responseStream = errorResponse.GetResponseStream()) 
     { 
      var reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
      var errorText = reader.ReadToEnd(); 
      // log errorText 
      _logger.ErrorFormat("Bitly access threw an exception {0} on url {1}. Content = {2}", ex.Message, url, errorText); 
     } 
     //What to do if it goes wrong? I return the original long url 
     return longUrl; 
    } 
} 

Я надеюсь, что это поможет кому-то.

Смежные вопросы