C# Text zu Google Bild?


18.02.2021, 08:40

(Ein Code wäre nett )

2 Antworten

Von Experte Dultus, UserMod Light bestätigt

Der erste Schritt sollte sein, den Vorgang im Browser zu analysieren: Wie läuft die Suche ab, wie ist die Ergebnisliste aufgebaut?

Wenn du eine ganz normale Bildersuche startest, siehst du in der URL, dass ein ziemlich langer Querystring zusammengebaut wurde. Die Parameter dienen größtenteils der Filterung.

Ich habe hier einmal die Such-URL für den Begriff flower auf die notwendigsten Filter reduziert:

https://www.google.de/search?q=flower&tbm=isch

Die weiteren Parameter kannst du selbst analysieren (bzw. ihre Bedeutung recherchieren).

Welches Markup als Suchergebnis zurückkommt, kannst du im Browser über Rechtsklick > Kontextmenü > Seitenquelltext anzeigen einsehen. Für dich wäre nun relevant, wie du an die Bildelemente kommst. Kenntnisse über HTML / das DOM sind bei dieser Analyse unbedingt erforderlich.

Sicher ist: Die Bilder werden jeweils als img-Element herausgerendert. Du brauchst allerdings ein genaueres Selektionsverfahren, welches bei jeder beliebigen Suche das erste Bildelement (aus der Suchergebnisliste) findet (oder bei keinem Ergebnis entsprechend reagiert).

Für die technische Umsetzung würde ich dir empfehlen, das HtmlAgilityPack zu nutzen. Mit dieser Bibliothek kannst du leicht Anfragen an eine Webseite schicken und das Dokument aus dem Response parsen. Methoden zur Filterung/Selektion unterstützt sie ebenso (bspw. XPath-Ausdrücke oder Linq).

Sobald du das erste Bildelement gefunden hast, wartet die nächste Hürde auf dich. Google gibt die Bilder Base64-enkodiert aus. Im src-Attribut steht also so etwas:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA...

Über das Format dieses data-URI Scheme kannst du hier mehr nachlesen.

Zum einen müssest du daraus den Mime-Type parsen und zum anderen den Base64-String. Für Beides reichen String-Funktionen vollkommen aus.

Danach kannst du das entsprechene ImageFormat bestimmen. Den Base64-String würde ich mit der Base64UrlEncoder-Klasse (oder HttpServerUtility.UrlTokenEncode) noch enkodieren.

Mithilfe der gewonnenen Daten kann man das Bild abschließend in einer Datei speichern:

var bytes = Convert.FromBase64String(base64String);

using (var stream = new MemoryStream(bytes, 0, bytes.Length))
{
  var image = Image.FromStream(stream, true);
  image.Save("some file path ...", format);
}

BitteHelfen346 
Fragesteller
 10.02.2021, 10:21

Danke, da ich aber sehr unwissend bin: Könntest du mir vielleicht den ganzen zusammengesetzten Code schicken? Danke

0
regex9  10.02.2021, 11:38
@BitteHelfen346

Vielleicht ist das nicht ganz eindeutig herübergekommen: Meine Antwort stellt nur eine grobe Vorgehensweise vor, der bezüglich der Umsetzung aber noch einiges an Analyse-/Arbeitsaufwand fehlt. Den werde ich nicht übernehmen.

0

Einfach deine String-Parameter in den Header des Links schreiben


BitteHelfen346 
Fragesteller
 07.02.2021, 08:56

Ich bin echt neu in sowas. Ich habe vor dass ich einen String habe mit einem Wort zb "Hallo" und dann soll mein c# programm auf Google gehen und dass anzeigen

Könntest du mir vllt einen Code schicken?

0