bibsync 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bibsync.gemspec +2 -0
- data/lib/bibsync.rb +2 -0
- data/lib/bibsync/actions/check_arxiv_versions.rb +1 -1
- data/lib/bibsync/actions/determine_arxiv_doi.rb +1 -1
- data/lib/bibsync/actions/fetch_from_arxiv.rb +1 -1
- data/lib/bibsync/actions/synchronize_metadata.rb +4 -4
- data/lib/bibsync/utils.rb +20 -14
- data/lib/bibsync/version.rb +1 -1
- data/test/test_utils.rb +2 -2
- metadata +41 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 656b20418877066a48f7e30f3f702b47e71c7a5d
|
4
|
+
data.tar.gz: af9f5d4f088255dccc86bd12655a009830050ac3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 55e6153fa4ffa968cbf1f08dba256c2a0c3b427f6a84babc16d99e62bb519e2450335191dd6ce0c4bc8eac1a830d1ba27999215a517b35feb24f4eda2ed92cd5
|
7
|
+
data.tar.gz: 4f9a2308012649be07f5bf3c8549c1a9ae9a1c0410e8c1f33de47e7991dcd1f067e83ea3e96a5c67e518a7b67980ad358bfa24f641a9f6f12740bff76da35449
|
data/bibsync.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = %w(lib)
|
19
19
|
|
20
20
|
s.add_runtime_dependency('nokogiri')
|
21
|
+
s.add_runtime_dependency('faraday')
|
22
|
+
s.add_runtime_dependency('faraday_middleware')
|
21
23
|
s.add_development_dependency('rake')
|
22
24
|
s.add_development_dependency('minitest')
|
23
25
|
end
|
data/lib/bibsync.rb
CHANGED
@@ -16,7 +16,7 @@ module BibSync
|
|
16
16
|
notice 'Check for newer version on arXiv'
|
17
17
|
@bib.select {|e| e[:arxiv] }.each_slice(SliceSize) do |entry|
|
18
18
|
begin
|
19
|
-
xml = fetch_xml(
|
19
|
+
xml = fetch_xml('http://export.arxiv.org/api/query', id_list: entry.map{|e| arxiv_id(e, version: false, prefix: true) }.join(','), max_results: SliceSize)
|
20
20
|
xml.xpath('//entry/id').map(&:content).each_with_index do |id, i|
|
21
21
|
id.gsub!('http://arxiv.org/abs/', '')
|
22
22
|
if id != entry[i][:arxiv]
|
@@ -48,7 +48,7 @@ module BibSync
|
|
48
48
|
if !entry[:arxiv] && entry[:doi]
|
49
49
|
begin
|
50
50
|
info('Fetch missing arXiv identifier', key: entry)
|
51
|
-
xml = fetch_xml(
|
51
|
+
xml = fetch_xml('http://export.arxiv.org/api/query', search_query: "doi:#{entry[:doi]}", max_results: 1)
|
52
52
|
if xml.xpath('//entry/doi').map(&:content).first == entry[:doi]
|
53
53
|
id = xml.xpath('//entry/id').map(&:content).first
|
54
54
|
if id =~ %r{\Ahttp://arxiv.org/abs/(.+)\Z}
|
@@ -37,7 +37,7 @@ module BibSync
|
|
37
37
|
notice 'Downloading from arXiv'
|
38
38
|
arxivs.each_slice(SliceSize) do |ids|
|
39
39
|
begin
|
40
|
-
xml = fetch_xml(
|
40
|
+
xml = fetch_xml('http://export.arxiv.org/api/query', id_list: ids.join(','), max_results: SliceSize)
|
41
41
|
xml.xpath('//entry/id').map(&:content).each_with_index do |id, i|
|
42
42
|
id.gsub!('http://arxiv.org/abs/', '')
|
43
43
|
info 'arXiv download', key: id
|
@@ -12,7 +12,7 @@ module BibSync
|
|
12
12
|
def run
|
13
13
|
notice 'Synchronize with arXiv and DOI'
|
14
14
|
|
15
|
-
@bib.each do |entry|
|
15
|
+
@bib.to_a.each do |entry|
|
16
16
|
next if entry.comment?
|
17
17
|
|
18
18
|
if @force || !(entry[:title] && entry[:author] && entry[:year])
|
@@ -27,7 +27,7 @@ module BibSync
|
|
27
27
|
update_doi(entry) if entry[:doi]
|
28
28
|
end
|
29
29
|
|
30
|
-
if
|
30
|
+
if entry[:doi] =~ /\A10\.1103\// && (@force || !entry[:abstract])
|
31
31
|
update_aps_abstract(entry)
|
32
32
|
end
|
33
33
|
|
@@ -47,7 +47,7 @@ module BibSync
|
|
47
47
|
|
48
48
|
def update_doi(entry)
|
49
49
|
info('Downloading DOI metadata', key: entry)
|
50
|
-
text = fetch("http://dx.doi.org/#{entry[:doi]}", 'Accept' => 'text/bibliography; style=bibtex')
|
50
|
+
text = fetch("http://dx.doi.org/#{entry[:doi]}", nil, 'Accept' => 'text/bibliography; style=bibtex')
|
51
51
|
raise text if text == 'Unknown DOI'
|
52
52
|
Entry.parse(text).each {|k, v| entry[k] = v }
|
53
53
|
rescue => ex
|
@@ -96,7 +96,7 @@ module BibSync
|
|
96
96
|
|
97
97
|
def update_arxiv(entry)
|
98
98
|
info('Downloading arXiv metadata', key: entry)
|
99
|
-
xml = fetch_xml(
|
99
|
+
xml = fetch_xml('http://export.arxiv.org/oai2', verb: 'GetRecord', identifier: "oai:arXiv.org:#{arxiv_id(entry, prefix: true, version: false)}", metadataPrefix: 'arXiv')
|
100
100
|
error = xml.xpath('//error').map(&:content).first
|
101
101
|
raise error if error
|
102
102
|
|
data/lib/bibsync/utils.rb
CHANGED
@@ -5,29 +5,35 @@ module BibSync
|
|
5
5
|
$1
|
6
6
|
end
|
7
7
|
|
8
|
-
def fetch(url, headers =
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
def fetch(url, params = nil, headers = nil)
|
9
|
+
client = Faraday.new(url) do |c|
|
10
|
+
c.use FaradayMiddleware::FollowRedirects, limit: 3
|
11
|
+
c.use Faraday::Response::RaiseError
|
12
|
+
c.use Faraday::Adapter::NetHttp
|
13
|
+
end
|
14
|
+
response = client.get(url, params, headers)
|
15
|
+
raise "HTTP error #{response.status}" unless response.status == 200
|
16
|
+
body = response.body
|
17
|
+
encoding = body.encoding
|
18
|
+
body.force_encoding(Encoding::UTF_8)
|
19
|
+
body.force_encoding(encoding) unless body.valid_encoding?
|
20
|
+
body
|
14
21
|
end
|
15
22
|
|
16
23
|
def arxiv_download(dir, id)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
raise result.chomp if $? != 0
|
24
|
+
File.open(File.join(dir, "#{arxiv_id(id, version: true, prefix: false)}.pdf"), 'wb') do |o|
|
25
|
+
o.write(fetch("http://arxiv.org/pdf/#{id}"))
|
26
|
+
end
|
21
27
|
end
|
22
28
|
|
23
|
-
def fetch_xml(url, headers =
|
24
|
-
xml = Nokogiri::XML(fetch(url, headers))
|
29
|
+
def fetch_xml(url, params = nil, headers = nil)
|
30
|
+
xml = Nokogiri::XML(fetch(url, params, headers))
|
25
31
|
xml.remove_namespaces!
|
26
32
|
xml
|
27
33
|
end
|
28
34
|
|
29
|
-
def fetch_html(url, headers =
|
30
|
-
Nokogiri::HTML(fetch(url, headers))
|
35
|
+
def fetch_html(url, params = nil, headers = nil)
|
36
|
+
Nokogiri::HTML(fetch(url, params, headers))
|
31
37
|
end
|
32
38
|
|
33
39
|
def arxiv_id(arxiv, opts = {})
|
data/lib/bibsync/version.rb
CHANGED
data/test/test_utils.rb
CHANGED
@@ -15,7 +15,7 @@ describe BibSync::Utils do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'fetches page with header' do
|
18
|
-
fetch('http://dx.doi.org/10.1098/rspa.1984.0023', 'Accept' => 'text/bibliography; style=bibtex').include?('Berry').must_equal true
|
18
|
+
fetch('http://dx.doi.org/10.1098/rspa.1984.0023', nil, 'Accept' => 'text/bibliography; style=bibtex').include?('Berry').must_equal true
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -24,7 +24,7 @@ describe BibSync::Utils do
|
|
24
24
|
|
25
25
|
describe '#fetch_xml' do
|
26
26
|
it 'fetches xml' do
|
27
|
-
fetch_xml('http://export.arxiv.org/oai2
|
27
|
+
fetch_xml('http://export.arxiv.org/oai2', verb: 'GetRecord', identifier: 'oai:arXiv.org:1208.2881', metadataPrefix: 'arXiv').must_be_instance_of Nokogiri::XML::Document
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
metadata
CHANGED
@@ -1,62 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bibsync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Daniel Mendler
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-04
|
11
|
+
date: 2013-07-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: nokogiri
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday_middleware
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
28
53
|
- !ruby/object:Gem::Version
|
29
54
|
version: '0'
|
30
55
|
- !ruby/object:Gem::Dependency
|
31
56
|
name: rake
|
32
57
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
58
|
requirements:
|
35
|
-
- -
|
59
|
+
- - '>='
|
36
60
|
- !ruby/object:Gem::Version
|
37
61
|
version: '0'
|
38
62
|
type: :development
|
39
63
|
prerelease: false
|
40
64
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
65
|
requirements:
|
43
|
-
- -
|
66
|
+
- - '>='
|
44
67
|
- !ruby/object:Gem::Version
|
45
68
|
version: '0'
|
46
69
|
- !ruby/object:Gem::Dependency
|
47
70
|
name: minitest
|
48
71
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
72
|
requirements:
|
51
|
-
- -
|
73
|
+
- - '>='
|
52
74
|
- !ruby/object:Gem::Version
|
53
75
|
version: '0'
|
54
76
|
type: :development
|
55
77
|
prerelease: false
|
56
78
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
79
|
requirements:
|
59
|
-
- -
|
80
|
+
- - '>='
|
60
81
|
- !ruby/object:Gem::Version
|
61
82
|
version: '0'
|
62
83
|
description: BibSync is a tool to synchronize scientific papers and BibTeX bibliography
|
@@ -115,27 +136,26 @@ files:
|
|
115
136
|
- test/test_utils.rb
|
116
137
|
homepage: https://github.com/minad/bibsync
|
117
138
|
licenses: []
|
139
|
+
metadata: {}
|
118
140
|
post_install_message:
|
119
141
|
rdoc_options: []
|
120
142
|
require_paths:
|
121
143
|
- lib
|
122
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
145
|
requirements:
|
125
|
-
- -
|
146
|
+
- - '>='
|
126
147
|
- !ruby/object:Gem::Version
|
127
148
|
version: '0'
|
128
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
150
|
requirements:
|
131
|
-
- -
|
151
|
+
- - '>='
|
132
152
|
- !ruby/object:Gem::Version
|
133
153
|
version: '0'
|
134
154
|
requirements: []
|
135
155
|
rubyforge_project: bibsync
|
136
|
-
rubygems_version:
|
156
|
+
rubygems_version: 2.0.0
|
137
157
|
signing_key:
|
138
|
-
specification_version:
|
158
|
+
specification_version: 4
|
139
159
|
summary: BibSync is a tool to synchronize scientific papers and BibTeX bibliography
|
140
160
|
files
|
141
161
|
test_files: []
|