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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +12 -29
  3. data/bin/commonmeta +1 -1
  4. data/lib/commonmeta/cli.rb +7 -0
  5. data/lib/commonmeta/readers/json_feed_reader.rb +5 -6
  6. data/lib/commonmeta/utils.rb +18 -2
  7. data/lib/commonmeta/version.rb +1 -1
  8. data/spec/cli_spec.rb +1 -1
  9. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blog_post_with_non-url_id.yml +18 -88
  10. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml +11 -50
  11. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_author_name_suffix.yml +64 -173
  12. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_doi.yml +13 -75
  13. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_institutional_author.yml +15 -11
  14. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_organizational_author.yml +15 -46
  15. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_without_doi.yml +17 -155
  16. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post.yml +14 -45
  17. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml +13 -16
  18. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/substack_post_with_broken_reference.yml +938 -1865
  19. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/syldavia_gazette_post_with_references.yml +128 -267
  20. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/upstream_post_with_references.yml +570 -1279
  21. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post.yml +12 -119
  22. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_many_references.yml +4095 -5759
  23. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_references.yml +24 -220
  24. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_tracking_code_on_url.yml +13 -12
  25. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml +13 -16
  26. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_doi.yml +12 -119
  27. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_organizational_author.yml +15 -46
  28. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_upstream_blog.yml +13 -201
  29. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_with_references.yml +104 -813
  30. data/spec/readers/json_feed_reader_spec.rb +19 -21
  31. data/spec/utils_spec.rb +40 -0
  32. data/spec/writers/crossref_xml_writer_spec.rb +4 -4
  33. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1959fba18a127e97c92b94c7e0e78d42c4538e3bccf6b9e6019035931e19d2f4
4
- data.tar.gz: 190a4ddc0e6789c56f6f9a5a97355c8684e103abf121d2dfefdd5c1d816bd2d2
3
+ metadata.gz: 1c4fb0fccfd81d27f198f9cb4f4d56dace1a0ea509f9dfa48603e6b09d5058cf
4
+ data.tar.gz: d50b7df6d786722b3d86a61da19c1c3083cf2df55c46d9b70393d67532802e43
5
5
  SHA512:
6
- metadata.gz: d5994587ca3efda69c8f1e4efca204a89db31d9e4b48a4b683e0312e32209c720f3a24506026152dd69d6ee49895919d72ee4d3aea6557da2b972a1fdb94092a
7
- data.tar.gz: 56b4e03114cff5155c502f08f953afb3f2ba13c82bdefecfed73b752131b6b718cd21460eaa8d6506b7b50ded9655330e7c040c833a81c5feeb105c489306ab9
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.16)
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.4)
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.18.1)
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.0)
133
- optimist (3.0.1)
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-aggregate-repo (3.2.1)
154
- rdf (~> 3.2)
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.5)
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.5)
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.54.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.0, < 2.0)
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.22.0)
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
@@ -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("id", nil))
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"] = get_iso8601_date(meta.dig("date_published")) if meta.dig("date_published").present?
38
- date["updated"] = get_iso8601_date(meta.dig("date_modified")) if meta.dig("date_modified").present?
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["uuid"], "alternateIdentifierType" => "UUID" }]
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["references"]).reduce([]) do |sum, reference|
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
 
@@ -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('Content-Type' => "application/json", 'Accept-Version' => 'v5').put(ghost_url, :json => { 'posts' => [{ 'canonical_url' => doi, 'updated_at' => updated_at }] })
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmeta
4
- VERSION = '3.3.16'
4
+ VERSION = '3.3.18'
5
5
  end
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(/b1038a3f-c5aa-4a68-97cb-5c68b27942f7/).to_stdout
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
- - '8562'
26
+ - '2106'
27
27
  Content-Type:
28
28
  - application/json; charset=utf-8
29
29
  Date:
30
- - Sun, 18 Jun 2023 15:23:52 GMT
30
+ - Mon, 10 Jul 2023 21:04:54 GMT
31
31
  Etag:
32
- - '"12ofvtx6pm66lo"'
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/[slug]"
38
+ - "/api/posts/[[...params]]"
39
39
  X-Vercel-Cache:
