Google Übersetzer

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Google Übersetzer

Beitrag von Velindos »

Hallo Leute,

mit dem Senden von "https://translate.google.at/?hl=de#de/e ... Cbersetzen!" kann man von Google eine Übersetzung anfordern.

Manko dieser Methode ist, dass Sie auf die Google Page umschaltet und somit ich von meiner aktuellen Page getrennt werde. Nun möchte ich den markierten Text lediglich Übersetzt haben und nicht auf die Google Page gehen.

Habe nach diesen Problem schon gegoogelt aber bin nicht so richtig weitergekommen. Das markieren und senden ist kein Problem aus dem Webgadget heraus, aber wie erhalte ich den Übersetzen Text, damit ich Ihn einfügen kann?

Vielleicht hat jemand mit diesem Problem schon zu tun gehabt und kann mir helfen!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Google Übersetzer

Beitrag von RSBasic »

Es gab mal direkte URLs mit Parametern um beliebige Wörter automatisiert zu übersetzen. Man hat ein XML-String bekommen, den man auswerten konnte. Aber das hat Google irgendwann festgestellt und hat dafür gesorgt, dass man das nicht mehr so einfach machen kann. Google bietet selbst den Entwicklern eine API-Schnittstelle an, aber ist leider kostenpflichtig.
Du kannst allerdings mit WebGadget die Übersetzungsseite mit Parametern laden. Nur das Problem ist, das du wahrscheinlich hast, dass du nur den Quellcode der zuerst geladenen Seite bekommst. Die Übersetzung erfolgt über Ajax und wird nachträglich in das Eingabefeld eingefügt.
Um an aktuellen und vollständigen Quellcode zu kommen, musst du nach dem Laden folgendes ausführen:

Code: Alles auswählen

