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