ZMediumToMarkdown 2.4.6 → 2.4.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/bin/ZMediumToMarkdown +10 -0
- data/lib/OpenAITranslator.rb +27 -0
- data/lib/ZMediumFetcher.rb +21 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48ef166b5c284c3bc4cb549f5345ec9f49f068b9c83b896e1b49dacf9d09e08b
|
4
|
+
data.tar.gz: 8a958d36a18267120dc8dd8e45f1db02829d73173fef8ae19c8c2b20c82de217
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f4565807fa5235cfdd052d90650ceebda1fa6df3a668aeae972cf78c18b4c5cd284a18cc47915c23642307e80beadcb8ac69b7d9f980ae9d4154f677df88449
|
7
|
+
data.tar.gz: ae8c2b0b4acbf4f11ee7d7d0c7127e3a8e30e4c6114b3a6d510f06255358ceff700c690a0bad9bec163ed75ea9db17072cd1ce9e622f1e653438a4b4a2f1f646
|
data/bin/ZMediumToMarkdown
CHANGED
@@ -10,6 +10,8 @@ require "optparse"
|
|
10
10
|
|
11
11
|
$cookie_sid = nil
|
12
12
|
$cookie_uid = nil
|
13
|
+
$open_ai_translator_model = nil
|
14
|
+
$open_ai_translator_token = nil
|
13
15
|
|
14
16
|
class Main
|
15
17
|
def initialize
|
@@ -57,6 +59,14 @@ class Main
|
|
57
59
|
opts.on('-v', '--version', 'Print current ZMediumToMarkdown Version & Output Path') do
|
58
60
|
options[:v] = true
|
59
61
|
end
|
62
|
+
|
63
|
+
opts.on('-m', '--open_ai_translator_model MODEL', 'Open AI Model e.g. gpt-4o') do |model|
|
64
|
+
$open_ai_translator_model = model
|
65
|
+
end
|
66
|
+
|
67
|
+
opts.on('-t', '--open_ai_translator_token TOKEN', 'Open AI API Token') do |token|
|
68
|
+
$open_ai_translator_token = token
|
69
|
+
end
|
60
70
|
end.parse!
|
61
71
|
|
62
72
|
#
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "openai"
|
2
|
+
|
3
|
+
class OpenAITranslator
|
4
|
+
attr_accessor :prompt, :model, :client
|
5
|
+
|
6
|
+
def initialize(model, token, prompt)
|
7
|
+
@client = OpenAI::Client.new(access_token: token)
|
8
|
+
@prompt = prompt
|
9
|
+
@model = model
|
10
|
+
end
|
11
|
+
|
12
|
+
def translate(text)
|
13
|
+
response = client.chat(
|
14
|
+
parameters: {
|
15
|
+
model: model,
|
16
|
+
messages: [
|
17
|
+
{ role: "system", content: "You are a translation expert." },
|
18
|
+
{ role: "user", content: prompt },
|
19
|
+
{ role: "user", content: text}
|
20
|
+
],
|
21
|
+
temperature: 0.7,
|
22
|
+
}
|
23
|
+
)
|
24
|
+
|
25
|
+
response.dig("choices", 0, "message", "content")
|
26
|
+
end
|
27
|
+
end
|
data/lib/ZMediumFetcher.rb
CHANGED
@@ -21,6 +21,7 @@ require "Parsers/MIXTAPEEMBEDParser"
|
|
21
21
|
require "Parsers/PQParser"
|
22
22
|
require "Parsers/CodeBlockParser"
|
23
23
|
|
24
|
+
require "OpenAITranslator"
|
24
25
|
require "PathPolicy"
|
25
26
|
require "Request"
|
26
27
|
require "Post"
|
@@ -169,9 +170,19 @@ class ZMediumFetcher
|
|
169
170
|
oliIndex = 0
|
170
171
|
previousParagraph = nil
|
171
172
|
preTypeParagraphs = []
|
173
|
+
|
174
|
+
translator = nil
|
175
|
+
if !$open_ai_translator_token.nil? && $open_ai_translator_token != "" && !$open_ai_translator_model.nil? && $open_ai_translator_model != "" && File.exist?("./openAITranslatorPrompt.md")
|
176
|
+
prompt = File.read("./openAITranslatorPrompt.md")
|
177
|
+
if !prompt.nil? && prompt != ""
|
178
|
+
translator = OpenAITranslator.new($open_ai_translator_model, $open_ai_translator_token, prompt)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
172
182
|
sourceParagraphs.each do |sourcParagraph|
|
173
183
|
return if (!sourcParagraph || !postID)
|
174
184
|
paragraph = Paragraph.new(sourcParagraph, postID)
|
185
|
+
|
175
186
|
if OLIParser.isOLI(paragraph)
|
176
187
|
oliIndex += 1
|
177
188
|
paragraph.oliIndex = oliIndex
|
@@ -290,6 +301,16 @@ class ZMediumFetcher
|
|
290
301
|
|
291
302
|
result = startParser.parse(paragraph)
|
292
303
|
|
304
|
+
if !translator.nil? && !paragraph.is_a?(IMGParser) && !result.nil? && result != ""
|
305
|
+
begin
|
306
|
+
result = translator.translate(result)
|
307
|
+
progress.message = "Translation Post..."
|
308
|
+
progress.printLog()
|
309
|
+
rescue => e
|
310
|
+
puts "Translator Error: #{e.message}"
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
293
314
|
file.puts(result)
|
294
315
|
|
295
316
|
index += 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ZMediumToMarkdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ZhgChgLi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -52,6 +52,26 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.3.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ruby-openai
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '7.3'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 7.3.1
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '7.3'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 7.3.1
|
55
75
|
description: ZMediumToMarkdown lets you download Medium post and convert it to markdown
|
56
76
|
format easily.
|
57
77
|
email:
|
@@ -65,6 +85,7 @@ files:
|
|
65
85
|
- lib/Helper.rb
|
66
86
|
- lib/ImageDownloader.rb
|
67
87
|
- lib/Models/Paragraph.rb
|
88
|
+
- lib/OpenAITranslator.rb
|
68
89
|
- lib/Parsers/BQParser.rb
|
69
90
|
- lib/Parsers/CodeBlockParser.rb
|
70
91
|
- lib/Parsers/FallbackParser.rb
|