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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c04e31bc9f4ddb6f3249f206063afb7c65a03c13962c78e2fd08a82b6c67844
4
- data.tar.gz: 50a6858120b008a667d4dd4b70a0e440f3312a87be56ec811868eaba0d04c421
3
+ metadata.gz: 48ef166b5c284c3bc4cb549f5345ec9f49f068b9c83b896e1b49dacf9d09e08b
4
+ data.tar.gz: 8a958d36a18267120dc8dd8e45f1db02829d73173fef8ae19c8c2b20c82de217
5
5
  SHA512:
6
- metadata.gz: 4d9026a98314223cb513012dea8475c478098d313589481b1f4ecba2d632ef6d27da1995c4a746e9366d2d54c60feb6f794e102ec5eb1e48ef082a0d116a5483
7
- data.tar.gz: ef965a62eaca395d2e88f703a378b1ec63b7b2b5b4e5b05b7c7da1c178a44f4db0ce801aa16a85fcb1fc604fd398a993af0780e7210322bc7efe1f25c8b20616
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
@@ -85,6 +85,8 @@ class IframeParser < Parser
85
85
  lang = lang.downcase
86
86
  if isForJekyll and lang == "objective-c"
87
87
  lang = "objectivec"
88
+ elsif lang == "protocol buffer"
89
+ lang = "protobuf"
88
90
  end
89
91
  else
90
92
  viewRawURL = a['href']
@@ -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.5
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-08-23 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