bitly 0.6.2 → 0.7.0
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/History.txt +14 -4
- data/README.md +5 -5
- data/Rakefile +1 -1
- data/bitly.gemspec +5 -5
- data/lib/bitly/v3/client.rb +15 -15
- data/lib/bitly/v3/oauth.rb +14 -9
- data/lib/bitly/v3/url.rb +23 -12
- data/lib/bitly/v3/user.rb +42 -19
- data/lib/bitly/version.rb +1 -1
- metadata +9 -9
data/History.txt
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
+
=== 0.7.0 / 2011-1-8
|
2
|
+
|
3
|
+
* 1 major bug fix
|
4
|
+
|
5
|
+
* Updates OAuth2 gem and fixes OAuth class
|
6
|
+
|
7
|
+
* 1 minor enhancement
|
8
|
+
|
9
|
+
Adds link_history to user model
|
10
|
+
|
1
11
|
=== 0.6.2 / 2011-11-10
|
2
12
|
|
3
13
|
* 2 minor enhancements
|
4
|
-
|
14
|
+
|
5
15
|
* Adds days parameter to clicks_by_minute v3 API call
|
6
16
|
* Converts Readme to markdown
|
7
17
|
|
@@ -51,7 +61,7 @@
|
|
51
61
|
* 1 bug fix
|
52
62
|
|
53
63
|
* When expanding a short url with the v3 module, user hash and short url weren't being set properly
|
54
|
-
|
64
|
+
|
55
65
|
=== 0.5.0 / 2010-05-12
|
56
66
|
|
57
67
|
* Loads of major enhancements
|
@@ -86,7 +96,7 @@
|
|
86
96
|
* 1 minor enhancement
|
87
97
|
|
88
98
|
* calling bitly.shorten(:history => 1) will add the url to the api user's history.
|
89
|
-
|
99
|
+
|
90
100
|
* 1 bug fix
|
91
101
|
|
92
102
|
* you can no longer call shorten with a keyword, this was unsupported in the API and consequently removed
|
@@ -96,7 +106,7 @@
|
|
96
106
|
* 1 enhancement
|
97
107
|
|
98
108
|
* Depends on Crack instead of JSON, so can run on Jruby
|
99
|
-
|
109
|
+
|
100
110
|
* 1 bug fix
|
101
111
|
|
102
112
|
* Does not choke when bit.ly chokes. Returns a BitlyError instead
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
## DESCRIPTION:
|
4
4
|
|
5
|
-
A Ruby API for [http://bit.ly](http://bit.ly)
|
5
|
+
A Ruby API for [http://bit.ly](http://bit.ly)
|
6
6
|
|
7
7
|
[http://code.google.com/p/bitly-api/wiki/ApiDocumentation](http://code.google.com/p/bitly-api/wiki/ApiDocumentation)
|
8
8
|
|
@@ -45,7 +45,7 @@ Each can be used in all the methods described in the API docs, the shorten funct
|
|
45
45
|
All four functions return a ``Bitly::Url`` object (or an array of ``Bitly::Url`` objects if you supplied an array as the input). You can then get all the information required from that object.
|
46
46
|
|
47
47
|
u = bitly.shorten('http://www.google.com') #=> Bitly::Url
|
48
|
-
|
48
|
+
|
49
49
|
u.long_url #=> "http://www.google.com"
|
50
50
|
u.short_url #=> "http://bit.ly/Ywd1"
|
51
51
|
u.bitly_url #=> "http://bit.ly/Ywd1"
|
@@ -54,7 +54,7 @@ All four functions return a ``Bitly::Url`` object (or an array of ``Bitly::Url``
|
|
54
54
|
u.hash #=> "2V6CFi"
|
55
55
|
u.info #=> a ruby hash of the JSON returned from the API
|
56
56
|
u.stats #=> a ruby hash of the JSON returned from the API
|
57
|
-
|
57
|
+
|
58
58
|
bitly.shorten('http://www.google.com', 'keyword')
|
59
59
|
|
60
60
|
### Version 3 API
|
@@ -74,10 +74,10 @@ Please see the Bit.ly API documentation [http://api.bit.ly](http://api.bit.ly) f
|
|
74
74
|
> distribute, sublicense, and/or sell copies of the Software, and to
|
75
75
|
> permit persons to whom the Software is furnished to do so, subject to
|
76
76
|
> the following conditions:
|
77
|
-
>
|
77
|
+
>
|
78
78
|
> The above copyright notice and this permission notice shall be
|
79
79
|
> included in all copies or substantial portions of the Software.
|
80
|
-
>
|
80
|
+
>
|
81
81
|
> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
82
82
|
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
83
83
|
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
data/Rakefile
CHANGED
@@ -8,6 +8,6 @@ Echoe.new('bitly', Bitly::VERSION) do |p|
|
|
8
8
|
p.url = "http://github.com/philnash/bitly"
|
9
9
|
p.author = "Phil Nash"
|
10
10
|
p.email = "philnash@gmail.com"
|
11
|
-
p.extra_deps = [['crack', '>= 0.1.4'], ['httparty', '>= 0.7.6'], ['oauth2', '
|
11
|
+
p.extra_deps = [['crack', '>= 0.1.4'], ['httparty', '>= 0.7.6'], ['oauth2', '~> 0.5.0']]
|
12
12
|
p.development_dependencies = []
|
13
13
|
end
|
data/bitly.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{bitly}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.7.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Phil Nash"]
|
9
|
-
s.date = %q{
|
9
|
+
s.date = %q{2012-01-08}
|
10
10
|
s.description = %q{Use the bit.ly API to shorten or expand URLs}
|
11
11
|
s.email = %q{philnash@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["README.md", "lib/bitly.rb", "lib/bitly/client.rb", "lib/bitly/url.rb", "lib/bitly/utils.rb", "lib/bitly/v3.rb", "lib/bitly/v3/bitly.rb", "lib/bitly/v3/client.rb", "lib/bitly/v3/country.rb", "lib/bitly/v3/day.rb", "lib/bitly/v3/missing_url.rb", "lib/bitly/v3/oauth.rb", "lib/bitly/v3/realtime_link.rb", "lib/bitly/v3/referrer.rb", "lib/bitly/v3/url.rb", "lib/bitly/v3/user.rb", "lib/bitly/version.rb"]
|
@@ -26,15 +26,15 @@ Gem::Specification.new do |s|
|
|
26
26
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
27
|
s.add_runtime_dependency(%q<crack>, [">= 0.1.4"])
|
28
28
|
s.add_runtime_dependency(%q<httparty>, [">= 0.7.6"])
|
29
|
-
s.add_runtime_dependency(%q<oauth2>, ["
|
29
|
+
s.add_runtime_dependency(%q<oauth2>, ["~> 0.5.0"])
|
30
30
|
else
|
31
31
|
s.add_dependency(%q<crack>, [">= 0.1.4"])
|
32
32
|
s.add_dependency(%q<httparty>, [">= 0.7.6"])
|
33
|
-
s.add_dependency(%q<oauth2>, ["
|
33
|
+
s.add_dependency(%q<oauth2>, ["~> 0.5.0"])
|
34
34
|
end
|
35
35
|
else
|
36
36
|
s.add_dependency(%q<crack>, [">= 0.1.4"])
|
37
37
|
s.add_dependency(%q<httparty>, [">= 0.7.6"])
|
38
|
-
s.add_dependency(%q<oauth2>, ["
|
38
|
+
s.add_dependency(%q<oauth2>, ["~> 0.5.0"])
|
39
39
|
end
|
40
40
|
end
|
data/lib/bitly/v3/client.rb
CHANGED
@@ -11,21 +11,21 @@ module Bitly
|
|
11
11
|
def initialize(login, api_key)
|
12
12
|
@default_query_opts = { :login => login, :apiKey => api_key }
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
# Validates a login and api key
|
16
16
|
def validate(x_login, x_api_key)
|
17
17
|
response = get('/validate', :query => { :x_login => x_login, :x_apiKey => x_api_key })
|
18
18
|
return response['data']['valid'] == 1
|
19
19
|
end
|
20
20
|
alias :valid? :validate
|
21
|
-
|
21
|
+
|
22
22
|
# Checks whether a domain is a bitly.Pro domain
|
23
23
|
def bitly_pro_domain(domain)
|
24
24
|
response = get('/bitly_pro_domain', :query => { :domain => domain })
|
25
25
|
return response['data']['bitly_pro_domain']
|
26
26
|
end
|
27
27
|
alias :pro? :bitly_pro_domain
|
28
|
-
|
28
|
+
|
29
29
|
# Shortens a long url
|
30
30
|
#
|
31
31
|
# Options can be:
|
@@ -39,26 +39,26 @@ module Bitly
|
|
39
39
|
response = get('/shorten', :query => query)
|
40
40
|
return Bitly::V3::Url.new(self, response['data'])
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
# Expands either a hash, short url or array of either.
|
44
44
|
#
|
45
45
|
# Returns the results in the order they were entered
|
46
46
|
def expand(input)
|
47
47
|
get_method(:expand, input)
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# Expands either a hash, short url or array of either and gets click data too.
|
51
51
|
#
|
52
52
|
# Returns the results in the order they were entered
|
53
53
|
def clicks(input)
|
54
54
|
get_method(:clicks, input)
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
# Like expand, but gets the title of the page and who created it
|
58
58
|
def info(input)
|
59
|
-
get_method(:info, input)
|
59
|
+
get_method(:info, input)
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
# Looks up the short url and global hash of a url or array of urls
|
63
63
|
#
|
64
64
|
# Returns the results in the order they were entered
|
@@ -83,7 +83,7 @@ module Bitly
|
|
83
83
|
end
|
84
84
|
return results.length > 1 ? results : results[0]
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
# Expands either a short link or hash and gets the referrer data for that link
|
88
88
|
#
|
89
89
|
# This method does not take an array as an input
|
@@ -108,17 +108,17 @@ module Bitly
|
|
108
108
|
opts.reject! { |k, v| k.to_s != 'days' }
|
109
109
|
get_method(:clicks_by_day, input, opts)
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
private
|
113
113
|
|
114
114
|
def arrayize(arg)
|
115
115
|
if arg.is_a?(String)
|
116
|
-
[arg]
|
116
|
+
[arg]
|
117
117
|
else
|
118
118
|
arg.dup
|
119
119
|
end
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
def get(method, opts={})
|
123
123
|
opts[:query] ||= {}
|
124
124
|
opts[:query].merge!(@default_query_opts)
|
@@ -129,11 +129,11 @@ module Bitly
|
|
129
129
|
raise BitlyError.new(response['status_txt'], response['status_code'])
|
130
130
|
end
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
def is_a_short_url?(input)
|
134
134
|
input.match(/^http:\/\//)
|
135
135
|
end
|
136
|
-
|
136
|
+
|
137
137
|
def get_single_method(method, input)
|
138
138
|
raise ArgumentError.new("This method only takes a hash or url input") unless input.is_a? String
|
139
139
|
if is_a_short_url?(input)
|
@@ -145,7 +145,7 @@ module Bitly
|
|
145
145
|
response = get(query)
|
146
146
|
return Bitly::V3::Url.new(self,response['data'])
|
147
147
|
end
|
148
|
-
|
148
|
+
|
149
149
|
def get_method(method, input, opts={})
|
150
150
|
input = arrayize(input)
|
151
151
|
query = input.inject([]) do |query,i|
|
data/lib/bitly/v3/oauth.rb
CHANGED
@@ -1,33 +1,38 @@
|
|
1
1
|
module Bitly
|
2
|
-
module V3
|
2
|
+
module V3
|
3
3
|
# OAuth consumer for authentication
|
4
4
|
class OAuth
|
5
5
|
attr_reader :access_token
|
6
6
|
def initialize(consumer_token, consumer_secret)
|
7
7
|
@consumer_token, @consumer_secret = consumer_token, consumer_secret
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
# Get the OAuth 2 client
|
11
11
|
def client
|
12
|
-
@client ||= ::OAuth2::Client.new(
|
12
|
+
@client ||= ::OAuth2::Client.new(
|
13
|
+
@consumer_token,
|
14
|
+
@consumer_secret,
|
15
|
+
:site => 'https://api-ssl.bit.ly',
|
16
|
+
:token_url => '/oauth/access_token'
|
17
|
+
)
|
13
18
|
end
|
14
|
-
|
19
|
+
|
15
20
|
# Get the url to redirect a user to, pass the url you want the user
|
16
21
|
# to be redirected back to.
|
17
22
|
def authorize_url(redirect_url)
|
18
|
-
client.
|
23
|
+
client.auth_code.authorize_url(:redirect_uri => redirect_url).gsub(/api-ssl\./,'')
|
19
24
|
end
|
20
|
-
|
25
|
+
|
21
26
|
# Get the access token. You must pass the exact same redirect_url passed
|
22
27
|
# to the authorize_url method
|
23
28
|
def get_access_token_from_code(code,redirect_url)
|
24
|
-
@access_token ||= client.
|
29
|
+
@access_token ||= client.auth_code.get_token(code, :redirect_uri => redirect_url, :parse => :query)
|
25
30
|
end
|
26
|
-
|
31
|
+
|
27
32
|
# If you already have a user token, this method gets the access token
|
28
33
|
def get_access_token_from_token(token, params={})
|
29
34
|
params = params.inject({}) { |options, (key, value)| options[key.to_s] = value; options }
|
30
|
-
@access_token ||= ::OAuth2::AccessToken.new(client, token,
|
35
|
+
@access_token ||= ::OAuth2::AccessToken.new(client, token, params)
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
data/lib/bitly/v3/url.rb
CHANGED
@@ -3,8 +3,8 @@ module Bitly
|
|
3
3
|
# Url objects should only be created by the client object as it collects the correct information
|
4
4
|
# from the API.
|
5
5
|
class Url
|
6
|
-
attr_reader :short_url, :long_url, :user_hash, :global_hash
|
7
|
-
|
6
|
+
attr_reader :short_url, :long_url, :user_hash, :global_hash, :aggregate_link
|
7
|
+
|
8
8
|
# Initialize with a bitly client and optional hash to fill in the details for the url.
|
9
9
|
def initialize(client, opts={})
|
10
10
|
@client = client
|
@@ -18,6 +18,8 @@ module Bitly
|
|
18
18
|
@global_clicks = opts['global_clicks']
|
19
19
|
@title = opts['title']
|
20
20
|
@created_by = opts['created_by']
|
21
|
+
@created_at = Time.at opts['created_at'] if opts['created_at']
|
22
|
+
@aggregate_link = opts['aggregate_link']
|
21
23
|
@referrers = opts['referrers'].inject([]) do |results, referrer|
|
22
24
|
results << Bitly::V3::Referrer.new(referrer)
|
23
25
|
end if opts['referrers']
|
@@ -34,12 +36,12 @@ module Bitly
|
|
34
36
|
end
|
35
37
|
@short_url = "http://bit.ly/#{@user_hash}" unless @short_url
|
36
38
|
end
|
37
|
-
|
39
|
+
|
38
40
|
# Returns true if the user hash was created first for this call
|
39
41
|
def new_hash?
|
40
42
|
@new_hash
|
41
43
|
end
|
42
|
-
|
44
|
+
|
43
45
|
# If the url already has click statistics, returns the user clicks.
|
44
46
|
# IF there are no click statistics or <tt>:force => true</tt> is passed,
|
45
47
|
# updates the stats and returns the user clicks
|
@@ -47,7 +49,7 @@ module Bitly
|
|
47
49
|
update_clicks_data if @global_clicks.nil? || opts[:force]
|
48
50
|
@user_clicks
|
49
51
|
end
|
50
|
-
|
52
|
+
|
51
53
|
# If the url already has click statistics, returns the global clicks.
|
52
54
|
# IF there are no click statistics or <tt>:force => true</tt> is passed,
|
53
55
|
# updates the stats and returns the global clicks
|
@@ -55,7 +57,7 @@ module Bitly
|
|
55
57
|
update_clicks_data if @global_clicks.nil? || opts[:force]
|
56
58
|
@global_clicks
|
57
59
|
end
|
58
|
-
|
60
|
+
|
59
61
|
# If the url already has the title, return it.
|
60
62
|
# IF there is no title or <tt>:force => true</tt> is passed,
|
61
63
|
# updates the info and returns the title
|
@@ -63,7 +65,7 @@ module Bitly
|
|
63
65
|
update_info if @title.nil? || opts[:force]
|
64
66
|
@title
|
65
67
|
end
|
66
|
-
|
68
|
+
|
67
69
|
# If the url already has the creator, return it.
|
68
70
|
# IF there is no creator or <tt>:force => true</tt> is passed,
|
69
71
|
# updates the info and returns the creator
|
@@ -71,7 +73,7 @@ module Bitly
|
|
71
73
|
update_info if @created_by.nil? || opts[:force]
|
72
74
|
@created_by
|
73
75
|
end
|
74
|
-
|
76
|
+
|
75
77
|
# If the url already has referrer data, return it.
|
76
78
|
# IF there is no referrer or <tt>:force => true</tt> is passed,
|
77
79
|
# updates the referrers and returns them
|
@@ -88,6 +90,14 @@ module Bitly
|
|
88
90
|
@countries
|
89
91
|
end
|
90
92
|
|
93
|
+
# If the url already has created at data, return it.
|
94
|
+
# If there is no created at data or <tt>:force => true</tt> is passed,
|
95
|
+
# updates the info and returns it
|
96
|
+
def created_at(opts={})
|
97
|
+
update_info if @created_at.nil? || opts[:force]
|
98
|
+
@created_at
|
99
|
+
end
|
100
|
+
|
91
101
|
def clicks_by_minute(opts={})
|
92
102
|
if @clicks_by_minute.nil? || opts[:force]
|
93
103
|
full_url = @client.clicks_by_minute(@user_hash || @short_url)
|
@@ -103,21 +113,22 @@ module Bitly
|
|
103
113
|
end
|
104
114
|
@clicks_by_day
|
105
115
|
end
|
106
|
-
|
116
|
+
|
107
117
|
private
|
108
|
-
|
118
|
+
|
109
119
|
def update_clicks_data
|
110
120
|
full_url = @client.clicks(@user_hash || @short_url)
|
111
121
|
@global_clicks = full_url.global_clicks
|
112
122
|
@user_clicks = full_url.user_clicks
|
113
123
|
end
|
114
|
-
|
124
|
+
|
115
125
|
def update_info
|
116
126
|
full_url = @client.info(@user_hash || @short_url)
|
117
127
|
@created_by = full_url.created_by
|
118
128
|
@title = full_url.title
|
129
|
+
@created_at = full_url.created_at
|
119
130
|
end
|
120
|
-
|
131
|
+
|
121
132
|
def update_referrers
|
122
133
|
full_url = @client.referrers(@user_hash || @short_url)
|
123
134
|
@referrers = full_url.referrers
|
data/lib/bitly/v3/user.rb
CHANGED
@@ -16,16 +16,18 @@ module Bitly
|
|
16
16
|
#
|
17
17
|
# u=Bitly::V3::User.new(o.access_token)
|
18
18
|
class User
|
19
|
+
include HTTParty
|
20
|
+
base_uri 'https://api-ssl.bit.ly/v3/'
|
19
21
|
attr_accessor :login, :api_key
|
20
|
-
|
22
|
+
|
21
23
|
def initialize(access_token)
|
22
24
|
@access_token = access_token
|
23
25
|
@login = access_token['login'] || access_token['username']
|
24
26
|
@api_key = access_token['apiKey'] || access_token['api_key']
|
25
27
|
end
|
26
|
-
|
28
|
+
|
27
29
|
# OAuth 2 endpoint that provides a list of top referrers (up to 500 per
|
28
|
-
# day) for a given user’s bit.ly links, and the number of clicks per referrer.
|
30
|
+
# day) for a given user’s bit.ly links, and the number of clicks per referrer.
|
29
31
|
#
|
30
32
|
# http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/user/referrers
|
31
33
|
def referrers(opts={})
|
@@ -34,9 +36,9 @@ module Bitly
|
|
34
36
|
end
|
35
37
|
@referrers
|
36
38
|
end
|
37
|
-
|
39
|
+
|
38
40
|
# OAuth 2 endpoint that provides a list of countries from which clicks
|
39
|
-
# on a given user’s bit.ly links are originating, and the number of clicks per country.
|
41
|
+
# on a given user’s bit.ly links are originating, and the number of clicks per country.
|
40
42
|
#
|
41
43
|
# http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/user/countries
|
42
44
|
def countries(opts={})
|
@@ -45,23 +47,24 @@ module Bitly
|
|
45
47
|
end
|
46
48
|
@countries
|
47
49
|
end
|
48
|
-
|
50
|
+
|
49
51
|
# OAuth 2 endpoint that provides a given user’s 100 most popular links
|
50
|
-
# based on click traffic in the past hour, and the number of clicks per link.
|
52
|
+
# based on click traffic in the past hour, and the number of clicks per link.
|
51
53
|
#
|
52
54
|
# http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/user/realtime_links
|
53
55
|
def realtime_links(opts={})
|
54
56
|
if @realtime_links.nil? || opts.delete(:force)
|
55
|
-
|
57
|
+
opts.merge!(:access_token => @access_token.token)
|
58
|
+
result = self.class.get("/user/realtime_links", :query => opts)
|
56
59
|
if result['status_code'] == 200
|
57
60
|
@realtime_links = result['data']['realtime_links'].map { |rs| Bitly::V3::RealtimeLink.new(rs) }
|
58
61
|
else
|
59
|
-
raise BitlyError.new(
|
62
|
+
raise BitlyError.new(result['status_txt'], result['status_code'])
|
60
63
|
end
|
61
64
|
end
|
62
65
|
@realtime_links
|
63
66
|
end
|
64
|
-
|
67
|
+
|
65
68
|
# OAuth 2 endpoint that provides the total clicks per day on a user’s bit.ly links.
|
66
69
|
#
|
67
70
|
# http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/user/clicks
|
@@ -69,22 +72,41 @@ module Bitly
|
|
69
72
|
get_clicks(opts)
|
70
73
|
@clicks
|
71
74
|
end
|
72
|
-
|
75
|
+
|
73
76
|
# Displays the total clicks returned from the clicks method.
|
74
77
|
def total_clicks(opts={})
|
75
78
|
get_clicks(opts)
|
76
79
|
@total_clicks
|
77
80
|
end
|
78
|
-
|
81
|
+
|
79
82
|
# Returns a Bitly Client using the credentials of the user.
|
80
83
|
def client
|
81
84
|
@client ||= Bitly::V3::Client.new(login, api_key)
|
82
85
|
end
|
83
|
-
|
86
|
+
|
87
|
+
# OAuth 2 endpoint that OAuth 2 endpoint that provides a given user’s link
|
88
|
+
# shortening history, in reverse chronological order (most recent to least
|
89
|
+
# recent).
|
90
|
+
def link_history(opts={})
|
91
|
+
opts.merge!(:access_token => @access_token.token)
|
92
|
+
result = self.class.get("/user/link_history", :query => opts)
|
93
|
+
if result['status_code'] == 200
|
94
|
+
results = result['data']['link_history'].inject([]) do |rs, obj|
|
95
|
+
obj['short_url'] = obj['link']
|
96
|
+
obj['hash'] = obj['link'].split('/').last
|
97
|
+
rs << Url.new(client, obj)
|
98
|
+
end
|
99
|
+
return results
|
100
|
+
else
|
101
|
+
raise BitlyError.new(result['status_txt'], result['status_code'])
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
84
105
|
private
|
85
|
-
|
106
|
+
|
86
107
|
def get_method(method, klass, opts)
|
87
|
-
|
108
|
+
opts.merge!(:access_token => @access_token.token)
|
109
|
+
result = self.class.get("/user/#{method.to_s}", :query => opts)
|
88
110
|
if result['status_code'] == 200
|
89
111
|
results = result['data'][method.to_s].map do |rs|
|
90
112
|
rs.inject([]) do |results, obj|
|
@@ -93,18 +115,19 @@ module Bitly
|
|
93
115
|
end
|
94
116
|
return results
|
95
117
|
else
|
96
|
-
raise BitlyError.new(
|
118
|
+
raise BitlyError.new(result['status_txt'], result['status_code'])
|
97
119
|
end
|
98
120
|
end
|
99
|
-
|
121
|
+
|
100
122
|
def get_clicks(opts={})
|
101
123
|
if @clicks.nil? || opts.delete(:force)
|
102
|
-
|
124
|
+
opts.merge!(:access_token => @access_token.token)
|
125
|
+
result = self.class.get("/user/clicks", :query => opts)
|
103
126
|
if result['status_code'] == 200
|
104
127
|
@clicks = result['data']['clicks'].map { |rs| Bitly::V3::Day.new(rs) }
|
105
128
|
@total_clicks = result['data']['total_clicks']
|
106
129
|
else
|
107
|
-
raise BitlyError.new(
|
130
|
+
raise BitlyError.new(result['status_txt'], result['status_code'])
|
108
131
|
end
|
109
132
|
end
|
110
133
|
end
|
data/lib/bitly/version.rb
CHANGED
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Phil Nash
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-01-08 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
61
|
+
hash: 11
|
62
62
|
segments:
|
63
63
|
- 0
|
64
|
-
-
|
65
|
-
-
|
66
|
-
version: 0.
|
64
|
+
- 5
|
65
|
+
- 0
|
66
|
+
version: 0.5.0
|
67
67
|
type: :runtime
|
68
68
|
version_requirements: *id003
|
69
69
|
description: Use the bit.ly API to shorten or expand URLs
|