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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32fa0028f4cca13d96ebf0ce8b152c422f38e9f97851d4b99f625d2d02929f7a
4
- data.tar.gz: fe75a02946cf74b86ad8afd0b568c319642321d5bc965ba86e64e2e4ec6a4fe1
3
+ metadata.gz: 48ef166b5c284c3bc4cb549f5345ec9f49f068b9c83b896e1b49dacf9d09e08b
4
+ data.tar.gz: 8a958d36a18267120dc8dd8e45f1db02829d73173fef8ae19c8c2b20c82de217
5
5
  SHA512:
6
- metadata.gz: b895e8f86088717e990f80cd0fb494320f8a2886083c9d0dd10f2dc459b711c39ffde5a5da330b516a53b50f90d6d08359075f013942d2459b2db7ec67f75355
7
- data.tar.gz: 43015c53c0057e08c6245274304662233261516890e5eefcceff7fc5fa733765d31e22e8a3c0747432866cf6872de574d69661a66e83626de007c2bbb071d861
6
+ metadata.gz: 1f4565807fa5235cfdd052d90650ceebda1fa6df3a668aeae972cf78c18b4c5cd284a18cc47915c23642307e80beadcb8ac69b7d9f980ae9d4154f677df88449
7
+ data.tar.gz: ae8c2b0b4acbf4f11ee7d7d0c7127e3a8e30e4c6114b3a6d510f06255358ceff700c690a0bad9bec163ed75ea9db17072cd1ce9e622f1e653438a4b4a2f1f646
@@ -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
@@ -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.6
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: 2024-10-30 00:00:00.000000000 Z
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