googleurlshortener 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in googleurlshortener.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ Google Url Shortener
2
+ ====================
3
+
4
+ Gem for simply using Google's URL shortening service.
5
+
6
+ Installation
7
+ ------------
8
+
9
+ gem install googleurlshortener
10
+
11
+ Usage
12
+ -----
13
+
14
+ There are two ways to use the shortener
15
+
16
+ 1) Default (unauthenticated)
17
+
18
+ shortener = Googleurlshortener::Default.new
19
+ short_url = shortener.shorten("https://github.com/mkraft/GoogleAPIs")
20
+
21
+ 2) Authenticated
22
+
23
+ authd_shortener = Googleurlshortener::Authenticated.new("someemail@gmail.com", "somepassword")
24
+ short_url = authd_shortener.shorten("https://github.com/mkraft/GoogleAPIs")
25
+
26
+ If you're authenticated you can use all of the normal methods and also get analytics about URL's you have shortened.
27
+
28
+ analytics_object = authd_shortener.analytics(short_url)
29
+
30
+ Methods
31
+ -------
32
+
33
+ Assuming a Googleurlshortener instance named `s`, one can do the following
34
+
35
+ - `s.shorten(long_url)`
36
+ - `s.expand(short_url)`
37
+ - `s.analytics(short_url)` (Authenticated only) Returns an object in the structure of the JSON object sent by Google.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "googleurlshortener/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "googleurlshortener"
7
+ s.version = Googleurlshortener::VERSION
8
+ s.authors = ["Martin Kraft"]
9
+ s.email = ["martinkraft@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Shorten and expand URL's with Google's shortener API.}
12
+ s.description = %q{Shorten a long URL, get click analylitcs about it, and re-expand it again using Google's URL shortening API.}
13
+
14
+ s.rubyforge_project = "googleurlshortener"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
@@ -0,0 +1,71 @@
1
+ #require "googleurlshortener/version"
2
+ require 'json'
3
+ require 'uri'
4
+ require 'net/http'
5
+
6
+ module Googleurlshortener
7
+
8
+ class Default
9
+
10
+ def shorten(long_url)
11
+ uri = URI("https://www.googleapis.com/urlshortener/v1/url")
12
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
13
+ request = Net::HTTP::Post.new uri.request_uri
14
+ if defined? @auth_token && @auth_token != "" && @auth_token != nil
15
+ request['Authorization'] = @auth_token
16
+ end
17
+ request["Content-Type"] = "application/json"
18
+ response = http.request(request, "{\"longUrl\": \"#{long_url}\"}")
19
+ @body = response.body
20
+ end
21
+ return JSON.parse(@body)["id"]
22
+ end
23
+
24
+ def expand(short_url)
25
+ uri = URI("https://www.googleapis.com/urlshortener/v1/url?shortUrl=#{short_url}")
26
+ request = Net::HTTP::Get.new(uri.request_uri)
27
+ response = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http|
28
+ http.request(request)
29
+ }
30
+ return JSON.parse(response.body)["longUrl"]
31
+ end
32
+
33
+ end
34
+
35
+ class Authenticated < Default
36
+
37
+ def initialize(email, password)
38
+ @auth_token = get_authentication_token(email, password)
39
+ end
40
+
41
+ def analytics(short_url)
42
+ uri = URI("https://www.googleapis.com/urlshortener/v1/url?shortUrl=#{short_url}&projection=FULL")
43
+ request = Net::HTTP::Get.new(uri.request_uri)
44
+ request['Authorization'] = @auth_token
45
+ response = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http|
46
+ http.request(request)
47
+ }
48
+ return JSON.parse(response.body)
49
+ end
50
+
51
+ private
52
+
53
+ def get_authentication_token(email, password)
54
+ uri = URI("https://www.google.com/accounts/ClientLogin")
55
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
56
+ request = Net::HTTP::Post.new uri.request_uri
57
+ data = "accountType=HOSTED_OR_GOOGLE&Email=#{email}&Passwd=#{password}&service=lh2&source=someapp1"
58
+ response = http.request(request, data)
59
+ @body = response.body
60
+ end
61
+ start_index = @body.index('Auth=')
62
+ slice_of_auth_to_end = @body[start_index..-1]
63
+ end_index = slice_of_auth_to_end.index("\n")
64
+ auth_string = slice_of_auth_to_end[0...end_index]
65
+ auth_token = "GoogleLogin #{auth_string}"
66
+ return auth_token
67
+ end
68
+
69
+ end
70
+
71
+ end
@@ -0,0 +1,3 @@
1
+ module Googleurlshortener
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,36 @@
1
+ require 'test/unit'
2
+ require 'shoulda'
3
+ require_relative '../lib/googleurlshortener'
4
+
5
+ module GoogleUrlShortener
6
+ class TestUrlShortener < Test::Unit::TestCase
7
+
8
+ context "shorten a URL" do
9
+ url_shortener = Googleurlshortener::Default.new
10
+ should "return a shorter url" do
11
+ long_url = "https://github.com/mkraft/GoogleAPIs"
12
+ short_url = url_shortener.shorten(long_url)
13
+ assert long_url.size > short_url.size
14
+ end
15
+ end
16
+
17
+ context "expand a URL" do
18
+ url_shortener = Googleurlshortener::Default.new
19
+ should "return a longer url" do
20
+ short_url = "http://goo.gl/cQJ6o"
21
+ long_url = url_shortener.expand(short_url)
22
+ assert long_url.size > short_url.size
23
+ end
24
+ end
25
+
26
+ context "get analytics object" do
27
+ url_shortener = Googleurlshortener::Authenticated.new("apitest33@gmail.com", "ruhak23A")
28
+ should "return an expected result for 'kind'" do
29
+ short_url = "http://goo.gl/cQJ6o"
30
+ analytics = url_shortener.analytics(short_url)
31
+ assert analytics["kind"] == "urlshortener#url"
32
+ end
33
+ end
34
+
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: googleurlshortener
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Martin Kraft
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-18 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Shorten a long URL, get click analylitcs about it, and re-expand it again
15
+ using Google's URL shortening API.
16
+ email:
17
+ - martinkraft@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - README.md
25
+ - Rakefile
26
+ - googleurlshortener.gemspec
27
+ - lib/googleurlshortener.rb
28
+ - lib/googleurlshortener/version.rb
29
+ - test/test_url_shortener.rb
30
+ homepage: ''
31
+ licenses: []
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubyforge_project: googleurlshortener
50
+ rubygems_version: 1.8.12
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: Shorten and expand URL's with Google's shortener API.
54
+ test_files:
55
+ - test/test_url_shortener.rb