jekyll-artisync 0.6 → 0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94ea0a27d255bfe5841323b8a83b66d6c18831d7bfaa62623fa719f3d3015215
4
- data.tar.gz: '0308d5172ccd557f56fcb2ceeea5b31283a39263479f67748afc7f38f9691209'
3
+ metadata.gz: 3852b83cf7f0b161334e8dea66dc2b71800263857d2585923e02a680b2d6f9aa
4
+ data.tar.gz: 7ae6fe9c091748ab992931abb108c3db1d4f246f8a43aa886e67828352c2f761
5
5
  SHA512:
6
- metadata.gz: 2d89a70068a9df3e1236e8f7d93556bf002b05c71121650bc14067a8ecad0b78f3436e711c87325ca39b518c2758634b87f11544ef247712c49c92cb2b65d283
7
- data.tar.gz: 28e30cbcf1212dd0c9070eecf8a733c7a92e573b572e803ac9af80f7813e97474c6824c8bff7c18b5e71a28917c270d64688659de3e7616bdbb983e19c37dc6a
6
+ metadata.gz: 83e4b1e795cc438fd4383d8f414220bd47a757dbead917976594f44cf9f5cfef35c1cfba46dedab757e2cfbdea555e8e3487cfad4ddbdbc9df5be490ca8b9a03
7
+ data.tar.gz: 3018a75eebccfa292ad20469877cd17c3e37a57954db6fd8eaf0957c5ef1f29297dc2e2c0e8efb96651318c104f49d96c882170d166ad05f81e21d85f2165c1f
@@ -25,6 +25,10 @@ class AbstractSyncer
25
25
  raise MESSAGE % [__method__]
26
26
  end
27
27
 
28
+ def get_article_nodes
29
+ raise MESSAGE % [__method__]
30
+ end
31
+
28
32
  def gen_html
29
33
  raise MESSAGE % [__method__]
30
34
  end
@@ -0,0 +1,31 @@
1
+ require_relative 'per_node_syncer'
2
+ require 'nokogiri'
3
+
4
+
5
+ class MediumSyncer < PerNodeSyncer
6
+ def get_article_xpath
7
+ '//article/div/section/div/div'
8
+ end
9
+
10
+ # override
11
+ def get_article_nodes
12
+ page_html = self._fetch_html
13
+ article = Nokogiri::HTML(page_html).xpath(self.get_article_xpath)
14
+
15
+ # Medium embeds Author section, which is not needed for article
16
+ article.children[1..]
17
+ end
18
+
19
+ def _handle_node(node)
20
+ case node.name
21
+ when "figure"
22
+ img_nodes = node.css('img')
23
+ node = img_nodes[-1] if img_nodes
24
+ # to make sure image scales right
25
+ node.remove_attribute('width')
26
+ node.remove_attribute('height')
27
+ end
28
+ node.to_html
29
+ end
30
+
31
+ end
@@ -1,14 +1,30 @@
1
1
  require_relative 'abstract_syncer'
2
2
  require 'nokogiri'
3
3
 
4
+ module NodeAttrModule
5
+ ATTRS = ['class', 'id']
6
+ def NodeAttrModule.remove_common_attr(node)
7
+ ATTRS.each do |attr|
8
+ node.remove_attribute(attr) if node[attr]
9
+ end
10
+ end
11
+ end
12
+
4
13
 
5
14
  class PerNodeSyncer < AbstractSyncer
15
+ include NodeAttrModule
6
16
 
7
- def gen_html
17
+ def get_article_nodes
8
18
  page_html = self._fetch_html
9
19
  article = Nokogiri::HTML(page_html).xpath(self.get_article_xpath)
20
+ article.children
21
+ end
22
+
23
+ def gen_html
24
+ article_nodes = self.get_article_nodes
10
25
  content = []
11
- article.children.each do |node|
26
+ article_nodes.each do |node|
27
+ NodeAttrModule.remove_common_attr(node)
12
28
  content.append self._handle_node(node)
13
29
  end
14
30
 
@@ -1,9 +1,11 @@
1
1
  require_relative 'zhihu_syncer'
2
2
  require_relative 'weixin_syncer'
3
+ require_relative 'medium_syncer'
3
4
 
4
5
 
5
6
  ZHIHU_ZHUANLAN = 'zhuanlan.zhihu.com'
6
7
  WEIXIN = 'mp.weixin.qq.com'
8
+ MEDIUM = 'medium.com'
7
9
 
8
10
  class SyncerFactory
9
11
  def self.get_syncer(uri)
@@ -14,6 +16,8 @@ class SyncerFactory
14
16
  return ZhihuSyncer.new(uri)
15
17
  when WEIXIN
16
18
  return WeixinSyncer.new(uri)
19
+ when MEDIUM
20
+ return MediumSyncer.new(uri)
17
21
  else
18
22
  raise "Not supported website for host: #{host_name}"
19
23
  end
@@ -10,14 +10,13 @@ class ZhihuSyncer < PerNodeSyncer
10
10
  def _handle_node(node)
11
11
  case node.name
12
12
  when 'figure'
13
- img_node = node.children[1]
14
-
15
- img_url = img_node['data-actualsrc']
16
- img_url['_b.jpg'] = '_720w.jpg'
17
- img_url['/v2'] = "/80/v2"
18
-
19
- img_node['src'] = img_url
13
+ img_node = node.css('img')[-1]
14
+ if img_node
15
+ node = img_node
16
+ node['src'] = node['data-actualsrc']
17
+ end
20
18
  end
19
+
21
20
  node.to_html
22
21
  end
23
22
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-artisync
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.6'
4
+ version: '0.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Junhan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-30 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2020-06-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
13
27
  description: Take an article from a given site and display on current Jekyll page.
14
28
  email:
15
29
  - junhanoct@gmail.com
@@ -19,6 +33,7 @@ extra_rdoc_files: []
19
33
  files:
20
34
  - lib/jekyll-artisync.rb
21
35
  - lib/syncers/abstract_syncer.rb
36
+ - lib/syncers/medium_syncer.rb
22
37
  - lib/syncers/per_node_syncer.rb
23
38
  - lib/syncers/syncer_factory.rb
24
39
  - lib/syncers/weixin_syncer.rb