figshare_api_v2 0.9.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.
- checksums.yaml +7 -0
- data/History.txt +58 -0
- data/Manifest.txt +18 -0
- data/README.md +74 -0
- data/Rakefile +31 -0
- data/lib/authors.rb +41 -0
- data/lib/base.rb +262 -0
- data/lib/figshare_api_v2.rb +121 -0
- data/lib/institutions.rb +238 -0
- data/lib/oai_pmh.rb +6 -0
- data/lib/other.rb +51 -0
- data/lib/private_articles.rb +354 -0
- data/lib/private_collections.rb +324 -0
- data/lib/private_projects.rb +308 -0
- data/lib/public_articles.rb +125 -0
- data/lib/public_collections.rb +105 -0
- data/lib/public_projects.rb +66 -0
- data/lib/stats.rb +16 -0
- data/lib/upload.rb +215 -0
- metadata +140 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
module Figshare
|
2
|
+
VERSION = '0.9.1'
|
3
|
+
|
4
|
+
require_relative 'base.rb'
|
5
|
+
require_relative 'authors.rb'
|
6
|
+
require_relative 'institutions.rb'
|
7
|
+
require_relative 'other.rb'
|
8
|
+
require_relative 'private_articles.rb'
|
9
|
+
require_relative 'private_collections.rb'
|
10
|
+
require_relative 'private_projects.rb'
|
11
|
+
require_relative 'public_articles.rb'
|
12
|
+
require_relative 'public_collections.rb'
|
13
|
+
require_relative 'public_projects.rb'
|
14
|
+
require_relative 'upload.rb'
|
15
|
+
require_relative 'stats.rb'
|
16
|
+
require_relative 'oai_pmh.rb'
|
17
|
+
|
18
|
+
# Hack :) to do a lazy initialization of the Figshare subclasses. i.e. only if they get called.
|
19
|
+
# Usage:
|
20
|
+
# @figshare = Figshare::Init.new(figshare_user: 'figshare_admin', conf_dir: "#{__dir__}/conf")
|
21
|
+
#
|
22
|
+
# @figshare.authors.detail(author_id: 12345) { |a| puts a }
|
23
|
+
# @figshare.institutions.private_articles { |article| puts article }
|
24
|
+
# ...
|
25
|
+
#
|
26
|
+
class Init
|
27
|
+
# Intitialize the Init class, so it can dynamically initialize the Figshare subclasses
|
28
|
+
#
|
29
|
+
# @param figshare_user [String] figshare user, in the figshare_keys.json
|
30
|
+
# @param conf_dir [String] directory for figshare_keys.json and figshare_site_params.json
|
31
|
+
def initialize(figshare_user:, conf_dir:)
|
32
|
+
@figshare_user = figshare_user
|
33
|
+
@conf_dir = conf_dir
|
34
|
+
end
|
35
|
+
|
36
|
+
# Create Figshare::Authors, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
37
|
+
#
|
38
|
+
# @return [Figshare::Authors]
|
39
|
+
def authors
|
40
|
+
@authors ||= Authors.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create Figshare::Institutions, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
44
|
+
#
|
45
|
+
# @return [Figshare::Institutions]
|
46
|
+
def institutions
|
47
|
+
@institutions ||= Institutions.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Create Figshare::Other, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
51
|
+
#
|
52
|
+
# @return [Figshare::Other]
|
53
|
+
def other
|
54
|
+
@other ||= Other.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Create Figshare::PrivateArticles, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
58
|
+
#
|
59
|
+
# @return [Figshare::PrivateArticles]
|
60
|
+
def private_articles
|
61
|
+
@private_articles ||= PrivateArticles.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Create Figshare::PrivateCollections, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
65
|
+
#
|
66
|
+
# @return [Figshare::PrivateCollections]
|
67
|
+
def private_collections
|
68
|
+
@private_collections ||= PrivateCollections.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Create Figshare::PrivateProjects, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
72
|
+
#
|
73
|
+
# @return [Figshare::PrivateProjects]
|
74
|
+
def private_projects
|
75
|
+
@private_projects ||= PrivateProjects.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Create Figshare::PublicArticles, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
79
|
+
#
|
80
|
+
# @return [Figshare::PublicArticles]
|
81
|
+
def public_articles
|
82
|
+
@public_articles ||= PublicArticles.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Create Figshare::PublicCollections, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
86
|
+
#
|
87
|
+
# @return [Figshare::PublicCollections]
|
88
|
+
def public_collections
|
89
|
+
@public_collections ||= PublicCollections.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Create Figshare::PublicProjects, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
93
|
+
#
|
94
|
+
# @return [Figshare::PublicProjects]
|
95
|
+
def public_projects
|
96
|
+
@public_projects ||= PublicProjects.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Create Figshare::Upload, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
100
|
+
#
|
101
|
+
# @return [Figshare::Upload]
|
102
|
+
def upload
|
103
|
+
@upload ||= Upload.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Create Figshare::Stats, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
107
|
+
#
|
108
|
+
# @return [Figshare::Stats]
|
109
|
+
def stats
|
110
|
+
@stats ||= Stats.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Create Figshare::OAI_PMH, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
114
|
+
#
|
115
|
+
# @return [Figshare::OAI_PMH]
|
116
|
+
def oai_pmh
|
117
|
+
@oai_pmh ||= OAI_PMH.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end # module
|
data/lib/institutions.rb
ADDED
@@ -0,0 +1,238 @@
|
|
1
|
+
module Figshare
|
2
|
+
|
3
|
+
# Figshare Institutions API
|
4
|
+
#
|
5
|
+
class Institutions < Base
|
6
|
+
|
7
|
+
# Upload hr file
|
8
|
+
#
|
9
|
+
# @param hr_xml [String] See https://docs.figshare.com/#hr_feed_hr_feed_private_endpoint
|
10
|
+
# @yield [Hash] { message:, data: null, errcode:}
|
11
|
+
def hr_upload(hr_xml:, &block)
|
12
|
+
put(api_query: "institution/hrfeed/upload", data: hr_xml, content_type: 'multipart/form-data' &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Get the institional account details
|
16
|
+
#
|
17
|
+
# @yield [Hash]
|
18
|
+
def account(&block)
|
19
|
+
get(api_query: "account/institution", &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Requests a list of private institute articles
|
23
|
+
#
|
24
|
+
# @param status [Integer] Only return items with this status
|
25
|
+
# @param published_since [Time] Return results if published after this time
|
26
|
+
# @param modified_since [Time] Return results if modified after this time
|
27
|
+
# @param resource_doi [String] Matches this resource doi
|
28
|
+
# @param item_type [String] Matches this item_type. See Figshare API docs for list (https://docs.figshare.com/#articles_list)
|
29
|
+
# @param order [String] "published_date" Default, "modified_date", "views", "cites", "shares"
|
30
|
+
# @param order_direction [String] "desc" Default, "asc"
|
31
|
+
# @yield [Hash] {id, title, doi, handle, group_id, url, url_public_html, url_public_api, url_private_htm,
|
32
|
+
# url_private_api, published_date, timeline {...}, thumb, defined_type, defined_name }
|
33
|
+
def private_articles(status: nil,
|
34
|
+
published_since: nil, modified_since: nil,
|
35
|
+
item_type: nil, resource_doi: nil,
|
36
|
+
order: 'published_date', order_direction: 'desc',
|
37
|
+
&block
|
38
|
+
)
|
39
|
+
args = {}
|
40
|
+
args['status'] = status if ! status.nil?
|
41
|
+
args['item_type'] = item_type if ! item_type.nil?
|
42
|
+
args['resource_doi'] = resource_doi if ! resource_doi.nil?
|
43
|
+
args['published_since'] = published_since if ! published_since.nil?
|
44
|
+
args['modified_since'] = modified_since if ! modified_since.nil?
|
45
|
+
args['order'] = order if ! order.nil?
|
46
|
+
args['order_direction'] = order_direction if ! order_direction.nil?
|
47
|
+
get_paginate(api_query: 'account/institution/articles', args: args, &block)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Requests an institute file
|
51
|
+
#
|
52
|
+
# @param resource_id [Integer] Figshare resource_id (publisher ID?)
|
53
|
+
# @param filename [String] Figshare file name
|
54
|
+
# @yield [Hash] {id, title, doi, handle, group_id, url, url_public_html, url_public_api, url_private_htm,
|
55
|
+
# url_private_api, published_date, timeline {...}, thumb, defined_type, defined_name }
|
56
|
+
def articles_filter_by(resource_id: nil, filename: nil, &block )
|
57
|
+
args = {}
|
58
|
+
args['resource_id'] = resource_id if ! resource_id.nil?
|
59
|
+
args['filename'] = filename if ! filename.nil?
|
60
|
+
get(api_query: "institutions/{@institute_id}/articles/filter-by", args: args, &block)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Get institution categories (including parent Categories)
|
64
|
+
#
|
65
|
+
# @yield [Hash] { parent_id, id, title }
|
66
|
+
def categories(&block)
|
67
|
+
get(api_query: "account/categories", &block)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Get the groups for which the account has administrative privileges (assigned and inherited).
|
71
|
+
#
|
72
|
+
# @yield [Hash] { id, name, resource_id, parent_id, association_criteria }
|
73
|
+
def groups(&block)
|
74
|
+
get(api_query: "account/groups", &block)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Get the roles available for groups and the institution group.
|
78
|
+
#
|
79
|
+
# @yield [Hash] { id, name, category, description }
|
80
|
+
def roles(&block)
|
81
|
+
get(api_query: "account/roles", &block)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Get the accounts for which the account has administrative privileges (assigned and inherited).
|
85
|
+
#
|
86
|
+
# @param is_active [Boolean] user account is active
|
87
|
+
# @param institution_user_id [String] As set in the HR upload
|
88
|
+
# @param email [String] as set in the HR upload
|
89
|
+
# @yield [Hash] { id, first_name, last_name, institution_id, email, active, institution_user_id }
|
90
|
+
def accounts(is_active: nil, institution_user_id: nil, email: nil, &block)
|
91
|
+
args = {}
|
92
|
+
args['is_active'] = is_active if ! is_active.nil?
|
93
|
+
args['institution_user_id'] = institution_user_id if ! institution_user_id.nil?
|
94
|
+
args['email'] = email if ! email.nil?
|
95
|
+
get_paginate(api_query: "account/institution/accounts", args: args, &block)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Create new Institution Account
|
99
|
+
#
|
100
|
+
# @param email [String]
|
101
|
+
# @param first_name [String]
|
102
|
+
# @param last_name [String]
|
103
|
+
# @param group_id [Integer] Figshare group ID
|
104
|
+
# @param institution_user_id [string]
|
105
|
+
# @param symplectic_user_id [string]
|
106
|
+
# @param quota [Integer] Figshare user quota
|
107
|
+
# @param is_active [Boolean]
|
108
|
+
def account_create(email:, first_name:, last_name:, group_id:, institution_user_id: nil, symplectic_user_id: nil, quota: nil, is_active: true, &block)
|
109
|
+
args = {}
|
110
|
+
args['email'] = email if ! email.nil?
|
111
|
+
args['first_name'] = first_name if ! first_name.nil?
|
112
|
+
args['last_name'] = last_name if ! last_name.nil?
|
113
|
+
args['group_id'] = group_id if ! group_id.nil?
|
114
|
+
args['institution_user_id'] = institution_user_id if ! institution_user_id.nil?
|
115
|
+
args['symplectic_user_id'] = symplectic_user_id if ! symplectic_user_id.nil?
|
116
|
+
args['quota'] = quota if ! quota.nil?
|
117
|
+
args['is_active'] = is_active if ! is_active.nil?
|
118
|
+
post(api_query: "account/institution/accounts/#{account_id}", args: args, &block)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Update Institution Account
|
122
|
+
#
|
123
|
+
# @param email [String]
|
124
|
+
# @param first_name [String]
|
125
|
+
# @param last_name [String]
|
126
|
+
# @param group_id [Integer] Figshare group ID
|
127
|
+
# @param institution_user_id [string]
|
128
|
+
# @param symplectic_user_id [string]
|
129
|
+
# @param quota [Integer] Figshare user quota
|
130
|
+
# @param is_active [Boolean]
|
131
|
+
def account_update(email:, first_name:, last_name:, group_id:, institution_user_id: nil, symplectic_user_id: nil, quota: nil, is_active: true, &block)
|
132
|
+
args = {}
|
133
|
+
args['email'] = email if ! email.nil?
|
134
|
+
args['first_name'] = first_name if ! first_name.nil?
|
135
|
+
args['last_name'] = last_name if ! last_name.nil?
|
136
|
+
args['group_id'] = group_id if ! group_id.nil?
|
137
|
+
args['institution_user_id'] = institution_user_id if ! institution_user_id.nil?
|
138
|
+
args['symplectic_user_id'] = symplectic_user_id if ! symplectic_user_id.nil?
|
139
|
+
args['quota'] = quota if ! quota.nil?
|
140
|
+
args['is_active'] = is_active if ! is_active.nil?
|
141
|
+
put(api_query: "account/institution/accounts/#{account_id}", args: args, &block)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Get institution Account Group Roles
|
145
|
+
#
|
146
|
+
# @param account_id [Integer] Figshare user account id
|
147
|
+
# @yield [Hash] { role_id [ { category, id, name }, ... ], ... }
|
148
|
+
def group_roles(account_id:, &block)
|
149
|
+
get(api_query: "account/institution/roles/{account_id}", &block)
|
150
|
+
end
|
151
|
+
|
152
|
+
# Add Institution Account Group Roles
|
153
|
+
#
|
154
|
+
# @param account_id [Integer] Figshare user account id
|
155
|
+
# @param body [Hash] see figshare api docs
|
156
|
+
def group_roles_add(account_id:, body:, &block)
|
157
|
+
post(api_query: "account/institution/roles/{account_id}", args: body, &block)
|
158
|
+
end
|
159
|
+
|
160
|
+
# Delete Institution Account Group Role
|
161
|
+
#
|
162
|
+
# @param account_id [Integer] Figshare user account id
|
163
|
+
# @param role_id [Integer] Figshare role id
|
164
|
+
# @param group_id [Integer] Figshare group id
|
165
|
+
def group_role_delete( role_id, group_id, account_id:, &block)
|
166
|
+
args = {}
|
167
|
+
args['account_id'] = account_id if ! account_id.nil?
|
168
|
+
args['role_id'] = role_id if ! role_id.nil?
|
169
|
+
args['group_id'] = group_id if ! group_id.nil?
|
170
|
+
delete(api_query: "account/institution/roles/{account_id}", args: args, &block)
|
171
|
+
end
|
172
|
+
|
173
|
+
# Get the accounts for which the account has administrative privileges (assigned and inherited).
|
174
|
+
#
|
175
|
+
# @param is_active [Boolean] user account is active
|
176
|
+
# @param institution_user_id [String] As set in the HR upload
|
177
|
+
# @param email [String] as set in the HR upload
|
178
|
+
# @yield [Hash] {id, first_name, last_name, institution_id, email, active, institution_user_id}
|
179
|
+
def account_search(search_for:, is_active: nil, institution_user_id: nil, email: nil, &block)
|
180
|
+
args = {}
|
181
|
+
args['search_for'] = search_for
|
182
|
+
args['is_active'] = is_active if ! is_active.nil?
|
183
|
+
args['institution_user_id'] = institution_user_id if ! institution_user_id.nil?
|
184
|
+
args['email'] = email if ! email.nil?
|
185
|
+
post(api_query: "account/institution/accounts/search", args: args, &block)
|
186
|
+
end
|
187
|
+
|
188
|
+
# Get institution user information using the account_id
|
189
|
+
#
|
190
|
+
# @param account_id [Integer] Figshare user account id
|
191
|
+
# @yield [Hash] { id, first_name, last_name, name, is_active, url_name, is_public, job_title, orcid_id }
|
192
|
+
def user(account_id:, &block)
|
193
|
+
get(api_query: "account/institution/users/#{account_id}", &block)
|
194
|
+
end
|
195
|
+
|
196
|
+
# Get a list of curation reviews for this institution
|
197
|
+
#
|
198
|
+
# @param group_id [Integer] Figshare group ID
|
199
|
+
# @param article_id [Integer] Figshare article ID
|
200
|
+
# @param status [String] pending, approved, rejected, closed
|
201
|
+
# @yield [Hash] {id, group_id, account_id, assigned_to, article_id, version, comment_count, status, created_date. modified_date }
|
202
|
+
def curation_review(group_id: nil, article_id: nil, status: nil, &block)
|
203
|
+
args = {}
|
204
|
+
args['group_id'] = group_id if ! group_id.nil?
|
205
|
+
args['article_id'] = article_id if ! article_id.nil?
|
206
|
+
args['status'] = status if ! status.nil?
|
207
|
+
#Odd one, as has offset,limit not page,page_size
|
208
|
+
get_paginate(api_query: "account/institution/reviews", args: args, by_offset: true, &block)
|
209
|
+
end
|
210
|
+
|
211
|
+
# Get a curation review record
|
212
|
+
#
|
213
|
+
# @param curation_id [Integer] Figshare curation ID
|
214
|
+
# @yield [Hash] see Figshare API docs for response sample
|
215
|
+
def curation_detail(curation_id: , &block)
|
216
|
+
get(api_query: "account/institution/review/#{curation_id}", &block)
|
217
|
+
end
|
218
|
+
|
219
|
+
# Get a certain curation review's comments.
|
220
|
+
#
|
221
|
+
# @param curation_id [Integer] Figshare curation ID
|
222
|
+
# @yield [Hash] { id, account_id, type, text}
|
223
|
+
def curation_comments(curation_id: , &block)
|
224
|
+
#Odd one, as has offset,limit not page,page_size.
|
225
|
+
get_paginate(api_query: "account/institution/reviews/#{curation_id}/comments", by_offset: true, &block)
|
226
|
+
end
|
227
|
+
|
228
|
+
# Add a new comment to the review.
|
229
|
+
#
|
230
|
+
# @param curation_id [Integer] Figshare curation ID
|
231
|
+
# @param comment [String] Comment text
|
232
|
+
def curation_comments(curation_id: , &block)
|
233
|
+
#Odd one, as has offset,limit not page,page_size.
|
234
|
+
post(api_query: "account/institution/reviews/#{curation_id}/comments", args: { "text" => comment }, &block)
|
235
|
+
end
|
236
|
+
|
237
|
+
end #of class
|
238
|
+
end #of module
|
data/lib/oai_pmh.rb
ADDED
data/lib/other.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Figshare
|
2
|
+
|
3
|
+
# Misc Figshare API calls that they have classified as Other.
|
4
|
+
#
|
5
|
+
class Other < Base
|
6
|
+
|
7
|
+
# Search from funding records
|
8
|
+
#
|
9
|
+
# @param search_for [String] string to search for
|
10
|
+
# @yield [Hash] {id, title, grant_code, funder_name, is_user_defined, url}
|
11
|
+
def search_funding(search_for:, &block)
|
12
|
+
post(api_query: "account/funding/search", args: { "search_for" => search_for }, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Get Account information for current user
|
16
|
+
#
|
17
|
+
# @yield [Hash] {id, first_name, ...} see figshare API docs
|
18
|
+
def private_account_info
|
19
|
+
get(api_query: "account", &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get public categories
|
23
|
+
#
|
24
|
+
# @yield [Hash] {parent_id, id, title}
|
25
|
+
def public_categories
|
26
|
+
get(api_query: "categories", &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Get public licenses
|
30
|
+
#
|
31
|
+
# @yield [Hash] {value, name, url}
|
32
|
+
def public_licenses
|
33
|
+
get(api_query: "licenses", &block)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get private licenses
|
37
|
+
#
|
38
|
+
# @yield [Hash] {value, name, url}
|
39
|
+
def private_account_licenses
|
40
|
+
get(api_query: "account/licenses", &block)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Download a file
|
44
|
+
#
|
45
|
+
# @param file_id [Integer] Figshare file id
|
46
|
+
# @yield [Data] Binary data
|
47
|
+
def public_file_download(file_id:, &block)
|
48
|
+
get(api_query: "file/download/#{file_id}", &block)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,354 @@
|
|
1
|
+
module Figshare
|
2
|
+
|
3
|
+
# Figshare private articles API
|
4
|
+
#
|
5
|
+
class PrivateArticles < Base
|
6
|
+
|
7
|
+
# Get Own Articles (or private articles of others if institute is true)
|
8
|
+
#
|
9
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
10
|
+
# @yield [Hash] {id, title, doi, handle, url, published_date}
|
11
|
+
def list(impersonate: nil, &block)
|
12
|
+
args = {}
|
13
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
14
|
+
get_paginate(api_query: 'account/articles', args: args, &block)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Search within the private articles (our own, or the institutes)
|
18
|
+
#
|
19
|
+
# @param institution [Boolean] Just our institution
|
20
|
+
# @param group_id [Integer] Only return this group's collections
|
21
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
22
|
+
# @param published_since [Time] Return results if published after this time
|
23
|
+
# @param modified_since [Time] Return results if modified after this time
|
24
|
+
# @param resource_doi [String] Matches this resource doi
|
25
|
+
# @param item_type [String] Matches this item_type. See Figshare API docs for list (https://docs.figshare.com/#articles_list)
|
26
|
+
# @param doi [String] Matches this doi
|
27
|
+
# @param handle [String] Matches this handle
|
28
|
+
# @param order [String] "published_date" Default, "modified_date", "views", "cites", "shares"
|
29
|
+
# @param order_direction [String] "desc" Default, "asc"
|
30
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
31
|
+
# @yield [Hash] {id, title, doi, handle, url, published_date}
|
32
|
+
def search(institute: false, group_id: nil, impersonate: nil,
|
33
|
+
published_since: nil, modified_since: nil,
|
34
|
+
item_type: nil, resource_doi: nil, doi: nil, handle: nil,
|
35
|
+
order: 'published_date', order_direction: 'desc',
|
36
|
+
search_for:,
|
37
|
+
&block
|
38
|
+
)
|
39
|
+
args = { 'search_for' => search_for }
|
40
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
41
|
+
args['institution'] = @institute_id if ! institute.nil?
|
42
|
+
args['group_id'] = group_id if ! group_id.nil?
|
43
|
+
args['item_type'] = item_type if ! item_type.nil?
|
44
|
+
args['resource_doi'] = resource_doi if ! resource_doi.nil?
|
45
|
+
args['doi'] = doi if ! doi.nil?
|
46
|
+
args['handle'] = handle if ! handle.nil?
|
47
|
+
args['published_since'] = published_since if ! published_since.nil?
|
48
|
+
args['modified_since'] = modified_since if ! modified_since.nil?
|
49
|
+
args['order'] = order if ! order.nil?
|
50
|
+
args['order_direction'] = order_direction if ! order_direction.nil?
|
51
|
+
post(api_query: 'account/articles/search', args: args, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Create a new Article by sending article information
|
55
|
+
#
|
56
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
57
|
+
# @yield [Hash] { location }
|
58
|
+
def create(impersonate: nil, &block)
|
59
|
+
args = {}
|
60
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
61
|
+
post(api_query: "account/articles/#{article_id}", args: args, &block)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Delete an article (WARNING!!!!!)
|
65
|
+
#
|
66
|
+
# @param article_id [Integer] Figshare id of the article
|
67
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
68
|
+
def article_delete(article_id:, impersonate: nil, &block)
|
69
|
+
args = {}
|
70
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
71
|
+
delete(api_query: "account/articles/#{article_id}", args: args, &block)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Get a private article's details
|
75
|
+
#
|
76
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
77
|
+
# @param article_id [Integer] Figshare id of the article
|
78
|
+
def detail(article_id:, impersonate: nil, &block)
|
79
|
+
args = {}
|
80
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
81
|
+
get(api_query: "account/articles/#{article_id}", args: args, &block)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Updating an article by passing body parameters
|
85
|
+
#
|
86
|
+
# @param article_id [Integer] Figshare id of the article
|
87
|
+
# @param body [Hash] See API docs.
|
88
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
89
|
+
def update(article_id:, body:, impersonate: nil, &block)
|
90
|
+
args = {}
|
91
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
92
|
+
put(api_query: "account/articles/#{article_id}", args: args, data: body, &block)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Will lift the embargo for the specified article
|
96
|
+
#
|
97
|
+
# @param article_id [Integer] Figshare id of the article
|
98
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
99
|
+
def embargo_delete(article_id:, impersonate: nil, &block)
|
100
|
+
args = {}
|
101
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
102
|
+
delete(api_query: "account/articles/#{article_id}/embargo", args: args, &block)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Get a private article embargo details
|
106
|
+
#
|
107
|
+
# @param article_id [Integer] Figshare id of the article
|
108
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
109
|
+
# @yield [Hash] {is_embargoed, embargo_date, embargo_reason}
|
110
|
+
def embargo_detail(article_id:, impersonate: nil, &block)
|
111
|
+
args = {}
|
112
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
113
|
+
get(api_query: "account/articles/#{article_id}/embargo", args: args, &block)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Updates an article embargo status.
|
117
|
+
# Does not imply that the article will be published when the embargo will expire.
|
118
|
+
# You must explicitly call the publish endpoint to enable this functionality.
|
119
|
+
#
|
120
|
+
# @param article_id [Integer] Figshare id of the article
|
121
|
+
# @param is_embargoed [Boolean]
|
122
|
+
# @param embargo_data [Time] Still needs to be published, after this date
|
123
|
+
# @param embargo_type [Integer]
|
124
|
+
# @param embargo_reason [String]
|
125
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
126
|
+
def embargo_update(article_id:, is_embargoed: true, embargo_date: , embargo_type: 'file', embargo_reason:, impersonate: nil, &block)
|
127
|
+
args = {}
|
128
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
129
|
+
embargo_record = {"is_embargoed" => is_embargoed,
|
130
|
+
"embargo_date" => embargo_date.strftime("%Y-%m-%dT%H:%M:%S"),
|
131
|
+
"embargo_type" => embargo_type,
|
132
|
+
"embargo_reason" => embargo_reason
|
133
|
+
}
|
134
|
+
put(api_query: "account/articles/#{article_id}/embargo", args: args, data: embargo_record, &block)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Publish an article
|
138
|
+
# If the whole article is under embargo, it will not be published immediately, but when the embargo expires or is lifted.
|
139
|
+
# When an article is published, a new public version will be generated.
|
140
|
+
# Any further updates to the article will affect the private article data.
|
141
|
+
# In order to make these changes publicly visible, an explicit publish operation is needed.
|
142
|
+
#
|
143
|
+
# @param article_id [Integer] Figshare id of the article
|
144
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
145
|
+
def publish(article_id:, impersonate: nil, &block)
|
146
|
+
args = {}
|
147
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
148
|
+
post(api_query: "account/articles/#{article_id}/publish", args: args, &block)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Reserve DOI for article
|
152
|
+
#
|
153
|
+
# @param article_id [Integer] Figshare id of the article
|
154
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
155
|
+
def reserve_doi(article_id:, impersonate: nil, &block)
|
156
|
+
args = {}
|
157
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
158
|
+
post(api_query: "account/articles/#{article_id}/reserve_doi", args: args, &block)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Reserve Handle for article
|
162
|
+
#
|
163
|
+
# @param article_id [Integer] Figshare id of the article
|
164
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
165
|
+
def reserve_handle(article_id:, impersonate: nil, &block)
|
166
|
+
args = {}
|
167
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
168
|
+
post(api_query: "account/articles/#{article_id}/reserve_handle", args: args, &block)
|
169
|
+
end
|
170
|
+
|
171
|
+
# Yield articles authors
|
172
|
+
#
|
173
|
+
# @param article_id [Integer] Figshare id of the article
|
174
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
175
|
+
# @yield [Hash] {id, full_name, is_active, url_name, orcid_id}
|
176
|
+
def authors(article_id, impersonate: nil, &block)
|
177
|
+
args = {}
|
178
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
179
|
+
get(api_query: "account/articles/#{article_id}/authors", args: args, &block)
|
180
|
+
end
|
181
|
+
|
182
|
+
# Associate new authors with the article. This will add new authors to the list of already associated authors
|
183
|
+
#
|
184
|
+
# @param article_id [Integer] Figshare id of the article
|
185
|
+
# @param authors [Array] Can be a mix of { id } and/or { name }
|
186
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
187
|
+
def authors_add(article_id:, authors:, impersonate: nil, &block)
|
188
|
+
args = {}
|
189
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
190
|
+
post(api_query: "account/articles/#{article_id}/authors", args: args, data: {"authors" => authors}, &block)
|
191
|
+
end
|
192
|
+
|
193
|
+
# Replace existing authors list with a new list
|
194
|
+
#
|
195
|
+
# @param article_id [Integer] Figshare id of the article
|
196
|
+
# @param authors [Array] Can be a mix of { id } and/or { name }
|
197
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
198
|
+
def authors_replace(article_id:, authors:, impersonate: nil, &block)
|
199
|
+
args = {}
|
200
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
201
|
+
put(api_query: "account/articles/#{article_id}/authors", args: args, data: {"authors" => authors}, &block)
|
202
|
+
end
|
203
|
+
|
204
|
+
# Remove author from the article
|
205
|
+
#
|
206
|
+
# @param article_id [Integer] Figshare id of the article
|
207
|
+
# @param author_id [Integer] Figshare id for the author
|
208
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
209
|
+
def author_delete(article_id:, author_id:, impersonate: nil, &block)
|
210
|
+
args = {}
|
211
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
212
|
+
delete(api_query: "account/articles/#{article_id}/authors/#{author_id}", args: args, &block)
|
213
|
+
end
|
214
|
+
|
215
|
+
# List categories for a specific article
|
216
|
+
#
|
217
|
+
# @param article_id [Integer] Figshare id of the article
|
218
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
219
|
+
# yield [Hash] { parent_id, id, title }
|
220
|
+
def categories(article_id:, impersonate: nil, &block)
|
221
|
+
args = {}
|
222
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
223
|
+
get(api_query: "account/articles/#{article_id}/categories", args: args, &block)
|
224
|
+
end
|
225
|
+
|
226
|
+
# Associate new categories with the article.
|
227
|
+
# This will add new categories to the list of already associated categories
|
228
|
+
#
|
229
|
+
# @param article_id [Integer] Figshare id of the article
|
230
|
+
# @param categories [Array] [ categorie_id, ... ]
|
231
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
232
|
+
def categories_add(article_id:, categories:, impersonate: nil, &block)
|
233
|
+
args = {}
|
234
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
235
|
+
post(api_query: "account/articles/#{article_id}/categories", args: args, data: { 'categories' => categories }, &block)
|
236
|
+
end
|
237
|
+
|
238
|
+
# Associate new categories with the article. This will remove all already associated categories and add these new ones
|
239
|
+
#
|
240
|
+
# @param article_id [Integer] Figshare id of the article
|
241
|
+
# @param categories [Array] [ categorie_id, ... ]
|
242
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
243
|
+
def categories_replace(article_id:, categories:, impersonate: nil, &block)
|
244
|
+
args = {}
|
245
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
246
|
+
put(api_query: "account/articles/#{article_id}/categories", args: args, data: { 'categories' => categories }, &block)
|
247
|
+
end
|
248
|
+
|
249
|
+
# Delete category from article's categories
|
250
|
+
#
|
251
|
+
# @param article_id [Integer] Figshare id of the article
|
252
|
+
# @param category_id [Integer] Figshare id of the category
|
253
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
254
|
+
def categories_delete(article_id:, category_id:, impersonate: nil, &block)
|
255
|
+
args = {}
|
256
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
257
|
+
delete(api_query: "account/articles/#{article_id}/categories/#{category_id}", args: args, &block)
|
258
|
+
end
|
259
|
+
|
260
|
+
# List private links
|
261
|
+
#
|
262
|
+
# @param article_id [Integer] Figshare id of the article
|
263
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
264
|
+
# @yield [Hash] {id, is_active, expires_date}
|
265
|
+
def links(article_id:, impersonate: nil, &block)
|
266
|
+
args = {}
|
267
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
268
|
+
get(api_query: "account/articles/#{article_id}/private_links", args: args, &block)
|
269
|
+
end
|
270
|
+
|
271
|
+
# Create new private link for this article
|
272
|
+
#
|
273
|
+
# @param article_id [Integer] Figshare id of the article
|
274
|
+
# @param private_link [Hash] { expires_date }
|
275
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
276
|
+
# @yield [Hash] { location }
|
277
|
+
def link_create(article_id:, private_link:, impersonate: nil, &block)
|
278
|
+
args = {}
|
279
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
280
|
+
post(api_query: "account/articles/#{article_id}/private_links", data: private_link, args: args, &block)
|
281
|
+
end
|
282
|
+
|
283
|
+
# Disable/delete private link for this article
|
284
|
+
#
|
285
|
+
# @param article_id [Integer] Figshare id of the article
|
286
|
+
# @param link_id [Integer]
|
287
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
288
|
+
def link_delete(article_id:, link:, impersonate: nil, &block)
|
289
|
+
args = {}
|
290
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
291
|
+
delete(api_query: "account/articles/#{article_id}/private_links/#{link_id}", args: args, &block)
|
292
|
+
end
|
293
|
+
|
294
|
+
# Update private link for this article
|
295
|
+
#
|
296
|
+
# @param article_id [Integer] Figshare id of the article
|
297
|
+
# @param expires_date [Time]
|
298
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
299
|
+
def link_update(article_id:, link_id:, expires_date:, impersonate: nil, &block)
|
300
|
+
args = {}
|
301
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
302
|
+
put(api_query: "account/articles/#{article_id}/private_links/#{link_id}", args: args, data: { "expires_date" => expires_date.iso8601 }, &block)
|
303
|
+
end
|
304
|
+
|
305
|
+
# List private files in an article
|
306
|
+
#
|
307
|
+
# @param article_id [Integer] Figshare id of the article
|
308
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
309
|
+
# @yield [Hash] {status, viewer_type, preview_state, upload_url, upload_token, id, name, size, is_link_only,
|
310
|
+
# download_url, supplied_md5, computed_md5}
|
311
|
+
def files(article_id:, impersonate: nil, &block)
|
312
|
+
args = {}
|
313
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
314
|
+
get(api_query: "account/articles/#{article_id}/files", args: args, &block)
|
315
|
+
end
|
316
|
+
|
317
|
+
# Single file detail
|
318
|
+
#
|
319
|
+
# @param article_id [Integer] Figshare id of the article
|
320
|
+
# @param file_id [Integer] Figshare id of the file
|
321
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
322
|
+
# @yield [Hash] {status, viewer_type, preview_state, upload_url, upload_token, id, name, size, is_link_only,
|
323
|
+
# download_url, supplied_md5, computed_md5}
|
324
|
+
def file_detail(article_id:, file_id:, impersonate: nil, &block)
|
325
|
+
args = {}
|
326
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
327
|
+
get(api_query: "account/articles/#{article_id}/files/#{file_id}", args: args, &block)
|
328
|
+
end
|
329
|
+
|
330
|
+
# Delete a file from an article
|
331
|
+
#
|
332
|
+
# @param article_id [Integer] Figshare id of the article
|
333
|
+
# @param file_id [Integer] Figshare id of the file
|
334
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
335
|
+
def file_delete(article_id:, file_id: , impersonate: nil, &block)
|
336
|
+
args = {}
|
337
|
+
args["impersonate"] = impersonate if ! impersonate.nil?
|
338
|
+
delete( api_query: "account/articles/#{article_id}/files/#{file_id}", args: args, &block )
|
339
|
+
end
|
340
|
+
|
341
|
+
# WARNING!!!! Delete every file in an article
|
342
|
+
#
|
343
|
+
# @param article_id [Integer] Figshare id of the article
|
344
|
+
# @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
|
345
|
+
# @yield [Hash] Figshare file record of each file being deleted (if block_given?)
|
346
|
+
def delete_all_files(article_id:, impersonate: nil)
|
347
|
+
article_files(article_id: article_id, impersonate: impersonate) do |f|
|
348
|
+
yield f if block_given?
|
349
|
+
article_file_delete(article_id: article_id, file_id: f['id'], impersonate: impersonate)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
end
|
354
|
+
end
|