PureBoard
http://forums.purebasic.com/german/

Deepl.com - Automatisierte Übersetzung (Windows)
http://forums.purebasic.com/german/viewtopic.php?f=8&t=30448
Seite 2 von 2

Autor:  HeX0R [ 06.01.2018 13:47 ]
Betreff des Beitrags:  Re: Deepl.com - Automatisierte Übersetzung (Windows)

Hier noch eine lesbarere curl-Variante

Nun ist aber gut.
Code:
Structure _JSON_OBJ4_
   num_symbols.i
   totalLogProb.i
   score.i
   postprocessed_sentence.s
EndStructure

Structure _JSON_OBJ3_
   timeAfterPreprocessing.i
   timeReceivedFromEndpoint.i
   List beams._JSON_OBJ4_()
   total_time_endpoint.i
   timeSentToEndpoint.i
EndStructure

Structure _JSON_OBJ2_
   source_lang.s
   target_lang.s
   List translations._JSON_OBJ3_()
   ource_lang_is_confident.i
EndStructure

Structure _JSON_OBJ_
   jsonrpc.s
   id.i
   result._JSON_OBJ2_
EndStructure


Structure _JSON_SEND4_
   List user_preferred_langs.s()
   source_lang_user_selected.s
   target_lang.s
EndStructure

Structure _JSON_SEND3_
   kind.s
   raw_en_sentence.s
EndStructure

Structure _JSON_SEND2_
   List jobs._JSON_SEND3_()
   lang._JSON_SEND4_
   priority.i
EndStructure

Structure _JSON_SEND_
   jsonprc.s
   method.s
   params._JSON_SEND2_
   id.i
EndStructure

Procedure.s Translate(Sentence$, FromLang$, ToLang$)
   Protected Program, s.s, Result.s
   Protected CurlOptions.s
   Protected R._JSON_OBJ_, SE._JSON_SEND_
   
   Sentence$   = ReplaceString(Sentence$, #LF$, #ESC$)

   AddElement(SE\params\jobs())
   SE\jsonprc                               = "2.0"
   SE\method                                = "LMT_handle_jobs"
   SE\Params\jobs()\kind                    = "default"
   SE\params\jobs()\raw_en_sentence         = Sentence$
   SE\params\lang\source_lang_user_selected = FromLang$
   SE\params\lang\target_lang               = ToLang$
   SE\params\priority                       = -1
   SE\id                                    = 15
   AddElement(SE\params\lang\user_preferred_langs()) : SE\params\lang\user_preferred_langs() = "DE"
   AddElement(SE\params\lang\user_preferred_langs()) : SE\params\lang\user_preferred_langs() = "EN"
   
   If CreateJSON(0)
    InsertJSONStructure(JSONValue(0), @SE, _JSON_SEND_)
    CurlOptions = ComposeJSON(0)
    CurlOptions = ReplaceString(CurlOptions, #DQUOTE$, "\" + #DQUOTE$)
    FreeJSON(0)
   EndIf

   Program = RunProgram(GetPathPart(ProgramFilename()) + "curl.exe", "-X POST --insecure -ss -d " + #DQUOTE$ + CurlOptions + #DQUOTE$ + " https://www.deepl.com/jsonrpc", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
   If Program
      While ProgramRunning(Program)
         If AvailableProgramOutput(Program)
            s = ReadProgramString(Program)
            If ParseJSON(0, s)
               ExtractJSONStructure(JSONValue(0), @R, _JSON_OBJ_)
               FreeJSON(0)
               If FirstElement(R\result\translations()) And FirstElement(R\result\translations()\beams())
                  Result = R\result\translations()\beams()\postprocessed_sentence
               EndIf
            EndIf
            Break
         EndIf
      Wend
      CloseProgram(Program)
   EndIf
   
   Result = ReplaceString(Result, #ESC$, #LF$)
   
   
   ProcedureReturn Result
EndProcedure

CompilerIf #PB_Compiler_IsMainFile
   Debug Translate("pretty world", "EN", "DE")
CompilerEndIf



@tft:
Mit dieser "Fehlerbeschreibung" kann dir sicherlich niemand helfen.

Eine Idee hätte ich:
Solange Du den Source nicht gespeichert hast (weil du es ja nur testen wolltest), wird PB die exe im TEMP-Verzeichnis anlegen und dort natürlich die curl.exe nicht finden.

Autor:  RSBasic [ 06.01.2018 18:09 ]
Betreff des Beitrags:  Re: Deepl.com - Automatisierte Übersetzung (Windows)

Wenn du die PowerShell-Version verwenden möchtest, dann musst du folgendes machen:
  1. Erstelle eine neue Datei im ps1-Format. Z.B. test.ps1
  2. Kopiere den ersten Code und füge diesen in die von dir erstellte ps1-Datei ein.
  3. Kopiere den zweiten Code und füge diesen in den PB-Editor ein.
  4. Die Zeichenkette "PSFile$" musst du anpassen. Füge dort den Pfad zur ps1-Datei ein.

Dann sollte es schon funktonieren. Vorausgesetzt deine Firewall lässt die Internetverbindung zu.
Da du Windows 10 hast, sollte PowerShell bei dir vorinstalliert sein.

Wenn du die curl-Variante verwenden möchtest, musst du nur das curl-Programm herunterladen und den Pfad zum curl-Programm in die Zeichenkette "Curl$" einfügen.

Autor:  HeX0R [ 06.01.2018 20:42 ]
Betreff des Beitrags:  Re: Deepl.com - Automatisierte Übersetzung (Windows)

Für powershell ist das aber nicht so trivial.
Anfangs ging bei mir auch nichts, weil Windows alle powershell scripte erst mal auf "restricted" gestellt hatte.
Ich musste da erst rumfummeln, bevor es gezuckt hatte.

Siehe z.B. hier:
https://docs.microsoft.com/en-us/powers ... rshell-5.1

Autor:  RSBasic [ 06.01.2018 20:47 ]
Betreff des Beitrags:  Re: Deepl.com - Automatisierte Übersetzung (Windows)

Achso, stimmt. Das musste ich anfangs auch machen, aber leider beim Posten vergessen, als ich den Code fertig hatte.

Autor:  RSBasic [ 03.03.2018 22:55 ]
Betreff des Beitrags:  Re: Deepl.com - Automatisierte Übersetzung (Windows)

Mit meiner eben veröffentlichten DLL-Datei ist es nun auch ohne PowerShell möglich: viewtopic.php?f=11&t=30663

Seite 2 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/