deviantart-oauth2 0.1.2.4

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.
Files changed (2) hide show
  1. data/lib/deviantart.rb +110 -0
  2. metadata +94 -0
data/lib/deviantart.rb ADDED
@@ -0,0 +1,110 @@
1
+ require 'rubygems'
2
+ require 'open-uri'
3
+ require 'json'
4
+ require 'yaml'
5
+ require 'rest-client'
6
+
7
+
8
+
9
+ class DeviantClient
10
+ attr_accessor :key
11
+ attr_accessor :secret
12
+ attr_accessor :access_token
13
+ attr_accessor :refresh_token
14
+ OAUTH_PATH = 'https://www.deviantart.com/oauth2/draft15/'
15
+ API_PATH = 'https://www.deviantart.com/api/draft15/'
16
+
17
+ def initialize key=nil, secret=nil
18
+ @key = key
19
+ @secret = secret
20
+ end
21
+
22
+ def authorization_url params = {}
23
+ redirect_uri = (params.has_key? :redirect_uri) ? params[:redirect_uri] : ''
24
+ url = OAUTH_PATH + 'authorize?client_id=' + @key + '&redirect_uri=' + redirect_uri + '&display=page&response_type=code'
25
+ end
26
+
27
+ def get_token params
28
+ code = params[:code] ? params[:code] : ''
29
+ url = OAUTH_PATH + 'token?client_id=' + @key + '&client_secret=' + @secret + '&code=' + code + '&grant_type=authorization_code'
30
+ begin
31
+ page = open(url)
32
+ data = JSON.parse(page.read)
33
+ @access_token = data['access_token']
34
+ @refresh_token = data['refresh_token']
35
+ rescue Exception=>e
36
+ refresh
37
+ end
38
+ end
39
+
40
+ def refresh
41
+ url = OAUTH_PATH + 'token?client_id=' + @key + '&client_secret=' + @secret + '&refresh_token=' + @refresh_token + '&grant_type=refresh_token'
42
+ begin
43
+ page = open(url)
44
+ data = JSON.parse(page.read)
45
+ @access_token = data['access_token']
46
+ @refresh_token = data['refresh_token']
47
+ rescue Exception=>e
48
+ raise 'Trying refresh token but fail. Is refresh_token expired?'
49
+ end
50
+ end
51
+
52
+ def fetch resource
53
+ url = API_PATH + resource + '?access_token=' + @access_token
54
+ #require 'pp'; pp url;
55
+ begin
56
+ page = open(url)
57
+ data = JSON.parse(page.read)
58
+ return data
59
+ rescue
60
+ raise 'Trying fetch resource "'+resource+'" but fail.'
61
+ end
62
+ end
63
+
64
+ def post resource, options={}, filepath=nil
65
+ url = API_PATH + resource + '?access_token=' + @access_token
66
+ url = url + '&' + options.map{ |k,v| "#{k}="+URI::encode(v) }.join('&') if options
67
+ begin
68
+ response = RestClient.post url, filepath ? { :file => File.new(filepath, 'rb') } : nil
69
+ return JSON.parse(response.to_str)
70
+ rescue Exception=>e
71
+ pp e
72
+ raise 'Trying post data but fail'
73
+ end
74
+ end
75
+
76
+
77
+ def placebo
78
+ begin
79
+ fetch 'placebo'
80
+ rescue
81
+ refresh
82
+ end
83
+ end
84
+
85
+ def whoami
86
+ fetch 'user/whoami'
87
+ end
88
+
89
+ def damntoken
90
+ data = fetch 'user/damntoken'
91
+ return data['damntoken']
92
+ end
93
+
94
+ def stash_space
95
+ data = post 'stash/space'
96
+ return data['available_space']
97
+ end
98
+
99
+ def submit params
100
+ option_keys = [:title, :artist_comments, :keywords, :stashid, :folder, :folderid]
101
+ options = { }
102
+ option_keys.each do |key|
103
+ options[key] = params[key] if params[key]
104
+ end
105
+ data = post 'stash/submit', options, params[:file]
106
+ data['link'] = 'http://sta.sh/0'+data['stashid'].to_i.to_s(36)
107
+ return data
108
+ end
109
+
110
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: deviantart-oauth2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 71
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ - 4
11
+ version: 0.1.2.4
12
+ platform: ruby
13
+ authors:
14
+ - Tauraloke
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2012-06-29 00:00:00 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: json
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rest-client
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description: This gem contains class DeviantClient which helps use some Deviantart OAuth 2.0 API (load file to sta.sh, take user whois etc)
50
+ email:
51
+ - tauraloke@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files: []
57
+
58
+ files:
59
+ - lib/deviantart.rb
60
+ homepage: http://github.com/tauraloke/deviantart
61
+ licenses: []
62
+
63
+ post_install_message:
64
+ rdoc_options: []
65
+
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ requirements: []
87
+
88
+ rubyforge_project:
89
+ rubygems_version: 1.8.15
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Unofficial wrapper for Deviantart OAuth 2.0 API
93
+ test_files: []
94
+