commonmeta-ruby 3.3.16 → 3.3.18
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 +4 -4
- data/Gemfile.lock +12 -29
- data/bin/commonmeta +1 -1
- data/lib/commonmeta/cli.rb +7 -0
- data/lib/commonmeta/readers/json_feed_reader.rb +5 -6
- data/lib/commonmeta/utils.rb +18 -2
- data/lib/commonmeta/version.rb +1 -1
- data/spec/cli_spec.rb +1 -1
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blog_post_with_non-url_id.yml +18 -88
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml +11 -50
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_author_name_suffix.yml +64 -173
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_doi.yml +13 -75
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_institutional_author.yml +15 -11
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_organizational_author.yml +15 -46
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_without_doi.yml +17 -155
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post.yml +14 -45
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml +13 -16
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/substack_post_with_broken_reference.yml +938 -1865
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/syldavia_gazette_post_with_references.yml +128 -267
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/upstream_post_with_references.yml +570 -1279
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post.yml +12 -119
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_many_references.yml +4095 -5759
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_references.yml +24 -220
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_tracking_code_on_url.yml +13 -12
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml +13 -16
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_doi.yml +12 -119
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_organizational_author.yml +15 -46
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_upstream_blog.yml +13 -201
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_with_references.yml +104 -813
- data/spec/readers/json_feed_reader_spec.rb +19 -21
- data/spec/utils_spec.rb +40 -0
- data/spec/writers/crossref_xml_writer_spec.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c4fb0fccfd81d27f198f9cb4f4d56dace1a0ea509f9dfa48603e6b09d5058cf
|
4
|
+
data.tar.gz: d50b7df6d786722b3d86a61da19c1c3083cf2df55c46d9b70393d67532802e43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4b8a03b506d1b14895fdf0f41a66cb45d674f15f0d022826f335048213533d73f32e8394c7f40df5935d7d56670f104b76a1042ed313c88e08ee0a38e1cd89c
|
7
|
+
data.tar.gz: 9af2e1d27abdc064550b95ce544394c72cf319dde10f1e2e33001ee6d61ba57d4554573772059c78a36e7235efd894549225f5090f8e11dcb8e31299701966f0
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
commonmeta-ruby (3.3.
|
4
|
+
commonmeta-ruby (3.3.18)
|
5
5
|
activesupport (>= 4.2.5, < 8.0)
|
6
6
|
addressable (~> 2.8.1, < 2.8.2)
|
7
7
|
base32-url (>= 0.7.0, < 1)
|
@@ -60,7 +60,7 @@ GEM
|
|
60
60
|
docile (1.4.0)
|
61
61
|
domain_name (0.5.20190701)
|
62
62
|
unf (>= 0.0.5, < 1.0.0)
|
63
|
-
ebnf (2.3.
|
63
|
+
ebnf (2.3.5)
|
64
64
|
htmlentities (~> 4.3)
|
65
65
|
rdf (~> 3.2)
|
66
66
|
scanf (~> 1.0)
|
@@ -76,9 +76,6 @@ GEM
|
|
76
76
|
ffi (>= 1.0.0)
|
77
77
|
rake
|
78
78
|
gender_detector (2.0.0)
|
79
|
-
haml (5.2.2)
|
80
|
-
temple (>= 0.8.0)
|
81
|
-
tilt
|
82
79
|
hana (1.3.7)
|
83
80
|
hashdiff (1.0.1)
|
84
81
|
htmlentities (4.3.4)
|
@@ -124,13 +121,13 @@ GEM
|
|
124
121
|
crass (~> 1.0.2)
|
125
122
|
nokogiri (>= 1.12.0)
|
126
123
|
matrix (0.4.2)
|
127
|
-
minitest (5.
|
124
|
+
minitest (5.19.0)
|
128
125
|
multi_json (1.15.0)
|
129
126
|
namae (1.1.1)
|
130
127
|
nokogiri (1.15.3-arm64-darwin)
|
131
128
|
racc (~> 1.4)
|
132
|
-
oj (3.15.
|
133
|
-
optimist (3.0
|
129
|
+
oj (3.15.1)
|
130
|
+
optimist (3.1.0)
|
134
131
|
parallel (1.23.0)
|
135
132
|
parser (3.2.2.3)
|
136
133
|
ast (~> 2.4.1)
|
@@ -150,31 +147,19 @@ GEM
|
|
150
147
|
rake (13.0.6)
|
151
148
|
rdf (3.2.11)
|
152
149
|
link_header (~> 0.0, >= 0.0.8)
|
153
|
-
rdf-
|
154
|
-
|
155
|
-
rdf-rdfa (3.2.2)
|
156
|
-
haml (>= 5.2, < 7)
|
157
|
-
htmlentities (~> 4.3)
|
158
|
-
rdf (~> 3.2)
|
159
|
-
rdf-aggregate-repo (~> 3.2)
|
160
|
-
rdf-vocab (~> 3.2)
|
161
|
-
rdf-xsd (~> 3.2)
|
162
|
-
rdf-rdfxml (3.2.1)
|
163
|
-
haml (~> 5.2)
|
150
|
+
rdf-rdfxml (3.2.2)
|
151
|
+
builder (~> 3.2)
|
164
152
|
htmlentities (~> 4.3)
|
165
153
|
rdf (~> 3.2)
|
166
|
-
rdf-rdfa (~> 3.2)
|
167
154
|
rdf-xsd (~> 3.2)
|
168
155
|
rdf-turtle (3.2.1)
|
169
156
|
ebnf (~> 2.3)
|
170
157
|
rdf (~> 3.2)
|
171
|
-
rdf-vocab (3.2.6)
|
172
|
-
rdf (~> 3.2, >= 3.2.4)
|
173
158
|
rdf-xsd (3.2.1)
|
174
159
|
rdf (~> 3.2)
|
175
160
|
rexml (~> 3.2)
|
176
161
|
regexp_parser (2.8.1)
|
177
|
-
rexml (3.2.
|
162
|
+
rexml (3.2.6)
|
178
163
|
rspec (3.12.0)
|
179
164
|
rspec-core (~> 3.12.0)
|
180
165
|
rspec-expectations (~> 3.12.0)
|
@@ -184,14 +169,14 @@ GEM
|
|
184
169
|
rspec-expectations (3.12.3)
|
185
170
|
diff-lcs (>= 1.2.0, < 2.0)
|
186
171
|
rspec-support (~> 3.12.0)
|
187
|
-
rspec-mocks (3.12.
|
172
|
+
rspec-mocks (3.12.6)
|
188
173
|
diff-lcs (>= 1.2.0, < 2.0)
|
189
174
|
rspec-support (~> 3.12.0)
|
190
175
|
rspec-support (3.12.1)
|
191
176
|
rspec-xsd (0.1.0)
|
192
177
|
nokogiri (~> 1.6)
|
193
178
|
rspec (~> 3)
|
194
|
-
rubocop (1.
|
179
|
+
rubocop (1.55.1)
|
195
180
|
json (~> 2.3)
|
196
181
|
language_server-protocol (>= 3.17.0)
|
197
182
|
parallel (~> 1.10)
|
@@ -199,7 +184,7 @@ GEM
|
|
199
184
|
rainbow (>= 2.2.2, < 4.0)
|
200
185
|
regexp_parser (>= 1.8, < 3.0)
|
201
186
|
rexml (>= 3.2.5, < 4.0)
|
202
|
-
rubocop-ast (>= 1.28.
|
187
|
+
rubocop-ast (>= 1.28.1, < 2.0)
|
203
188
|
ruby-progressbar (~> 1.7)
|
204
189
|
unicode-display_width (>= 2.4.0, < 3.0)
|
205
190
|
rubocop-ast (1.29.0)
|
@@ -213,7 +198,7 @@ GEM
|
|
213
198
|
rubocop-ast (>= 0.4.0)
|
214
199
|
rubocop-rake (0.6.0)
|
215
200
|
rubocop (~> 1.0)
|
216
|
-
rubocop-rspec (2.
|
201
|
+
rubocop-rspec (2.23.0)
|
217
202
|
rubocop (~> 1.33)
|
218
203
|
rubocop-capybara (~> 2.17)
|
219
204
|
rubocop-factory_bot (~> 2.22)
|
@@ -231,14 +216,12 @@ GEM
|
|
231
216
|
sxp (1.2.4)
|
232
217
|
matrix (~> 0.4)
|
233
218
|
rdf (~> 3.2)
|
234
|
-
temple (0.10.2)
|
235
219
|
textutils (1.4.0)
|
236
220
|
activesupport
|
237
221
|
logutils (>= 0.6.1)
|
238
222
|
props (>= 1.1.2)
|
239
223
|
rubyzip (>= 1.0.0)
|
240
224
|
thor (1.2.2)
|
241
|
-
tilt (2.2.0)
|
242
225
|
tzinfo (2.0.6)
|
243
226
|
concurrent-ruby (~> 1.0)
|
244
227
|
unf (0.1.4)
|
data/bin/commonmeta
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require File.expand_path("../../lib/commonmeta", __FILE__)
|
4
4
|
|
5
|
-
if (ARGV & %w(--version -v help --help encode decode encode_id decode_id encode_by_blog encode_by_id json_feed_not_indexed json_feed_unregistered json_feed_by_blog update_ghost_post)).empty?
|
5
|
+
if (ARGV & %w(--version -v help --help encode decode encode_id decode_id encode_by_blog encode_by_id json_feed_not_indexed json_feed_unregistered json_feed_by_blog update_ghost_post generate_ghost_api_token)).empty?
|
6
6
|
Commonmeta::CLI.start(ARGV.dup.unshift("convert"))
|
7
7
|
else
|
8
8
|
Commonmeta::CLI.start
|
data/lib/commonmeta/cli.rb
CHANGED
@@ -121,6 +121,13 @@ module Commonmeta
|
|
121
121
|
puts update_ghost_post_via_api(id)
|
122
122
|
end
|
123
123
|
|
124
|
+
desc "", "generate_ghost_api_token"
|
125
|
+
|
126
|
+
def generate_ghost_api_token
|
127
|
+
# generate short lived jwt for ghost admin api
|
128
|
+
puts generate_ghost_token
|
129
|
+
end
|
130
|
+
|
124
131
|
default_task :convert
|
125
132
|
end
|
126
133
|
end
|
@@ -21,7 +21,7 @@ module Commonmeta
|
|
21
21
|
meta = string.present? ? JSON.parse(string) : {}
|
22
22
|
|
23
23
|
url = normalize_url(meta.fetch("url", nil))
|
24
|
-
id = options[:doi] ? normalize_doi(options[:doi]) : normalize_id(meta.fetch("
|
24
|
+
id = options[:doi] ? normalize_doi(options[:doi]) : normalize_id(meta.fetch("doi", nil))
|
25
25
|
id = url if id.blank? && url.present?
|
26
26
|
|
27
27
|
type = "Article"
|
@@ -34,8 +34,8 @@ module Commonmeta
|
|
34
34
|
publisher = { "name" => meta.dig("blog", "title") }
|
35
35
|
|
36
36
|
date = {}
|
37
|
-
date["published"] =
|
38
|
-
date["updated"] =
|
37
|
+
date["published"] = get_date_from_unix_timestamp(meta.dig("published_at")) if meta.dig("published_at").present?
|
38
|
+
date["updated"] = get_date_from_unix_timestamp(meta.dig("updated_at")) if meta.dig("updated_at").present?
|
39
39
|
|
40
40
|
license = if meta.dig("blog", "license").present?
|
41
41
|
hsh_to_spdx("rightsURI" => meta.dig("blog", "license"))
|
@@ -62,7 +62,7 @@ module Commonmeta
|
|
62
62
|
sum
|
63
63
|
end
|
64
64
|
references = get_references(meta)
|
65
|
-
alternate_identifiers = [{ "alternateIdentifier" => meta["
|
65
|
+
alternate_identifiers = [{ "alternateIdentifier" => meta["id"], "alternateIdentifierType" => "UUID" }]
|
66
66
|
|
67
67
|
{ "id" => id,
|
68
68
|
"type" => type,
|
@@ -83,7 +83,7 @@ module Commonmeta
|
|
83
83
|
|
84
84
|
def get_references(meta)
|
85
85
|
# check that references resolve
|
86
|
-
Array.wrap(meta["
|
86
|
+
Array.wrap(meta["reference"]).reduce([]) do |sum, reference|
|
87
87
|
begin
|
88
88
|
if reference["doi"] && validate_doi(reference["doi"])
|
89
89
|
response = HTTP.follow
|
@@ -122,7 +122,6 @@ module Commonmeta
|
|
122
122
|
return { "string" => nil, "state" => "not_found" } unless response.status.success?
|
123
123
|
|
124
124
|
posts = JSON.parse(response.body.to_s)
|
125
|
-
puts posts.inspect
|
126
125
|
posts.map { |post| post["id"] }.first
|
127
126
|
end
|
128
127
|
|
data/lib/commonmeta/utils.rb
CHANGED
@@ -1094,6 +1094,20 @@ module Commonmeta
|
|
1094
1094
|
nil
|
1095
1095
|
end
|
1096
1096
|
|
1097
|
+
# parsing of unix timestamps such as 1427846400
|
1098
|
+
def get_datetime_from_unix_timestamp(unix_timestamp)
|
1099
|
+
strip_milliseconds(DateTime.strptime(unix_timestamp.to_s, "%s").iso8601)
|
1100
|
+
rescue StandardError
|
1101
|
+
nil
|
1102
|
+
end
|
1103
|
+
|
1104
|
+
# parsing of unix timestamps such as 1427846400
|
1105
|
+
def get_date_from_unix_timestamp(unix_timestamp)
|
1106
|
+
DateTime.strptime(unix_timestamp.to_s, "%s").strftime("%Y-%m-%d")
|
1107
|
+
rescue StandardError
|
1108
|
+
nil
|
1109
|
+
end
|
1110
|
+
|
1097
1111
|
# strip milliseconds if there is a time, as it interferes with edtc parsing
|
1098
1112
|
# keep dates unchanged
|
1099
1113
|
def strip_milliseconds(iso8601_time)
|
@@ -1453,9 +1467,11 @@ module Commonmeta
|
|
1453
1467
|
"https://rogue-scholar.org/api/posts/#{id}"
|
1454
1468
|
end
|
1455
1469
|
|
1456
|
-
def generate_ghost_token(admin_api_key)
|
1470
|
+
def generate_ghost_token(admin_api_key = ENV["API_KEY"])
|
1457
1471
|
# from https://ghost.org/docs/admin-api/
|
1458
1472
|
|
1473
|
+
return nil unless admin_api_key.present?
|
1474
|
+
|
1459
1475
|
# Split the key into ID and SECRET
|
1460
1476
|
id, secret = admin_api_key.split(":")
|
1461
1477
|
|
@@ -1508,7 +1524,7 @@ module Commonmeta
|
|
1508
1524
|
|
1509
1525
|
# update post canonical_url with new doi
|
1510
1526
|
ghost_url = "#{api_url}/ghost/api/admin/posts/#{ghost_id}/"
|
1511
|
-
response = HTTP.auth("Ghost #{ghost_jwt}").headers(
|
1527
|
+
response = HTTP.auth("Ghost #{ghost_jwt}").headers("Content-Type" => "application/json", "Accept-Version" => "v5").put(ghost_url, :json => { "posts" => [{ "canonical_url" => doi, "updated_at" => updated_at }] })
|
1512
1528
|
"#{response.status} DOI #{doi} added to post #{ghost_id}"
|
1513
1529
|
end
|
1514
1530
|
end
|
data/lib/commonmeta/version.rb
CHANGED
data/spec/cli_spec.rb
CHANGED
@@ -371,7 +371,7 @@ describe Commonmeta::CLI do
|
|
371
371
|
end
|
372
372
|
|
373
373
|
it "json_feed_not_indexed" do
|
374
|
-
expect { subject.json_feed_not_indexed }.to output(/
|
374
|
+
expect { subject.json_feed_not_indexed }.to output(/r294649-6f79289-8cw1w/).to_stdout
|
375
375
|
end
|
376
376
|
|
377
377
|
it "json_feed_by_blog" do
|
@@ -23,28 +23,28 @@ http_interactions:
|
|
23
23
|
Cache-Control:
|
24
24
|
- public, max-age=0, must-revalidate
|
25
25
|
Content-Length:
|
26
|
-
- '
|
26
|
+
- '2106'
|
27
27
|
Content-Type:
|
28
28
|
- application/json; charset=utf-8
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Mon, 10 Jul 2023 21:04:54 GMT
|
31
31
|
Etag:
|
32
|
-
- '"
|
32
|
+
- '"13pz9o7pqcg1mi"'
|
33
33
|
Server:
|
34
34
|
- Vercel
|
35
35
|
Strict-Transport-Security:
|
36
36
|
- max-age=63072000
|
37
37
|
X-Matched-Path:
|
38
|
-
- "/api/posts/[
|
38
|
+
- "/api/posts/[[...params]]"
|
39
39
|
X-Vercel-Cache:
|
40
40
|
- MISS
|
41
41
|
X-Vercel-Id:
|
42
|
-
- fra1::iad1::
|
42
|
+
- fra1::iad1::jbp2f-1689023094094-f2a6094c04f1
|
43
43
|
Connection:
|
44
44
|
- close
|
45
45
|
body:
|
46
46
|
encoding: UTF-8
|
47
|
-
string: '{"id":"https://doi.org/10.59350/63055-a8604","
|
47
|
+
string: '{"id":"1898d2d7-4d87-4487-96c4-3073cf99e9a5","doi":"https://doi.org/10.59350/63055-a8604","url":"http://sfmatheson.blogspot.com/2023/01/quintessence-of-dust-2023-restart-why.html","title":"Quintessence
|
48
48
|
of Dust 2023 restart: the why","summary":"It''s early January 2023, a little
|
49
49
|
before sunset in Tucson. Live image below, showing the glorious Santa Catalina
|
50
50
|
mountains (the snow on the upper reaches is more apparent earlier in the day)
|
@@ -52,85 +52,15 @@ http_interactions:
|
|
52
52
|
to start writing here at Quintessence of Dust, after another long hiatus.
|
53
53
|
Here are some of my reasons.1. I like to write, and I have things to say,
|
54
54
|
and I self-identify as an author. For eight years, I have co-organized and
|
55
|
-
taught in...","
|
56
|
-
Matheson"}],"image":null,"
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
to say, and I self-identify as an author. For eight years, I have co-organized
|
68
|
-
and taught in the <a href=\"https://meetings.cshl.edu/courses.aspx?course=C-WRITE&year=23\"
|
69
|
-
target=\"_blank\">Scientific Writing Retreat at Cold Spring Harbor Laboratory</a>.
|
70
|
-
I''m a writer and I need to write, if only for myself.</div><div><br /></div><div>2.
|
71
|
-
I have an idea for a book, along with some introductory work (but no sample
|
72
|
-
chapters yet) and writing here will help me develop those thoughts. The idea
|
73
|
-
is over twelve years old and has never faded away, which I take to mean that
|
74
|
-
I need to get it out of my system somehow.</div><div><br /></div><div>3. I
|
75
|
-
have other ideas kicking around in my head and most of them are worth writing
|
76
|
-
about. I have one new intellectual passion that is totally worth writing about:
|
77
|
-
<a href=\"https://skyislandalliance.org/the-sky-islands/\" target=\"_blank\">the
|
78
|
-
Sky Islands</a> that nearly surround us here in Tucson.</div><div><br
|
79
|
-
/></div><div>4. I have an exciting new job with great new people at <a href=\"https://plos.org/\"
|
80
|
-
target=\"_blank\">an organization</a> that''s all in for <a href=\"https://plos.org/open-science/\"
|
81
|
-
target=\"_blank\">open science</a>. I recently turned over the tens digit
|
82
|
-
on my age-o-meter. My kids will very soon be all out of college. (One is about
|
83
|
-
to start a postdoc!) All of this led, predictably, to a spasm of reflection
|
84
|
-
on projects and vision. One clear result is that I''m feeling more inspired.<span><a
|
85
|
-
name=''more''></a></span></div><div><br /></div><div>5. The demise of Twitter
|
86
|
-
has led to a lot of <a href=\"https://www.theatlantic.com/technology/archive/2022/11/twitter-facebook-social-media-decline/672074/\"
|
87
|
-
target=\"_blank\">useful commentary</a> about the nature of social media.
|
88
|
-
I left Facebook two years ago and all but left Twitter two months ago. I''m
|
89
|
-
on a <a href=\"https://fediscience.org/explore\" target=\"_blank\">good
|
90
|
-
server at Mastodon</a> and I like it; maybe microblogging there can satisfy
|
91
|
-
my desire for conversation and connection. But <a href=\"https://www.theverge.com/23513418/bring-back-personal-blogging\"
|
92
|
-
target=\"_blank\">this recent piece</a> at <i>The Verge</i> by <a href=\"https://moniquejudge.com/\"
|
93
|
-
target=\"_blank\">Monique Judge</a> convinced me that blogging could (again)
|
94
|
-
have a place in the future.</div><div><br /><div>Here''s her summary, emphasis
|
95
|
-
mine:</div><div><blockquote>At the end of the day, we don’t know what is going
|
96
|
-
to happen next with Twitter or any of these platforms. We don’t know what
|
97
|
-
changes <a href=\"https://www.techtarget.com/whatis/definition/Web-30\" target=\"_blank\">Web
|
98
|
-
3.0</a> is going to bring to the internet. We do know that <b>we will all
|
99
|
-
still be here, wanting to share our thoughts, talk about anything and everything,
|
100
|
-
and commune with our people</b>. Personal blogging is the simplest and fastest
|
101
|
-
way to do all of that. </blockquote></div><div>That''s what I want! A
|
102
|
-
place to write, and (if I''m lucky) a place to discuss and \"commune\" with
|
103
|
-
people. That used to happen a lot at <i>Quintessence of Dust</i>.<span></span></div></div></div><div><br
|
104
|
-
/></div><div>Okay, but why here? This blog is over 15 years old and was started
|
105
|
-
when I was a Christian believer. <a href=\"https://sfmatheson.blogspot.com/2007/08/kicking-off-my-blog.html\"
|
106
|
-
target=\"_blank\">Its founding themes</a> were anchored in a desire to help
|
107
|
-
Christians understand and enjoy biology, to help them shake free of misinformation
|
108
|
-
and dishonesty. It has twice languished through long hiatuses and was <a href=\"https://sfmatheson.blogspot.com/p/about.html\"
|
109
|
-
target=\"_blank\">remodeled</a> back in 2017 a few years after I deconverted.
|
110
|
-
Maybe it''s time to start anew? I think not, for many of those same reasons:
|
111
|
-
I''m still a biologist who loves science, still worried about misinformation,
|
112
|
-
and still rooted in the power of scientific explanation. I''m still a bardolator
|
113
|
-
and a Red Sox fan. <a href=\"https://sfmatheson.blogspot.com/p/about.html\">I''m
|
114
|
-
still me</a>, and <i>Quintessence of Dust</i> is still my blog. The new <a
|
115
|
-
href=\"https://sfmatheson.blogspot.com/p/about.html\" target=\"_blank\">About
|
116
|
-
page</a> is slightly remodeled from 2017, and hints at the next post, which
|
117
|
-
will outline some new goals and ongoing projects.</div><div><br /></div><div>A
|
118
|
-
final note on inspiration, from Imani Perry, writing in her newsletter (<a
|
119
|
-
href=\"https://newsletters.theatlantic.com/unsettled-territory/\" target=\"_blank\">Unsettled
|
120
|
-
Territory</a>) at <i>The Atlantic</i>. The piece is \"<a href=\"https://newsletters.theatlantic.com/unsettled-territory/63af3facace609003751bacc/becoming-writer-habit-journalism/\"
|
121
|
-
target=\"_blank\">Writing is a Democratic Art</a>.\" It''s for subscribers
|
122
|
-
only but here is her challenge:</div><div><blockquote>Thinking and writing
|
123
|
-
at a faster pace stretched me and gave me greater confidence. Sometimes I
|
124
|
-
changed my mind about what I’d written a day later. But that was okay; a newsletter
|
125
|
-
is a moment in time. Writing it each week gave me a lovely rhythm in what
|
126
|
-
has otherwise been a difficult and disorienting season in history. Feeling
|
127
|
-
stuck can get you stuck. But writing can, and should, inspire deeds.</blockquote></div>","tags":["Introduction"],"language":"en","references":[],"blog_id":"5764g49","blog":{"id":"5764g49","title":"Quintessence
|
128
|
-
of Dust","description":"<i>Quintessence of Dust</i> explores science, society,
|
129
|
-
and human nature, focusing on genetics, development, evolution, neuroscience,
|
130
|
-
systems biology, and topics related to scientific literacy. I occasionally
|
131
|
-
discuss intelligent design, creationism, science denial, and other political/social
|
132
|
-
influences on scientific literacy. Additional topics: philosophy, baseball,
|
133
|
-
scientific culture, and Shakespeare. My main theme is <b><u>scientific explanation</u></b>.","language":"en","favicon":null,"feed_url":"http://sfmatheson.blogspot.com/feeds/posts/default","home_page_url":"http://sfmatheson.blogspot.com/","user_id":"8498eaf6-8c58-4b58-bc15-27eda292b1aa","created_at":"2023-05-31T14:21:27+00:00","indexed_at":"2023-04-18","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
|
134
|
-
7.00","category":"Social Sciences","prefix":"10.59350","modified_at":"2023-06-06T20:22:00+00:00","version":"https://jsonfeed.org/version/1.1","backlog":true,"authors":null}}'
|
135
|
-
recorded_at: Sun, 18 Jun 2023 15:23:52 GMT
|
136
|
-
recorded_with: VCR 6.1.0
|
55
|
+
taught in...","published_at":1673233380,"updated_at":1680470227,"indexed_at":1689006804,"authors":[{"url":null,"name":"Stephen
|
56
|
+
Matheson"}],"image":null,"tags":["Introduction"],"language":"en","reference":[],"blog_id":"5764g49","blog_name":"Quintessence
|
57
|
+
of Dust","blog":{"id":"5764g49","title":"Quintessence of Dust","description":"<i>Quintessence
|
58
|
+
of Dust</i> explores science, society, and human nature, focusing on genetics,
|
59
|
+
development, evolution, neuroscience, systems biology, and topics related
|
60
|
+
to scientific literacy. I occasionally discuss intelligent design, creationism,
|
61
|
+
science denial, and other political/social influences on scientific literacy.
|
62
|
+
Additional topics: philosophy, baseball, scientific culture, and Shakespeare.
|
63
|
+
My main theme is <b><u>scientific explanation</u></b>.","language":"en","favicon":null,"feed_url":"http://sfmatheson.blogspot.com/feeds/posts/default","home_page_url":"http://sfmatheson.blogspot.com/","user_id":"8498eaf6-8c58-4b58-bc15-27eda292b1aa","created_at":"2023-05-31T14:21:27+00:00","indexed_at":"2023-04-18","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
|
64
|
+
7.00","category":"Social Sciences","prefix":"10.59350","modified_at":"2023-07-05T03:41:45+00:00","version":"https://jsonfeed.org/version/1.1","backlog":true,"current_feed_url":null,"expired":null}}'
|
65
|
+
recorded_at: Mon, 10 Jul 2023 21:04:54 GMT
|
66
|
+
recorded_with: VCR 6.2.0
|
data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml
CHANGED
@@ -23,28 +23,28 @@ http_interactions:
|
|
23
23
|
Cache-Control:
|
24
24
|
- public, max-age=0, must-revalidate
|
25
25
|
Content-Length:
|
26
|
-
- '
|
26
|
+
- '2018'
|
27
27
|
Content-Type:
|
28
28
|
- application/json; charset=utf-8
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Mon, 10 Jul 2023 21:04:51 GMT
|
31
31
|
Etag:
|
32
|
-
- '"
|
32
|
+
- '"rlf5k9cygn1ju"'
|
33
33
|
Server:
|
34
34
|
- Vercel
|
35
35
|
Strict-Transport-Security:
|
36
36
|
- max-age=63072000
|
37
37
|
X-Matched-Path:
|
38
|
-
- "/api/posts/[
|
38
|
+
- "/api/posts/[[...params]]"
|
39
39
|
X-Vercel-Cache:
|
40
40
|
- MISS
|
41
41
|
X-Vercel-Id:
|
42
|
-
- fra1::iad1::
|
42
|
+
- fra1::iad1::9gxbv-1689023091514-026dffac583b
|
43
43
|
Connection:
|
44
44
|
- close
|
45
45
|
body:
|
46
46
|
encoding: UTF-8
|
47
|
-
string: '{"id":"https://doi.org/10.59350/37y2z-gre70","
|
47
|
+
string: '{"id":"f3629c86-06e0-42c0-844a-266b03a91ef1","doi":"https://doi.org/10.59350/37y2z-gre70","url":"https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html","title":"Ten
|
48
48
|
years and a million links","summary":"As trailed on a Twitter thread last
|
49
49
|
week I’ve been working on a manuscript describing the efforts to map taxonomic
|
50
50
|
names to their original descriptions in the taxonomic literature. Putting
|
@@ -52,52 +52,13 @@ http_interactions:
|
|
52
52
|
basically “um, what, exactly, have you been doing all these years?”. TL;DR
|
53
53
|
Across fungi, plants, and animals approx 1.3 million names have been linked
|
54
54
|
to a persistent identifier for a publication.— Roderic Page (@rdmpage) May
|
55
|
-
25,...","
|
56
|
-
Page"}],"image":null,"
|
57
|
-
week I’ve been working on a manuscript describing the efforts to map taxonomic
|
58
|
-
names to their original descriptions in the taxonomic literature.</p>\n<blockquote
|
59
|
-
class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Putting together a manuscript
|
60
|
-
on linking taxonomic names to the primary literature, basically “um, what,
|
61
|
-
exactly, have you been doing all these years?”. TL;DR Across fungi, plants,
|
62
|
-
and animals approx 1.3 million names have been linked to a persistent identifier
|
63
|
-
for a publication.</p>— Roderic Page (@rdmpage) <a href=\"https://twitter.com/rdmpage/status/1661714128413573120?ref_src=twsrc%5Etfw\">May
|
64
|
-
25, 2023</a></blockquote> \n<p>The preprint is on bioRxiv <a href=\"https://doi.org/10.1101/2023.05.29.542697\">doi:10.1101/2023.05.29.542697</a></p>\n<blockquote>\n<p>A
|
65
|
-
major gap in the biodiversity knowledge graph is a connection between taxonomic
|
66
|
-
names and the taxonomic literature. While both names and publications often
|
67
|
-
have persistent identifiers (PIDs), such as Life Science Identifiers (LSIDs)
|
68
|
-
or Digital Object Identifiers (DOIs), LSIDs for names are rarely linked to
|
69
|
-
DOIs for publications. This article describes efforts to make those connections
|
70
|
-
across three large taxonomic databases: Index Fungorum, International Plant
|
71
|
-
Names Index (IPNI), and the Index of Organism Names (ION). Over a million
|
72
|
-
names have been matched to DOIs or other persistent identifiers for taxonomic
|
73
|
-
publications. This represents approximately 36% of names for which publication
|
74
|
-
data is available. The mappings between LSIDs and publication PIDs are made
|
75
|
-
available through ChecklistBank. Applications of this mapping are discussed,
|
76
|
-
including a web app to locate the citation of a taxonomic name, and a knowledge
|
77
|
-
graph that uses data on researcher’s ORCID ids to connect taxonomic names
|
78
|
-
and publications to authors of those names.</p>\n</blockquote>\n<p>Much of
|
79
|
-
the work has been linking taxa to names, which still has huge gaps. There
|
80
|
-
are also interesting differences in coverage between plants, animals, and
|
81
|
-
fungi (see preprint for details).</p>\n\n<div class=\"separator\" style=\"clear:
|
82
|
-
both;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdWsSQhqi1DErXMIHm28g37-fiALNIsI5eQZmvoX_Fe03ZSwtKHbYt-LCsCCAUop0AGcwy_w7NpIjylVH1hNrM9oW-6j9e6tHASha49TTqFvDg2_tEx3r74RRFsjUo4M_Qat8NmKaZSChOt2hI3LsMjTVLrEVirEckU-9Ei7ug-7OHQlR4LA/s2276/animals-coverage.png\"
|
83
|
-
style=\"display: block; padding: 1em 0; text-align: center; \"><img alt=\"\"
|
84
|
-
border=\"0\" width=\"320\" data-original-height=\"2276\" data-original-width=\"2276\"
|
85
|
-
src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdWsSQhqi1DErXMIHm28g37-fiALNIsI5eQZmvoX_Fe03ZSwtKHbYt-LCsCCAUop0AGcwy_w7NpIjylVH1hNrM9oW-6j9e6tHASha49TTqFvDg2_tEx3r74RRFsjUo4M_Qat8NmKaZSChOt2hI3LsMjTVLrEVirEckU-9Ei7ug-7OHQlR4LA/s320/animals-coverage.png\"/></a></div><div
|
86
|
-
class=\"separator\" style=\"clear: both;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyxlVJ-oyMCNPmHtHWjSxdxMSJvgzdWRGRF6Ad4dk7ab7gGDpuKdKmS9XhROkopw361ylfsTd1ZkwkF6BN0JlWNnVLCKY1AfryCfWKHkgPQM7u-0SELW9j8RlQIflb6ibaV64gwW7oJrEvOGECvR51F8EW8cRg-1usW-GBM5ymObj7zlObQ/s2276/fungi-coverage.png\"
|
87
|
-
style=\"display: block; padding: 1em 0; text-align: center; \"><img alt=\"\"
|
88
|
-
border=\"0\" width=\"320\" data-original-height=\"2276\" data-original-width=\"2276\"
|
89
|
-
src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyxlVJ-oyMCNPmHtHWjSxdxMSJvgzdWRGRF6Ad4dk7ab7gGDpuKdKmS9XhROkopw361ylfsTd1ZkwkF6BN0JlWNnVLCKY1AfryCfWKHkgPQM7u-0SELW9j8RlQIflb6ibaV64gwW7oJrEvOGECvR51F8EW8cRg-1usW-GBM5ymObj7zlObQ/s320/fungi-coverage.png\"/></a></div><div
|
90
|
-
class=\"separator\" style=\"clear: both;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0YBuvNSXWAJTfQ1jk4XSocMzCYHP7t6IPUqhjQ3mftgM_850igWaD2copgNH6Xk6T62xBU641wvwOvXgCCDY3m2xC_gaILXO9RGx8H3Gpy5OOncsLb9smpT2LIgtYOExVBVdDRWqA0AZ8-mQjWL7dL5TiG7MqVu8spT8ACoGOPR_T36hRA/s2276/plants-coverage.png\"
|
91
|
-
style=\"display: block; padding: 1em 0; text-align: center; \"><img alt=\"\"
|
92
|
-
border=\"0\" width=\"320\" data-original-height=\"2276\" data-original-width=\"2276\"
|
93
|
-
src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0YBuvNSXWAJTfQ1jk4XSocMzCYHP7t6IPUqhjQ3mftgM_850igWaD2copgNH6Xk6T62xBU641wvwOvXgCCDY3m2xC_gaILXO9RGx8H3Gpy5OOncsLb9smpT2LIgtYOExVBVdDRWqA0AZ8-mQjWL7dL5TiG7MqVu8spT8ACoGOPR_T36hRA/s320/plants-coverage.png\"/></a></div>\n\n\nThere
|
94
|
-
is also a simple app to demonstrate these links, see <a href=\"https://species-cite.herokuapp.com\">https://species-cite.herokuapp.com</a>.\n\n\n\n<blockquote>\n<p>Written
|
95
|
-
with <a href=\"https://stackedit.io/\">StackEdit</a>.</p>\n</blockquote>","tags":[],"language":"en","references":[],"blog_id":"tyfqw20","blog":{"id":"tyfqw20","title":"iPhylo","description":"Rants,
|
55
|
+
25,...","published_at":1685553960,"updated_at":1685554180,"indexed_at":1689006804,"authors":[{"url":"https://orcid.org/0000-0002-7101-9767","name":"Roderic
|
56
|
+
Page"}],"image":null,"tags":[],"language":"en","reference":[],"blog_id":"tyfqw20","blog_name":"iPhylo","blog":{"id":"tyfqw20","title":"iPhylo","description":"Rants,
|
96
57
|
raves (and occasionally considered opinions) on phyloinformatics, taxonomy,
|
97
58
|
and biodiversity informatics. For more ranty and less considered opinions,
|
98
59
|
see my <a href=\"https://twitter.com/rdmpage\">Twitter feed</a>.<br>ISSN 2051-8188.
|
99
60
|
Written content on this site is licensed under a <a href=\"https://creativecommons.org/licenses/by/4.0/\">Creative
|
100
61
|
Commons Attribution 4.0 International license</a>.","language":"en","favicon":null,"feed_url":"https://iphylo.blogspot.com/feeds/posts/default","home_page_url":"https://iphylo.blogspot.com/","user_id":"8498eaf6-8c58-4b58-bc15-27eda292b1aa","created_at":"2023-05-31T08:03:14+00:00","indexed_at":"2023-02-06","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
|
101
|
-
7.00","category":"Natural Sciences","prefix":"10.59350","modified_at":"2023-
|
102
|
-
recorded_at:
|
103
|
-
recorded_with: VCR 6.
|
62
|
+
7.00","category":"Natural Sciences","prefix":"10.59350","modified_at":"2023-06-17T15:38:20+00:00","version":"https://jsonfeed.org/version/1.1","backlog":true,"current_feed_url":null,"expired":null}}'
|
63
|
+
recorded_at: Mon, 10 Jul 2023 21:04:52 GMT
|
64
|
+
recorded_with: VCR 6.2.0
|