Fare lo short di un url usando le Google API
Sviluppando applicazioni Metro per Windows 8, una delle funzionalità più interessanti – non solo dal punto di vista developer ma anche utente – è la possibilità di fare lo share di un qualsiasi contenuto usando una delle app già installate nel sistema. In pratica per un utente il tutto si riassume in pochi passi, ovvero:
- vedo un contenuto interessante all’interno di un’app (una foto, un link, un articolo, un punteggio in un videogioco, il prezzo di un articolo, un film da vedere al cinema, qualsiasi cosa) e decido di condividerla con qualcuno
- l’espressione “condividerla con qualcuno” è volutamente generica, perchè vuol dire un sacco di cose (molte delle quali ancora da intuire, probabilmente): vuol dire poter mandare una mail, twittare, postarla sulla propria pagina Facebook, postare una foto su PInteret, marcare un link tra quelli preferiti in Diio, aggiungere una foto in un photoset di Flickr, etc. etc.
- per farlo, l’utente non deve far altro che richiamare lo charm di Share di Windows 8 premendo Win + H (oppure Win + C e poi cliccare su Share). Se l’app che state usando prevede questa funzionalità, Windows 8 mostrerà l’elenco di app installate nel sistema che sono predisposte a condividere l’informazione
Nell’app Windows 8 che sto sviluppando, pviCommunity, è possibile per esempio fare lo share di fotografie scattate durante i voli virtuali di Piloti Virtuali Italiani. Ogni fotografia è identificata da un url ben preciso, quindi…mi sono detto…perchè non permette di twittare dalla mia app quanto sia bella una certa foto. Sappiamo tutti che i tweet hanno una lunghezza massima di 140 caratteri. L’url di una fotografia può essere una cosa tipo questa:
http://service.vivendobyte.net/FlightLogs/7600/2012-7-6_11-47-26-546.jpg
E’ una fotografia reale, quindi se cliccate sul link potete tranquillamente guardarla.
La domanda è la seguente: come è possibile fare lo short di questo url, per esempio usando le API di Google. Il primo passo è quello di registrarsi qui per ottenere una apikey da utilizzare direttamente nel vostro codice C#. Fatto questo, utilizzate questa classe per fare tutto il resto:
public static class GoogleUrlShortnerApi
{
private const string key = "api_key";
public static string Shorten(string url)
{
string post = "{"longUrl": "" + url + ""}";
string shortUrl = url;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" + key);
try
{
request.Method = "POST";
request.ContentType = "application/json";
using (Stream requestStream = request.GetRequestStreamAsync().Result)
{
byte[] postBuffer = System.Text.Encoding.UTF8.GetBytes(post);
requestStream.Write(postBuffer, 0, postBuffer.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result)
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader responseReader = new StreamReader(responseStream))
{
string json = responseReader.ReadToEnd();
shortUrl = Regex.Match(json, @"""id"": ?""(?<id>.+)""").Groups["id"].Value;
}
}
}
}
catch (Exception ex)
{
// if Google's URL Shortner is down...
System.Diagnostics.Debug.WriteLine(ex.Message);
System.Diagnostics.Debug.WriteLine(ex.StackTrace);
}
return shortUrl;
}
}
Il codice è pensato per girare all’interno di un’app Windows 8 Metro-style, chiaramente.