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 +4 -4
- data/lib/syncers/abstract_syncer.rb +4 -0
- data/lib/syncers/medium_syncer.rb +31 -0
- data/lib/syncers/per_node_syncer.rb +18 -2
- data/lib/syncers/syncer_factory.rb +4 -0
- data/lib/syncers/zhihu_syncer.rb +6 -7
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3852b83cf7f0b161334e8dea66dc2b71800263857d2585923e02a680b2d6f9aa
|
4
|
+
data.tar.gz: 7ae6fe9c091748ab992931abb108c3db1d4f246f8a43aa886e67828352c2f761
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83e4b1e795cc438fd4383d8f414220bd47a757dbead917976594f44cf9f5cfef35c1cfba46dedab757e2cfbdea555e8e3487cfad4ddbdbc9df5be490ca8b9a03
|
7
|
+
data.tar.gz: 3018a75eebccfa292ad20469877cd17c3e37a57954db6fd8eaf0957c5ef1f29297dc2e2c0e8efb96651318c104f49d96c882170d166ad05f81e21d85f2165c1f
|
@@ -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
|
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
|
-
|
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
|
data/lib/syncers/zhihu_syncer.rb
CHANGED
@@ -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.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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.
|
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-
|
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
|