# encoding: ascii
# api: powershell
# title: Resolve-Url
# description: Figure out the real url’s behind the shortened forms created by snipurl, tinyurl, twurl, is.gd, ...
# version: 0.1
# type: function
# author: Joel Bennett
# license: CC0
# function: Resolve-URL
# x-poshcode-id: 187
# x-archived: 2017-05-30T19:02:38
# x-published: 2008-04-26T15:13:00
#
#
###################################
## Figure out the real url behind those shortened forms
function Resolve-URL([string[]]$urls) {
[regex]$snip = "(?:https?://)?(?:snurl|snipr|snipurl)\.com/([^?/ ]*)\b"
[regex]$tiny = "(?:https?://)?TinyURL.com/([^?/ ]*)\b"
[regex]$isgd = "(?:https?://)?is.gd/([^?/ ]*)\b"
[regex]$twurl = "(?:https?://)?twurl.nl/([^?/ ]*)\b"
switch -regex ($urls) {
$snip {
write-output $snip.Replace( $_, (new-object System.Net.WebClient
).DownloadString("http://snipurl.com/resolveurl?id=$($snip.match( $_ ).groups[1].value)"))
}
$tiny {
$doc = ConvertFrom-Html "http://tinyurl.com/preview.php?num=$($tiny.match( $_ ).groups[1].value)"
write-output $tiny.Replace( $_, "$($doc.SelectSingleNode(""//a[@id='redirecturl']"").href)" )
}
$isgd {
$doc = ConvertFrom-Html "http://is.gd/$($isgd.match( $_ ).groups[1].value)-"
write-output $isgd.Replace( $_, "$($doc.SelectSingleNode(""//div[@id='main']/p/a"").href)")
}
$twurl {
$doc = ConvertFrom-Html "http://tweetburner.com/links/$($twurl.match( $_ ).groups[1].value)"
write-output $twurl.Replace($_, "$($doc.selectsingleNode(""//div[@id='main-content']/p/a"").href)" )
}
default { write-output $_ }
}
}