
By Joe Pruitt | Article Rating: |
|
June 19, 2009 02:04 PM EDT | Reads: |
15,973 |

Shrinking your Url’s is all the rage nowadays. If you are on Twitter, then odds are you have used one. Despite CodingHorror’s distaste for them in his recent blog post on Url Shorteners: Destroying the Web since 2002, they are a fact of life when we live in a world of 140 character status updates.
So what’s a URL shrinking service anyway? Well, to put it simply, you supply them with a URL, they then supply you with a shorter URL containing a lookup “key”. When future requests are made to this shorter URL, connections are routed to that services website where they convert the short URL to the original URL and issue a HTTP Redirect back to your browser to send you off to the original long url website.
So, what’s a guy, or gal, to do if they want to set their status programmatically on Twitter, Facebook, FriendFeed, or the other gazillion social networking sites out there today and need to post a very long URL? Most of these shrinking services offer API’s to access their “shrinking” services so it’s just a matter of digging into the various APIs to get them implemented. In my original PowerShell Twitter library PoshTweet, I included support for a couple for shrinking URL’s through a couple of shrinking services but I figured it would be good to separate that functionality out into it’s own library.
So, here’s my first stab at a generic URL shortening library for PowerShell. I’ve included the following services:
Some of these services have advanced features such as statistical reporting on all your submitted links. Those services require users to create accounts and register for API keys. Bit.ly is one of them, so if you want to use that service, you will have to supply this script with your bit.ly username and API key with the Set-BitlyServiceInfo function.
So, here’s the script, hope you all enjoy!
1: param(
2: [string]$longurl = $null,
3: [string]$provider = "tinyurl"
4: );
5:
6: $script:DIGG_APPKEY = "https://devcentral.f5.com/PoshShrink";
7: $script:BITLY_LOGIN = "";
8: $script:BITLY_KEY = "";
9:
10: #----------------------------------------------------------------------------
11: # function Set-BitlyServiceInfo
12: #----------------------------------------------------------------------------
13: function Set-BitlyServiceInfo()
14: {
15: param(
16: [string]$login = $null,
17: [string]$key = $null
18: );
19: if ( $login -and $key )
20: {
21: $script:BITLY_LOGIN = $login;
22: $script:BITLY_KEY = $key;
23: }
24: else
25: {
26: Write-Error "Usage: Set-BitlyServiceInfo -login login -key key";
27: }
28: }
29:
30: #----------------------------------------------------------------------------
31: # function Shrink-Url
32: #----------------------------------------------------------------------------
33: function Shrink-Url()
34: {
35: param(
36: [string]$longurl = $null,
37: [string]$provider = "tinyurl"
38: );
39:
40: $shorturl = $null;
41: if ( $longurl )
42: {
43: switch ($provider.ToLower())
44: {
45: "is.gd" {
46: $shorturl = Execute-HTTPGetCommand "http://is.gd/api.php?longurl=$longurl";
47: }
48: "tinyurl" {
49: $shorturl = Execute-HTTPGetCommand "http://tinyurl.com/api-create.php?url=$longurl";
50: }
51: "snurl" {
52: $shorturl = Execute-HTTPGetCommand "http://snipr.com/site/snip?r=simple&link=$longurl";
53: }
54: "digg" {
55: [xml]$results = Execute-HTTPGetCommand `
56: "http://services.digg.com/url/short/create?url=${longurl}&appkey=${script:DIGG_APPKEY}";
57: $shorturl = $results.shorturls.shorturl.short_url;
58: }
59: "tr.im" {
60: [xml]$results = Execute-HTTPGetCommand "http://api.tr.im/api/trim_url.xml?url=$longurl";
61: $shorturl = $results.trim.url;
62: }
63: "bit.ly" {
64: if ( !$BITLY_LOGIN -or !$BITLY_KEY )
65: {
66: Write-Error "ERROR: You must configure your bit.ly LOGIN and APIKEY!"
67: exit;
68: }
69: else
70: {
71: $results = Execute-HTTPGetCommand `
72: "http://api.bit.ly/shorten?version=2.0.1&longUrl=$longurl&login=$script:BITLY_LOGIN&apiKey=$script:BITLY_KEY";
73: $shorturl = $results.Split("`n")[7].Split("""")[3];
74: }
75: }
76: default {
77: $shorturl = Execute-HTTPGetCommand "http://tinyurl.com/api-create.php?url=$longurl";
78: }
79: }
80: }
81: else
82: {
83: Write-Host "ERROR: Usage: Shrink-Url -longurl http://www.foo.com";
84: }
85: $shorturl;
86: }
87:
88: #----------------------------------------------------------------------------
89: # function Execute-HTTPGetCommand
90: #----------------------------------------------------------------------------
91: function Execute-HTTPGetCommand()
92: {
93: param([string] $url = $null);
94:
95: $user_agent = "PoshShrink";
96:
97: if ( $url )
98: {
99: $request = [System.Net.HttpWebRequest]::Create($url);
100: $request.UserAgent = $user_agent;
101: $request.Credentials = [System.Net.CredentialCache]::DefaultCredentials;
102: if ( $request.Proxy )
103: {
104: $request.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
105: }
106: $response = $request.GetResponse();
107: $rs = $response.GetResponseStream();
108: [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;
109: $sr.ReadToEnd();
110: }
111: }
112:
113: Shrink-Url -longurl $longurl -provider $provider;
You can download the full contents for this script here: Shrink-Url.ps1
Read the original blog entry...
Published June 19, 2009 Reads 15,973
Copyright © 2009 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Joe Pruitt
Joe Pruitt is a Principal Strategic Architect at F5 Networks working with Network and Software Architects to allow them to build network intelligence into their applications.
![]() Jan. 2, 2018 11:25 AM EST Reads: 925 |
By Elizabeth White ![]() Dec. 31, 2017 12:00 PM EST Reads: 2,227 |
By Pat Romanski ![]() Dec. 30, 2017 11:00 AM EST Reads: 2,035 |
By Pat Romanski ![]() Dec. 30, 2017 08:30 AM EST Reads: 14,932 |
By Liz McMillan ![]() Dec. 29, 2017 12:00 PM EST Reads: 3,130 |
By Liz McMillan ![]() Dec. 29, 2017 08:00 AM EST Reads: 3,196 |
By Pat Romanski ![]() Dec. 28, 2017 02:00 PM EST Reads: 4,180 |
By Liz McMillan ![]() Dec. 24, 2017 01:45 PM EST Reads: 2,201 |
By Elizabeth White ![]() Dec. 23, 2017 10:00 AM EST Reads: 2,109 |
By Elizabeth White ![]() Dec. 22, 2017 11:00 AM EST Reads: 1,707 |
By Elizabeth White ![]() Dec. 18, 2017 03:45 PM EST Reads: 3,258 |
By Elizabeth White ![]() Dec. 18, 2017 01:30 PM EST Reads: 3,291 |
By Elizabeth White ![]() Dec. 18, 2017 01:00 PM EST Reads: 5,149 |
By Liz McMillan ![]() Dec. 17, 2017 04:00 PM EST Reads: 2,104 |
By Pat Romanski ![]() Dec. 17, 2017 02:00 PM EST Reads: 2,299 |
By Elizabeth White ![]() Dec. 17, 2017 10:00 AM EST Reads: 2,298 |
By Liz McMillan ![]() Dec. 15, 2017 11:00 AM EST Reads: 3,083 |
By Elizabeth White ![]() Dec. 14, 2017 04:00 PM EST Reads: 2,159 |
By Liz McMillan ![]() Dec. 14, 2017 11:45 AM EST Reads: 2,226 |
By Elizabeth White ![]() Dec. 14, 2017 11:00 AM EST Reads: 2,226 |