用于缩短链接的 Nuget 包
Nuget package for bitly to shorten the links
我需要在 C# 中使用 bitly 来缩短我的链接。是否有任何 nuget 包?
有人可以为我提供代码以便我可以使用它吗?
查看 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;
}
}
您可以通过转到此 link https://bitly.com/a/your_api_key
从 bit.ly 获取您的登录名和 api 密钥
我在使用 Nuget 包时遇到问题 Bitly.Net so I implemented @devfunkd's solution above. However I still had the same problems on Azure 所以我不得不开发一个稍微不同的解决方案。
我的解决方案使用 fixed OAuth Token for authentication, as suggested by bit.ly support. It worked on Azure and has the advantage that it is not depreciated like the older 'login'/'apiKey'. In case this is useful to someone here is the code, 但更新为:
- 使用固定的 OAuth 令牌进行验证。
- 使用 bit.ly 的 V3 API,它具有更好的 json 格式。
- 它使用Json.NET json反序列化器,我主要使用它。
- 我把它设为异步,因为我系统的其余大部分都是异步的。
请注意,在代码中,字段 _bitlyToken
应包含通过转到 this page 创建的令牌。 _logger
变量包含某种记录器,这样错误就不会丢失。
public async Task<string> ShortenAsync(string longUrl)
{
//with thanks to @devfunkd - see
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;
}
}
我希望对某人有所帮助。
其他答案很好,但示例代码将不再有效https://www.nuget.org/packages/BitlyAPI/4.0.0 has been updated so you can use it or look at it's code in github https://github.com/doublej42/BitlyAPI
public static async Task<string> ShortenUrl(string url)
{
string _bitlyToken = my token;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,
"https://api-ssl.bitly.com/v4/shorten")
{
Content = new StringContent($"{{\"long_url\":\"{url}\"}}",
Encoding.UTF8,
"application/json")
};
try
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _bitlyToken);
var response = await client.SendAsync(request).ConfigureAwait(false);
if (!response.IsSuccessStatusCode)
return string.Empty;
var responsestr = await response.Content.ReadAsStringAsync();
dynamic jsonResponse = JsonConvert.DeserializeObject<dynamic>(responsestr);
return jsonResponse["link"];
}
catch (Exception ex)
{
return string.Empty;
}
}
这个正在使用 V4
这个使用 bit.ly API v4:
using System.Collections.Generic;
using RestSharp;
using Newtonsoft.Json.Linq;
private static string API_KEY = Environment.GetEnvironmentVariable("BITLY_ACCESS_TOKEN");
private static string API_URL = "https://api-ssl.bit.ly/v4";
private static string Shorten(string longUrl)
{
var client = new RestClient(API_URL);
var request = new RestRequest("shorten");
request.AddHeader("Authorization", $"Bearer {API_KEY}");
var param = new Dictionary<string, string> {
{ "long_url", longUrl }
};
request.AddJsonBody(param);
var response = client.Post(request);
string content = response.Content;
// WriteLine(content);
JObject d = JObject.Parse(content);
var result = (string)d["id"];
return result;
}
所需的第 3 方软件包:Newtonsoft.Json、RestSharp。我还制作了一个 GitHub 项目,请参见此处:https://github.com/jabbalaci/CsUrlShortener .
我需要在 C# 中使用 bitly 来缩短我的链接。是否有任何 nuget 包? 有人可以为我提供代码以便我可以使用它吗?
查看 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;
}
}
您可以通过转到此 link https://bitly.com/a/your_api_key
从 bit.ly 获取您的登录名和 api 密钥我在使用 Nuget 包时遇到问题 Bitly.Net so I implemented @devfunkd's solution above. However I still had the same problems on Azure
我的解决方案使用 fixed OAuth Token for authentication, as suggested by bit.ly support. It worked on Azure and has the advantage that it is not depreciated like the older 'login'/'apiKey'. In case this is useful to someone here is the code,
- 使用固定的 OAuth 令牌进行验证。
- 使用 bit.ly 的 V3 API,它具有更好的 json 格式。
- 它使用Json.NET json反序列化器,我主要使用它。
- 我把它设为异步,因为我系统的其余大部分都是异步的。
请注意,在代码中,字段 _bitlyToken
应包含通过转到 this page 创建的令牌。 _logger
变量包含某种记录器,这样错误就不会丢失。
public async Task<string> ShortenAsync(string longUrl)
{
//with thanks to @devfunkd - see
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;
}
}
我希望对某人有所帮助。
其他答案很好,但示例代码将不再有效https://www.nuget.org/packages/BitlyAPI/4.0.0 has been updated so you can use it or look at it's code in github https://github.com/doublej42/BitlyAPI
public static async Task<string> ShortenUrl(string url)
{
string _bitlyToken = my token;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,
"https://api-ssl.bitly.com/v4/shorten")
{
Content = new StringContent($"{{\"long_url\":\"{url}\"}}",
Encoding.UTF8,
"application/json")
};
try
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _bitlyToken);
var response = await client.SendAsync(request).ConfigureAwait(false);
if (!response.IsSuccessStatusCode)
return string.Empty;
var responsestr = await response.Content.ReadAsStringAsync();
dynamic jsonResponse = JsonConvert.DeserializeObject<dynamic>(responsestr);
return jsonResponse["link"];
}
catch (Exception ex)
{
return string.Empty;
}
}
这个正在使用 V4
这个使用 bit.ly API v4:
using System.Collections.Generic;
using RestSharp;
using Newtonsoft.Json.Linq;
private static string API_KEY = Environment.GetEnvironmentVariable("BITLY_ACCESS_TOKEN");
private static string API_URL = "https://api-ssl.bit.ly/v4";
private static string Shorten(string longUrl)
{
var client = new RestClient(API_URL);
var request = new RestRequest("shorten");
request.AddHeader("Authorization", $"Bearer {API_KEY}");
var param = new Dictionary<string, string> {
{ "long_url", longUrl }
};
request.AddJsonBody(param);
var response = client.Post(request);
string content = response.Content;
// WriteLine(content);
JObject d = JObject.Parse(content);
var result = (string)d["id"];
return result;
}
所需的第 3 方软件包:Newtonsoft.Json、RestSharp。我还制作了一个 GitHub 项目,请参见此处:https://github.com/jabbalaci/CsUrlShortener .