jekyll-artisync 0.5 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jekyll-artisync.rb +1 -2
- data/lib/syncers/per_node_syncer.rb +18 -0
- data/lib/syncers/syncer_factory.rb +4 -0
- data/lib/syncers/weixin_syncer.rb +21 -0
- data/lib/syncers/zhihu_syncer.rb +2 -13
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94ea0a27d255bfe5841323b8a83b66d6c18831d7bfaa62623fa719f3d3015215
|
4
|
+
data.tar.gz: '0308d5172ccd557f56fcb2ceeea5b31283a39263479f67748afc7f38f9691209'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d89a70068a9df3e1236e8f7d93556bf002b05c71121650bc14067a8ecad0b78f3436e711c87325ca39b518c2758634b87f11544ef247712c49c92cb2b65d283
|
7
|
+
data.tar.gz: 28e30cbcf1212dd0c9070eecf8a733c7a92e573b572e803ac9af80f7813e97474c6824c8bff7c18b5e71a28917c270d64688659de3e7616bdbb983e19c37dc6a
|
data/lib/jekyll-artisync.rb
CHANGED
@@ -10,9 +10,8 @@ class ArticleSyncEmbed < Liquid::Tag
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def render(context)
|
13
|
-
url = @content.strip
|
13
|
+
url = Liquid::Template.parse(@content).render(context).strip
|
14
14
|
uri = URI(url)
|
15
|
-
page_host = uri.hostname
|
16
15
|
syncer = SyncerFactory.get_syncer(uri)
|
17
16
|
return syncer.gen_html
|
18
17
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'abstract_syncer'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
|
5
|
+
class PerNodeSyncer < AbstractSyncer
|
6
|
+
|
7
|
+
def gen_html
|
8
|
+
page_html = self._fetch_html
|
9
|
+
article = Nokogiri::HTML(page_html).xpath(self.get_article_xpath)
|
10
|
+
content = []
|
11
|
+
article.children.each do |node|
|
12
|
+
content.append self._handle_node(node)
|
13
|
+
end
|
14
|
+
|
15
|
+
content.join("\n")
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require_relative 'zhihu_syncer'
|
2
|
+
require_relative 'weixin_syncer'
|
2
3
|
|
3
4
|
|
4
5
|
ZHIHU_ZHUANLAN = 'zhuanlan.zhihu.com'
|
6
|
+
WEIXIN = 'mp.weixin.qq.com'
|
5
7
|
|
6
8
|
class SyncerFactory
|
7
9
|
def self.get_syncer(uri)
|
@@ -10,6 +12,8 @@ class SyncerFactory
|
|
10
12
|
case host_name
|
11
13
|
when ZHIHU_ZHUANLAN
|
12
14
|
return ZhihuSyncer.new(uri)
|
15
|
+
when WEIXIN
|
16
|
+
return WeixinSyncer.new(uri)
|
13
17
|
else
|
14
18
|
raise "Not supported website for host: #{host_name}"
|
15
19
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'per_node_syncer'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
|
5
|
+
class WeixinSyncer < PerNodeSyncer
|
6
|
+
def get_article_xpath
|
7
|
+
'//div[contains(@class, "rich_media_content") and contains(@id, "js_content")]'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _handle_node(node)
|
11
|
+
node.children.each do |child_node|
|
12
|
+
case child_node.name
|
13
|
+
when 'img'
|
14
|
+
child_node['src'] = child_node['data-src']
|
15
|
+
child_node['data-src'] = nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
node.to_html
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/syncers/zhihu_syncer.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'per_node_syncer'
|
2
2
|
require 'nokogiri'
|
3
3
|
|
4
4
|
|
5
|
-
class ZhihuSyncer <
|
5
|
+
class ZhihuSyncer < PerNodeSyncer
|
6
6
|
def get_article_xpath
|
7
7
|
'//div[contains(@class, "Post-RichText") and contains(@class, "ztext")]'
|
8
8
|
end
|
@@ -21,15 +21,4 @@ class ZhihuSyncer < AbstractSyncer
|
|
21
21
|
node.to_html
|
22
22
|
end
|
23
23
|
|
24
|
-
def gen_html
|
25
|
-
page_html = self._fetch_html
|
26
|
-
article = Nokogiri::HTML(page_html).xpath(self.get_article_xpath)
|
27
|
-
content = []
|
28
|
-
article.children.each do |node|
|
29
|
-
content.append self._handle_node(node)
|
30
|
-
end
|
31
|
-
|
32
|
-
content.join("\n")
|
33
|
-
end
|
34
|
-
|
35
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-artisync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.6'
|
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-
|
11
|
+
date: 2020-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Take an article from a given site and display on current Jekyll page.
|
14
14
|
email:
|
@@ -19,7 +19,9 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- lib/jekyll-artisync.rb
|
21
21
|
- lib/syncers/abstract_syncer.rb
|
22
|
+
- lib/syncers/per_node_syncer.rb
|
22
23
|
- lib/syncers/syncer_factory.rb
|
24
|
+
- lib/syncers/weixin_syncer.rb
|
23
25
|
- lib/syncers/zhihu_syncer.rb
|
24
26
|
homepage: https://github.com/junhan-z/jekyll-artisync
|
25
27
|
licenses:
|