40
40
  - MISS
41
41
  X-Vercel-Id:
42
- - fra1::iad1::v8bjb-1687101832274-be4cfdb8ff78
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","uuid":"1898d2d7-4d87-4487-96c4-3073cf99e9a5","url":"http://sfmatheson.blogspot.com/2023/01/quintessence-of-dust-2023-restart-why.html","title":"Quintessence
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...","date_published":"2023-01-09T03:03:00Z","date_modified":"2023-04-02T21:17:07Z","date_indexed":"2023-06-18T13:32:03.284651+00:00","authors":[{"url":null,"name":"Stephen
56
- Matheson"}],"image":null,"content_html":"It''s early January 2023, a little
57
- before sunset in Tucson. Live image below, showing the glorious Santa Catalina
58
- mountains (the snow on the upper reaches is more apparent earlier in the day)
59
- and my dinner preparations (shrimp and veggies on the grill).<div class=\"separator\"
60
- style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgBx9BU21qMDFnLxgHmnsl6TQVfb3QCwOXrC1zcXq7WH9gN8E0TcH3pTslRBG6O8mb5gcuF9JVtDlJ2je6dFcfyzKE4OD38-ftr66nBxddo892_NkyuevrrX65ndSbwmXMaLh3F5yiqU1QIj8JtA8FLkKOcHOEVwVafz0rzh7PejbFzp3XT25nQxc/s4032/Jan%207.jpg\"
61
- style=\"clear: right; float: right; margin-bottom: 1em; margin-left: 1em;\"><img
62
- border=\"0\" data-original-height=\"4032\" data-original-width=\"3024\" height=\"320\"
63
- src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgBx9BU21qMDFnLxgHmnsl6TQVfb3QCwOXrC1zcXq7WH9gN8E0TcH3pTslRBG6O8mb5gcuF9JVtDlJ2je6dFcfyzKE4OD38-ftr66nBxddo892_NkyuevrrX65ndSbwmXMaLh3F5yiqU1QIj8JtA8FLkKOcHOEVwVafz0rzh7PejbFzp3XT25nQxc/s320/Jan%207.jpg\"
64
- width=\"240\" /></a></div><br /><div><div>I''ve decided to start writing here
65
- at <i>Quintessence of Dust</i>, after another long hiatus. Here are some of
66
- my reasons.</div><div><br /></div><div>1. I like to write, and I have things
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&amp;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>&nbsp;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&nbsp;<a href=\"https://fediscience.org/explore\" target=\"_blank\">good
90
- server at Mastodon</a>&nbsp;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.&nbsp;</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
@@ -23,28 +23,28 @@ http_interactions:
23
23
  Cache-Control:
24
24
  - public, max-age=0, must-revalidate
25
25
  Content-Length:
26
- - '6686'
26
+ - '2018'
27
27
  Content-Type:
28
28
  - application/json; charset=utf-8
29
29
  Date:
30
- - Sun, 18 Jun 2023 15:23:54 GMT
30
+ - Mon, 10 Jul 2023 21:04:51 GMT
31
31
  Etag:
32
- - '"w9llnwc692558"'
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/[slug]"
38
+ - "/api/posts/[[...params]]"
39
39
  X-Vercel-Cache:
40
40
  - MISS
41
41
  X-Vercel-Id:
42
- - fra1::iad1::22vn2-1687101834016-bcd59dbcc91c
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","uuid":"f3629c86-06e0-42c0-844a-266b03a91ef1","url":"https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html","title":"Ten
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,...","date_published":"2023-05-31T17:26:00Z","date_modified":"2023-05-31T17:29:40Z","date_indexed":"2023-06-16T11:31:55.22232+00:00","authors":[{"url":null,"name":"Roderic
56
- Page"}],"image":null,"content_html":"<p>As trailed on a Twitter thread last
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-05-31T17:26:00+00:00","version":"https://jsonfeed.org/version/1.1","backlog":true,"authors":null}}'
102
- recorded_at: Sun, 18 Jun 2023 15:23:54 GMT
103
- recorded_with: VCR 6.1.0
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