multi_shorten 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/README.md +51 -0
- data/lib/multi_shorten/client.rb +48 -0
- data/lib/multi_shorten/url_shorteners.rb +157 -0
- data/lib/multi_shorten.rb +4 -0
- metadata +80 -0
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
README
|
2
|
+
======
|
3
|
+
|
4
|
+
Use multiple url shorteners with a single gem
|
5
|
+
|
6
|
+
Install
|
7
|
+
-------
|
8
|
+
|
9
|
+
<code>gem install multi_shorten</code>
|
10
|
+
|
11
|
+
Usage
|
12
|
+
-----
|
13
|
+
<code>
|
14
|
+
require 'multi_shorten'
|
15
|
+
client = MultiShorten::Client.new
|
16
|
+
</code>
|
17
|
+
<b>For single shortener apis</b>
|
18
|
+
<code>
|
19
|
+
client.shorten({:mode => "single", :url => "http://www.google.com", :shortener => "b54"})
|
20
|
+
</code>
|
21
|
+
|
22
|
+
<b>Sample response for this request</b>
|
23
|
+
<code>
|
24
|
+
{:status => :success, :short_url => "http://b54.in/9o"}
|
25
|
+
</code>
|
26
|
+
|
27
|
+
<b>For multiple apis</b>
|
28
|
+
<code>
|
29
|
+
client.shorten({:mode => "multiple", :url => "http://www.google.com", :shorteners => ["b54", "qr_cx"]})
|
30
|
+
</code>
|
31
|
+
|
32
|
+
<b>Sample response for this request </b>
|
33
|
+
<code>
|
34
|
+
{"b54" => {:status => :fail }, "qr_cx" => {:status => :success, :short_url => "http://qr.cx/9o"}}
|
35
|
+
</code>
|
36
|
+
|
37
|
+
Available Shortener Codes
|
38
|
+
--------------------
|
39
|
+
|
40
|
+
[b54](http://b54.in)
|
41
|
+
[linkee](http://linkee.com)
|
42
|
+
[goo_gl](http://goo.gl)
|
43
|
+
[is_gd](htpp://is.gd)
|
44
|
+
[jumbo_tweet](http://jmb.tw/)
|
45
|
+
[meta_mark](http://metamark.net)
|
46
|
+
[mt_ny](http://mtny.mobi")
|
47
|
+
[qr_cx](http://qr.cx)
|
48
|
+
[shortr](http://shortr.info)
|
49
|
+
|
50
|
+
Use the above codes to shorten your urls with the respective service
|
51
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'url_shorteners'
|
2
|
+
require 'active_support/inflector'
|
3
|
+
module MultiShorten
|
4
|
+
# Client class for MultiShorten
|
5
|
+
# initialize the client with
|
6
|
+
# client = MultiShorten::Client.new
|
7
|
+
class Client
|
8
|
+
# The only method required to use all the features
|
9
|
+
# @param [Hash] params hash with all the required parameters
|
10
|
+
# @return [Hash] the result hash with status and if successful, the shortened url as well.
|
11
|
+
def shorten params
|
12
|
+
raise "Parameter should be a hash" unless params.is_a?(Hash)
|
13
|
+
return missing_parameter_error(:url) if params[:url].nil?
|
14
|
+
return missing_parameter_error(:mode) if params[:mode].nil?
|
15
|
+
case params[:mode]
|
16
|
+
when "single"
|
17
|
+
return missing_parameter_error(:shortener) if params[:shortener].nil?
|
18
|
+
single(params[:shortener], params[:url])
|
19
|
+
when "multiple"
|
20
|
+
return missing_parameter_error(:shorteners) if params[:shorteners].nil
|
21
|
+
multiple(params[:shorteners], params[:url])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def single shortener, url
|
28
|
+
"MultiShorten::#{shortener.camelize}".constantize.shorten(url) rescue fail
|
29
|
+
end
|
30
|
+
|
31
|
+
def multiple shorteners, url
|
32
|
+
result = {}
|
33
|
+
shorteners.each do |shortener|
|
34
|
+
result[shortener] = single(shortener, url)
|
35
|
+
end
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def missing_parameter_error param
|
40
|
+
raise "Missing required parameter: #{param}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def fail
|
44
|
+
{:status => :fail}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'pp'
|
4
|
+
require 'json'
|
5
|
+
# The main MultiShorten module
|
6
|
+
module MultiShorten
|
7
|
+
|
8
|
+
# Base class from which all other classes are derived
|
9
|
+
class UrlShortener
|
10
|
+
# HTTPArty is included here so that its appicable to all the sub classes
|
11
|
+
include HTTParty
|
12
|
+
|
13
|
+
# Returns shortened version of the url for the corresponding. This is the abstract class
|
14
|
+
# @param [String] url the url to be shortened
|
15
|
+
# @return [Hash] the resulting hash with status -> either :success or :fail. If success it also includes the :short_url
|
16
|
+
def self.shorten url
|
17
|
+
end
|
18
|
+
|
19
|
+
# The hash that is returned when there is a failure
|
20
|
+
def fail
|
21
|
+
{ :status => :fail }
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
# URL Shortener for B54
|
27
|
+
class B54 < UrlShortener
|
28
|
+
|
29
|
+
base_uri "http://b54.in"
|
30
|
+
format :json
|
31
|
+
|
32
|
+
def self.shorten url
|
33
|
+
response = get "/api", :query => {:action => "shorturl", :url => URI.encode(url), :format => "json"} rescue return fail
|
34
|
+
if response["shorturl"]
|
35
|
+
{:status => :success, :short_url => URI.unescape(response["shorturl"])}
|
36
|
+
else
|
37
|
+
fail
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
# URL Shortener for Linkee
|
44
|
+
class Linkee < UrlShortener
|
45
|
+
base_uri "http://api.linkee.com"
|
46
|
+
format :json
|
47
|
+
def self.shorten url
|
48
|
+
response = get "/1.0/shorten", :query => {:input => URI.encode(url)}
|
49
|
+
if response["status"]["code"] == 200
|
50
|
+
{:status => :success, :short_url => response["result"]}
|
51
|
+
else
|
52
|
+
{:status => :fail}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# URL Shortener for goo.gl
|
58
|
+
class GooGl < UrlShortener
|
59
|
+
base_uri "https://www.googleapis.com/urlshortener"
|
60
|
+
format :json
|
61
|
+
def self.shorten url
|
62
|
+
response = post "/v1/url", :headers => {"Content-Type" => "application/json"}, :body => JSON.dump({:longUrl => URI.encode(url)})
|
63
|
+
unless response.parsed_response["id"].nil?
|
64
|
+
{ :status => :success, :short_url => response.parsed_response["id"] }
|
65
|
+
else
|
66
|
+
fail
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# URL Shortener for is.gd
|
72
|
+
class IsGd < UrlShortener
|
73
|
+
base_uri "http://is.gd/"
|
74
|
+
format :json
|
75
|
+
def self.shorten url
|
76
|
+
response = get "/create.php", :query => {:format => "json", :url => URI.encode(url)}
|
77
|
+
unless response.parsed_response["shorturl"].nil?
|
78
|
+
{ :status => :success, :short_url => response.parsed_response["shorturl"] }
|
79
|
+
else
|
80
|
+
fail
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# URL Shortener for Jumbo Tweet
|
86
|
+
class JumboTweet < UrlShortener
|
87
|
+
base_uri "http://jmb.tw"
|
88
|
+
format :plain
|
89
|
+
def self.shorten url
|
90
|
+
response = get "/api/create", :query => { :newurl => URI.encode(url)}
|
91
|
+
if response.match("^http://jmb.tw/.+")
|
92
|
+
{ :status => :success, :short_url => response.parsed_response }
|
93
|
+
else
|
94
|
+
fail
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# URL Shortener for metamark
|
100
|
+
class MetaMark < UrlShortener
|
101
|
+
base_uri "http://metamark.net"
|
102
|
+
format :plain
|
103
|
+
def self.shorten url
|
104
|
+
response = get "/api/rest/simple", :query => { :long_url => URI.encode(url)}
|
105
|
+
if response.match("^http://xrl.us/.+")
|
106
|
+
{ :status => :success, :short_url => response.parsed_response }
|
107
|
+
else
|
108
|
+
fail
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# URL Shortener for mtny.mobi
|
114
|
+
class MtNy < UrlShortener
|
115
|
+
base_uri "http://mtny.mobi"
|
116
|
+
format :json
|
117
|
+
def self.shorten url
|
118
|
+
response = get "/api", :query => {:type => "json", :source => "web", :url => URI.encode(url)}
|
119
|
+
unless response.parsed_response["url"].nil?
|
120
|
+
{ :status => :success, :short_url => response.parsed_response["url"] }
|
121
|
+
else
|
122
|
+
fail
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# URL Shortener for qr.cx
|
128
|
+
class QrCx < UrlShortener
|
129
|
+
base_uri "http://qr.cx"
|
130
|
+
format :plain
|
131
|
+
|
132
|
+
def self.shorten url
|
133
|
+
response = get "/api/?", :query => {:longurl => URI.encode(url)}
|
134
|
+
if response.match("^http://qr.cx/.+")
|
135
|
+
{ :status => :success, :short_url => response.parsed_response }
|
136
|
+
else
|
137
|
+
fail
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
# URL Shortener for shortr.info
|
144
|
+
class Shortr < UrlShortener
|
145
|
+
base_uri "http://shortr.info"
|
146
|
+
format :json
|
147
|
+
def self.shorten url
|
148
|
+
response = get "/make-shortr.php", :query => {:format => "json", :url => URI.encode(url)}
|
149
|
+
unless response.parsed_response["shortr"]["result"]["created"].nil?
|
150
|
+
{ :status => :success, :short_url => response.parsed_response["shortr"]["result"]["created"] }
|
151
|
+
else
|
152
|
+
fail
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: multi_shorten
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Rony Varghese
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-31 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: active_support
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Use multiple url shorteners to shorten single or multiple urls
|
47
|
+
email: ronyv250289@gmail.com
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- lib/multi_shorten/client.rb
|
53
|
+
- lib/multi_shorten/url_shorteners.rb
|
54
|
+
- lib/multi_shorten.rb
|
55
|
+
- README.md
|
56
|
+
homepage: http://rubygems.org/gems/multi_shorten
|
57
|
+
licenses: []
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.8.24
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: Multiple URL Shorteners in one place
|
80
|
+
test_files: []
|