Come accorciare links e URL usando le API di Bit.ly via ASP.NET

DotNet LogoUna delle applicazioni su cui sto lavorando in questo periodo manda decine di emails al giorno, ognuna contenente almeno un paio di links (URL). Questi link sono molto lunghi perché oltre all’indirizzo della pagina da aprire contengono una o più query strings. In generale, per tante buone ragioni, le URL lunghe non sono mai una buona idea; ancor meno lo sono se  devono comparire in un messaggio email. Gli algoritmi di word wrapping dei client di posta elettronica vanno in crisi quando sono costretti a inserire un ritorno di carrello nel bel mezzo della URL. Come biasimarli?

Ci sono poi certi sistemi di web mail (quello di Libero, per non far nomi) che semplicemente non sono capaci di riprodurre correttamente un link o se lo fanno non attivano il link per ragioni di sicurezza, lasciando così al destinatario della mail il compito di copiare e incollare l’intera URL nel browser. Operazione non sempre banale per l’utente medio, soprattutto quando (guarda caso!) il testo da copiare e incollare è lunghissimo.

Si potrebbe risolvere banalmente ricorrendo agli anchor tag HTML ma nel mio caso questa strada non è praticabile: i messaggi devono essere in puro testo. Non solo, questa soluzione non risolverebbe comunque il problema dei web mail client che non si fidano dei miei messaggi. Creare a priori URL brevi non è una opzione per ragioni di legacy (il sito non l’ho creato io!). Come fare allora?

Chiedere aiuto a un servizio URL Shortener

Gli URL shortener sono servizi molto usati in ambito social networking e non solo. Data una certa URL di qualunque lunghezza ne restituiscono una equivalente molto più breve. Pioniere in questo campo è stato TinyURL ma oggigiorno il servizio più diffuso e conosciuto è senz’altro Bit.ly, il quale ha l’indubbio vantaggio di offrire una REST API ricca, robusta e ben documentata. Questa libreria gratuita consente ai programmatori indipendenti (noi) l’implementazione di servizi di URL shortening nelle proprie applicazioni.

Ecco dunque ShortenUrl, una semplice funzione ASP.NET che restituisce una URL breve a partire da una URL di qualunque lunghezza passata come parametro. Nel caso la chiamata alla API fallisca la funzione restituirà semplicemente una stringa vuota.

Public Function ShortenUrl(ByVal url As String) As String
        Const login As String = "Il_tuo_Bitly_Username"
        Const apiKey As String = "La_tua_Bitly_ApiKey"
        Dim encodedUrl As String = HttpUtility.UrlEncode(url)
        Dim requestUri As String = String.Format("http://api.bit.ly/v3/shorten?login={0}&apiKey={1}&longUrl={2}&format=txt", login, apiKey, encodedUrl)
        Dim reg As HttpWebRequest = HttpWebRequest.Create(requestUri)
        reg.Timeout = 10000
        Dim shortUrl As String = String.Empty
        Try
            shortUrl = New StreamReader(reg.GetResponse().GetResponseStream).ReadLine
        Catch ex As Exception
            'in caso di errore non facciamo nulla perché vogliamo restituire semplicemente una stringa vuota.
            'potremmo sollevare una eccezione, loggare l'errore, ecc.
        End Try
        Return shortUrl
    End Function

La gran parte del lavoro è fatto da una sola linea di codice (ok, avrei potuto suddividerla in due o tre linee per amor di chiarezza, te lo concedo). La richiesta REST al servizio è eseguita da una istanza della classe HttpWebRequest. Il metodo Shorten può restituire risultati in formato JSON, XML o puro testo. Per semplicità ho scelto il formato testo. A seconda delle necessità potresti ricorrere al bellissimo formato JSON o al logorroico XML,  la documentazione ufficiale contiene esempi molto chiari anche per questi formati.

Se non disponi di un account Bit.ly dovrai registrarti (è gratis). Una volta creato l’account potrai recuperare facilmente la tua API Key personale, indispensabile per poter effettuare chiamate ai metodi della libreria.