Procedure.s WebGadget_PageHtml(Gadget)
  Protected Result$ = ""
  Protected Document.IHTMLDocument3
  Protected Root.IHTMLElement
  Protected bstr_html
  
  Document.IHTMLDocument3 = WebGadget_Document(Gadget, ?IID_IHTMLDocument3)
  If Document
    If Document\get_documentElement(@Root.IHTMLElement) = #S_OK
      If Root\get_outerHTML(@bstr_html) = #S_OK And bstr_html
        Result$ = PeekS(bstr_html, -1, #PB_Unicode)
        SysFreeString_(bstr_html)
      EndIf
      
      Root\Release()
    EndIf                       
    Document\Release()
  EndIf         
  
  ProcedureReturn Result$
EndProcedure
Dann hast du den vollständigen Quellcode. Anschließend musst du nur filtern und das Div-Element finden und das übersetzte Wort ermitteln. Du kannst das entweder mit RegEx machen oder manuell mit FindString() und Mid().
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Google Übersetzer

Beitrag von udg »

Kannst du mal ein einfaches Beispiel posten? Ich habe evtl eine Idee, verstehe aber vielleicht deine Frage falsch.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Google Übersetzer

Beitrag von RSBasic »

Nachtrag: Hier noch ein vollständiges Beispiel, um den vollständigen Quellcode zu ermitteln, damit man das übersetzte Wort problemlos auslesen kann. In meinem Beispiel kann man auch gut sehen, dass das Ermitteln mit #PB_Web_HtmlCode überhaupt nicht funktioniert, wenn Ajax verwendet wird:

Code: Alles auswählen

EnableExplicit

Define CurrentDOM$

Procedure WebGadget_Document(Gadget, *IID)
  Protected Document = 0
  Protected Browser.IWebBrowser2
  Protected DocumentDispatch.IDispatch
  
  Browser.IWebBrowser2 = GetWindowLong_(GadgetID(Gadget), #GWL_USERDATA)
  If Browser
    If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK And DocumentDispatch
      DocumentDispatch\QueryInterface(*IID, @Document)
      DocumentDispatch\Release()
    EndIf
  EndIf     
  
  ProcedureReturn Document
EndProcedure

Procedure.s WebGadget_PageHtml(Gadget)
  Protected Result$ = ""
  Protected Document.IHTMLDocument3
  Protected Root.IHTMLElement
  Protected bstr_html
  
  Document.IHTMLDocument3 = WebGadget_Document(Gadget, ?IID_IHTMLDocument3)
  If Document
    If Document\get_documentElement(@Root.IHTMLElement) = #S_OK
      If Root\get_outerHTML(@bstr_html) = #S_OK And bstr_html
        Result$ = PeekS(bstr_html, -1, #PB_Unicode)
        SysFreeString_(bstr_html)
      EndIf
      
      Root\Release()
    EndIf                       
    Document\Release()
  EndIf         
  
  ProcedureReturn Result$
EndProcedure

If OpenWindow(0, 0, 0, 1024, 768, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  WebGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, "https://translate.google.at/?hl=de#de/en/Das%20will%20ich%20%C3%9Cbersetzen!")
  ButtonGadget(2, WindowWidth(0)-210, WindowHeight(0)-30, 200, 20, "Mit WebGadget_PageHtml ermitteln", 0)
  ButtonGadget(3, WindowWidth(0)-420, WindowHeight(0)-30, 200, 20, "Mit #PB_Web_HtmlCode ermitteln", 0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 2
            CurrentDOM$ = WebGadget_PageHtml(1)
            If FindString(CurrentDOM$, "I will") > 0
              Debug "Gefunden"
            Else
              Debug "Nicht gefunden"
            EndIf
            ;Debug CurrentDOM$
          Case 3
            CurrentDOM$ = GetGadgetItemText(1, #PB_Web_HtmlCode)
            If FindString(CurrentDOM$, "I will") > 0
              Debug "Gefunden"
            Else
              Debug "Nicht gefunden"
            EndIf
            ;Debug CurrentDOM$
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

DataSection
  IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
  Data.l $332C4425
  Data.w $26CB, $11D0       
  Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
  IID_IHTMLDocument3: ; {3050F485-98B5-11CF-BB82-00AA00BDCE0B}
  Data.l $3050F485
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  IID_NULL: ; {00000000-0000-0000-0000-000000000000}
  Data.l $00000000
  Data.w $0000, $0000
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
JMaker
Beiträge: 102
Registriert: 19.01.2015 10:18

Re: Google Übersetzer

Beitrag von JMaker »

Tolles Beispiel :allright: Funzt sehr gut, ist das ein PB Bug bez. #PB_Web_HtmlCode? Und was ist Ajax? Kannst du mir das erklären? Kann damit nichts anfangen und weiss nicht was du damit meinst... Gegoogelt habe ich schon aber den Wiki Artikel verstehe ich leider nicht. :(
Ich benutze Pure Basic 5.30 auf Microsoft Windows 7.
Gruß
JM
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Google Übersetzer

Beitrag von RSBasic »

Ajax wird verwendet, um Informationen nachträglich serverseitig zu laden. Normalerweise gibt es nur diese Reihenfolge: Server-Verarbeitung (PHP, ASP, ASP.NET o.ä.) Bild Client-Verarbeitung (Browser (HTML, CSS, JS o.ä.)).
Wenn man aber gerne nach dem Laden der Seite erneut auf den Server zugreifen möchte, kann man Ajax verwenden, um asynchron im Hintergrund bestimmte Daten zu holen oder was in die Datenbank zu speichern, ohne die komplette Seite neuladen zu müssen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
JMaker
Beiträge: 102
Registriert: 19.01.2015 10:18

Re: Google Übersetzer

Beitrag von JMaker »

Danke du bist der beste :praise:
Ich benutze Pure Basic 5.30 auf Microsoft Windows 7.
Gruß
JM
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Google Übersetzer

Beitrag von udg »

ich hab seine Frage leider nicht so recht verstanden. Wenn er auf seiner Seite bleiben will, kann er den Google Übersetzer doch auch per iframe inkluden.
Oder soll markierter Text kopiert und übernommen werden?

Nuja, mal sehen.
grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Google Übersetzer

Beitrag von Velindos »

Hallo Leute!
Hallo RSBasic!

War gerade Einkaufen, daher hat´s länger gedauert!

RSBasic, DANKE! Für deine Einführung und dein Beispiel, das funzt!

@udg
"Wenn er auf seiner Seite bleiben will, kann er den Google Übersetzer doch auch per iframe inkluden."
Also das mit der iframe, da habe ich keine Ahnung wie man das machen soll!

Zu der beabsichtigten Lösung wäre zu Sagen, ich markiere den Text auf einer Page und mache per Buttondruck oder PopUp einen Translate!

Zuerst kopiere ich das markierte und anschliessend füge ich das Translate auf dessen Platz ein
(Hilft bei schwierigen Übersetzungen etc.)

Anschliessend notiere ich mir das in meinen Velindos.

Das machte ich bis dato per Google Translator, nur war das Umschalten sehr mühsam und nun werde ich Versuchen das ganze mit dem Beispiel von RSBasic umzusetzten!

Nochmals besten Dank!!!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Google Übersetzer

Beitrag von Kiffi »

<Halb-OT>

zum Übersetzen verwende ich gerne das Freeware-Tool QTranslate (https://quest-app.appspot.com/home)

Text markieren und zwei Mal <Strg> drücken und schon erscheint die Übersetzung.

Unterstützt viele Sprachen und mehrere Übersetzungs-Dienste.

</Halb-OT>
a²+b²=mc²
Antworten