ZMediumToMarkdown 2.4.5 → 2.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ZMediumToMarkdown +10 -0
- data/lib/OpenAITranslator.rb +27 -0
- data/lib/Parsers/IframeParser.rb +2 -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/Parsers/IframeParser.rb
CHANGED
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
|