URL címkéhez tartozó bejegyzések

URL rövidítés kódból 2 – Bit.ly

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: ,,

URL rövidítés kódból 1 – TinyURL

Az egyik projektünkben string hossz limitek között vergődve arra jutottunk, hogy a felhasználó által megadott URL-ek rövidítésével nyerünk pár karakternyi helyet. Nosza meg is néztük a TinyURL URL rövidítő szolgáltatást és szembetaláltuk magunkat a világ legegyszerűbb API-jával.

Na, vajon milyen technológiát választ egy olyan cég, aki a webes szolgáltatását tényleg minden fajta kliens számára biztosítani szeretné? Manapság természetesen REST-et.

És vajon hogy néz ki a legegyszerűbb REST interfész egy string bemenettel és egy string kimenettel? Így:

http://tinyurl.com/api-create.php?url=http://www.msdnkk.hu

A legszebb az egészben, hogy a válasz minden körítés nélkül mindössze ennyi:

HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.2
Content-type: text/plain
Connection: close
Date: Tue, 08 Jun 2010 04:40:16 GMT
Server: TinyURL/1.6
Content-Length: 23

http://tinyurl.com/36q7yh8

Mindez .NET-ből némi prefixeléssel és URL kódolással:

  internal static class TinyUrlService
  {
    const string SERVICEFORMAT = @"http://tinyurl.com/api-create.php?url={0}";

    internal static string Shorten( string longUrl )
    {
        if( !longUrl.StartsWith( "http://", StringComparison.OrdinalIgnoreCase ) )
        {
            longUrl = "http://" + longUrl;
        }

        string serviceUrl = String.Format( CultureInfo.InvariantCulture, SERVICEFORMAT, HttpUtility.UrlEncode( longUrl ) );

        return new WebClient().DownloadString( serviceUrl );
    }
  }

Erre mondta Einstein, hogy “Mindent a lehető legegyszerűbben kell csinálni, de egy fokkal sem egyszerűbben.”

 

Technorati-címkék: ,,