jekyll-artisync 0.6 → 0.7

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