deviantart-oauth2 0.1.2.4

Sign up to get free protection for your applications and to get access to all the features.
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
+