Deepl.com - Automatisierte Übersetzung (Windows)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Deepl.com - Automatisierte Übersetzung (Windows)

Beitrag von HeX0R »

Hier noch eine lesbarere curl-Variante

Nun ist aber gut.

Code: Alles auswählen

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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Deepl.com - Automatisierte Übersetzung (Windows)

Beitrag von RSBasic »

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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Deepl.com - Automatisierte Übersetzung (Windows)

Beitrag von HeX0R »

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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Deepl.com - Automatisierte Übersetzung (Windows)

Beitrag von RSBasic »

Achso, stimmt. Das musste ich anfangs auch machen, aber leider beim Posten vergessen, als ich den Code fertig hatte.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Deepl.com - Automatisierte Übersetzung (Windows)

Beitrag von RSBasic »

Mit meiner eben veröffentlichten DLL-Datei ist es nun auch ohne PowerShell möglich: http://www.purebasic.fr/german/viewtopi ... 11&t=30663
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten