Legutóbb bemutattam, milyen egyszerű a TinyURL-t REST-es API-ja segítségével beépíteni saját alkalmazásunkba. Nem a TinyURL az egyetlen ilyen szolgáltatás, léteznek mások is az interneten. A Bit.ly például statisztikát is ad a rövidített URL-ek használatáról, cserébe természetesen regisztrálnunk kell.
A regisztráció után kaphatunk egy API key-t, a felhasználónevünket és ezt a kulcsot kell beépítenünk a kódunkba, ha az API-n keresztül akarjuk elérni a szolgáltatást. A jelszót nem kell bedrótoznunk.
Az URL rövidítéshez egy REST-es hívást kell küldenünk az alábbi címre, a helyőrzők helyére értelemszerűen behelyettesítve a hosszú URL-t, a belépési nevünket és a kapott API kulcsot:
const string SERVICEFORMAT =
"http://api.bit.ly/v3/shorten?format=xml&longUrl={0}&login={1}&apiKey={2}&version=3.0";
A szervertől kapott válasz formátuma a következő:
HTTP/1.1 200 OK
Server: nginx/0.7.42
Date: Sun, 13 Jun 2010 04:03:32 GMT
Content-Type: application/xml; charset=UTF-8
Connection: keep-alive
MIME-Version: 1.0
Content-Length: 344
<?xml version="1.0" encoding="UTF-8"?>
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/crT0M6</url>
<hash>crT0M6</hash>
<global_hash>bwJlya</global_hash>
<long_url>http://www.msdnkk.hu</long_url>
<new_hash>0</new_hash>
</data>
</response>
Ami ebből érdekes számunka, az a status_code és az url mezők, az utóbbit csak a status mezők ellenőrzése után szabad figyelembe venni. Csinálhatunk a válaszhoz egy burkoló osztályt:
class BitlyResult
{
public string StatusCode { get; set; }
public string StatusText { get; set; }
public string ShortUrl { get; set; }
public bool IsValid
{
get
{
return this.StatusCode.Equals( "200", StringComparison.OrdinalIgnoreCase ) &&
this.StatusText.Equals( "OK", StringComparison.OrdinalIgnoreCase );
}
}
}
Az egész szolgáltatáshívást pedig az alábbi metódusba csomagolhatjuk be:
static string Shorten( string longUrl, string login, string apiKey )
{
string serviceUrl = String.Format( CultureInfo.InvariantCulture,
SERVICEFORMAT,
HttpUtility.UrlEncode( longUrl ), login, apiKey );
XDocument response = XDocument.Load( serviceUrl );
BitlyResult result = ( from r in response.Descendants( "response" )
select new BitlyResult
{
StatusCode = r.Element( "status_code" ).Value,
StatusText = r.Element( "status_txt" ).Value,
ShortUrl = r.Element( "data" ).Element( "url" ).Value
}
).Single();
return result.IsValid ? result.ShortUrl : longUrl;
}
Nem annyira Einsteines, mint a TinyURL, de cserébe kapunk sok plusz statisztikai információt a rövidített címek használatáról.
Technorati-címkék:
BitLy,
REST,
API