HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java

BodyLAB

Bekanntes Mitglied
Guten Tag zusammen,

ich hab ein paar Fragen die mich gerade beschäftigen.

Was ich sehr gerne machen möchte ist nach einem Wort über ein Java Programm suchen per google zum Beispiel.
Hierzu habe ich das hier gefunden:

Hört sich gar nicht so schlecht an. Würde das auch mit java.net.URL und java.net.URLConnection Funktionieren?
Sobald ich erfolgreich suchen kann würde ich sehr gerne ein paar Strings die Gefunden wurden speichern und zwar am liebsten so etwas:
Unbenannt.png
Hier Rot eingerahmt! Also ich möchte dann wenn dort ein Startdatum und Enddatum steht diese Speichern.
Ist so etwas möglich und hat man überhaupt zugriff auf diese (ich weiß nicht wie so eine Ansicht heißt) Google Kurzinfo-Ansicht?

Dann hätte ich noch eine Frage gibt es eine Möglichkeit Hyperlinks zu erkennen?
Wieso? -> Weil man damit wenn es keine Google Kurzinfo-Ansicht existiert auf den ersten Link (oft ja Wikipedia bei mir zumindest hehe) gehen und dort dann die Webseite absuchen kann.
Gibt es vielleicht eine Möglichkeit sich dann alle Hyperlinks anzeigen zu lassen?

Bitte habt Verständnis ich hab davon NULL Plan 😟
 

mihe7

Top Contributor
Würde das auch mit java.net.URL und java.net.URLConnection Funktionieren?
Ja, REST APIs laufen über HTTP. Tatsächlich gibts von Google auch eine Java Library, die das bereits übernimmt.

(ich weiß nicht wie so eine Ansicht heißt)
Das Knowledge Panel.

Ist so etwas möglich und hat man überhaupt zugriff auf diese
Das habe ich nicht auf Anhieb in Erfahrung bringen können. Vermutlich schon.

Die Frage wäre auch, ob es um Wikipedia-Einträge geht. Die gibts auch strukturiert und man kann derlei Daten gezielt abgreifen.

Nachtrag:

Dann hätte ich noch eine Frage gibt es eine Möglichkeit Hyperlinks zu erkennen?
Natürlich. In HTML sind Links einfach a-Tags. Klick mal in Firefox oder Chrome mit der rechten Mauste auf einen Link und rufe "Untersuchen" oder "Inspect" im Menü auf, dann siehst Du, wie das im Quelltext aussieht. Und den kannst Du natürlich auslesen. Auch hierfür gibts schöne Möglichkeiten wie z. B. JSoup.
 

BodyLAB

Bekanntes Mitglied
Ja, REST APIs laufen über HTTP. Tatsächlich gibts von Google auch eine Java Library, die das bereits übernimmt.
Ich würde gerne in einem gewöhnten Umfeld bleiben also Java nur finde ich keine Library die mir eine solche Suche ermöglichen würde. Zur Not müsste ich das eben von Hand bauen 🙃

So heißt es also Danke.

Die Frage wäre auch, ob es um Wikipedia-Einträge geht. Die gibts auch strukturiert und man kann derlei Daten gezielt abgreifen.
Ja auch :) Wäre super wenn du verraten würdest wie man das macht 🤩
 

BodyLAB

Bekanntes Mitglied
Der Stackoverflow Artikel beinhaltet ja schon alles 😊

Doch es ergeben sich mir noch ein paar Fragen dazu. Also erst einmal scheint man mit dieser main Methode genau das machen zu können was ich möchte und zwar eine Google Suche.
Java:
public static void main(String[] args) throws Exception {
    String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
    String search = "stackoverflow";
    String charset = "UTF-8";
    
    URL url = new URL(google + URLEncoder.encode(search, charset));
    Reader reader = new InputStreamReader(url.openStream(), charset);
    GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
    
    // Show title and URL of 1st result.
    System.out.println(results.getResponseData().getResults().get(0).getTitle());
    System.out.println(results.getResponseData().getResults().get(0).getUrl());
}

Dort hätte ich gleich zwei Fragen:
  1. Der String google im Code woher kommt diese http Adresse?
  2. Das Gson Objekt kommt aus der github Quelle, dort wird leider nur Beschrieben wie man es bei Maven und Gradle einbindet. Ich nutze noch Eclipse gibt es eine Anleitung wie man solche Programme/Bibliotheken/Frmaeworks in sein Projekt aufnehmen kann unter Eclipse?
Als letztes scheint es so das wir nur noch diese Klasse benötigen:
Java:
public class GoogleResults {

    private ResponseData responseData;
    public ResponseData getResponseData() { return responseData; }
    public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
    public String toString() { return "ResponseData[" + responseData + "]"; }

    static class ResponseData {
        private List<Result> results;
        public List<Result> getResults() { return results; }
        public void setResults(List<Result> results) { this.results = results; }
        public String toString() { return "Results[" + results + "]"; }
    }

    static class Result {
        private String url;
        private String title;
        public String getUrl() { return url; }
        public String getTitle() { return title; }
        public void setUrl(String url) { this.url = url; }
        public void setTitle(String title) { this.title = title; }
        public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
    }

}

Das sollte dann so funktionieren oder irre ich mich? Falls Ja muss ich mir später anschauen was man dabei raus bekommt und ob man die Anker Elemente erkennt um diese zu Speichern :)

Wäre nett wenn ich noch eine Antwort bekomme 😇
 

BodyLAB

Bekanntes Mitglied
Heute läuft das via https://developers.google.com/custom-search/v1/overview und dort findest Du auch die o. g. Java libraries.
Schlecht!

Gibt es eine Möglichkeit das irgendwie anders zu machen? Könnte man das ganze auch mit JavaScript erstellen? Dann erzeugt man z. B. JSON Dokumente und ließt diese dann ein? Nur wüsste ich leider nicht wie ich mit JavaScript über google suchen könnte :-(

@mihe7 oder gibt es noch eine ganz andere Möglichkeit? Jetzt weiß ich gerade nicht weiter o_O


Man könnte doch auch den Query nutzen:

Das ganze dann über java.net.URL und java.net.URLConnection abwickeln oder? Nur weiß ich nicht was ich dann zurück bekomme und ob ich damit auch weiter Surfen kann auf Wikipedia etc. :D Außerdem frage ich mich ob so etwas überhaupt "erlaubt" ist da diese Engines ja alle Geld kosten ab einem gewissen Traffic :D Ich verstehe ja auch wenn man dann 1000 Sachen sucht das zu lasten von google ist eben auch nicht ganz die Feine Art oder ?
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Was ist schlecht? Die Lib? Du kannst das alles auch ohne die Google Library machen. Natürlich geht auch JavaScript. Das sind alles einfach HTTP-Aufrufe und als Antwort bekommst Du JSON Text (ggf. kann man auch XML anfordern, da müsste man einen Blick in die Doku werfen).

Was die API selbst betrifft: die kommt von Google, da kannst Du nix dran ändern. Auch via HTML dürfte das heute nicht mehr ohne weiteres machbar sein. Die Style-Klassen etc. sind kodiert und ob die Kodierung immer die gleiche ist und stabil bleibt...
 

BodyLAB

Bekanntes Mitglied
Was ist schlecht?
Es gehen mit der API nur 100 suche am Tag Kostenfrei :D Das ist schlecht ^.^ (sry habs vergessen dazu zu schreiben)

Du hast oben ja auch das hier erwähnt https://jsoup.org/
Vielleicht sollte ich mir das genauer anschauen.

Am liebsten wäre es mir wohl wenn ich es selbst versuche zu mache. Nicht das man dann noch in eine Kostenfall rein rutscht :D
Nur weiß ich leider nicht wie ich dabei vorgehen muss deswegen dachte ich ja auch an eine Libary.

Noch eine Frage was meinst du mit css sind kodiert?
 

mihe7

Top Contributor
Noch eine Frage was meinst du mit css sind kodiert?
Such mal was in Google, dann klickst Du mit der rechten Maustaste in das Knowledge Panel und rufst im Kontextmenü (je nach Browser) den Punkt "Untersuchen" oder "Inspect" auf. Da findest Du dann so lustige Dinge wie:

HTML:
<div class="I6TXqe"><div class="osrp-blk" id="_dGdNY_O4LvCpxc8Px_ui2Ao_92">

Nicht nur die CSS-Klassen sind Kauderwelsch, vermutlich genau aus dem Grund, dass man den Spaß nicht einfach auslesen kann sondern die API verwenden muss. Das müsstest Du Dir aber ansehen; es könnte z. B. sein, dass das bei jeder Abfrage oder in zwei Browsern/Rechnern/externen IP-Adressen etc. zu unterschiedlichen Werten führt

Wenn Du Dir den Code auf der Seite hier ansiehst, findest Du dagegen etwas wie
HTML:
<div class="message-inner">
So etwas lässt sich dann leicht finden.
 

KonradN

Top Contributor
Wenn es in erster Linie um Wikipedia geht, dann ist evtl. die API von Wikipedia ja auch ein guter Startpunkt. Das nur mal so in den Raum gestellt.
 

mihe7

Top Contributor

BodyLAB

Bekanntes Mitglied
Wenn es in erster Linie um Wikipedia geht, dann ist evtl. die API von Wikipedia ja auch ein guter Startpunkt. Das nur mal so in den Raum gestellt.
Wikipedia hat eine API für java? Ich lerne ja heute richtig viel dazu :)

Bei jsoup scheint es wohl auch ein Problem zu geben nach 500 Suchen wird man wohl mehr oder weniger gefandet und gesperrt :D

Nochmal zurück wenn ich es mit java.net.URL und java.net.URLConnection versuche das klappt dann wohl auch nicht :D kam jetzt ganz durcheinander
Was ich meine ist wie hier:

Nur weiß ich nicht wie dann das result ausschaut und ob man dann eben auch erkennen würde was ein Anker ist und was nicht etc. (noch nie damit gearbeitet).

Wenn alle Stricke reißen lass ich das mit dem Suchen erst einmal weg und würde nach dieser Wikipedia API schauen :) Das würde sicherlich fürs erste reichen :) Wenn es dann halbwegs läuft irgendwann 2060 dann kann man ja Geld in die Hand nehmen und es über eine Google Search Engine laufen lassen :D haha
 

mihe7

Top Contributor
Du musst Dich erstmal davon lösen, dass das irgendwas mit irgendeiner Programmiersprache zu tun hätte.

Google betreibt einen Webserver (gut, vielleicht auch ein paar mehr :)) und der nimmt HTTP-Anfragen entgegen und antwortet darauf. Womit Du diese Anfragen stellst, ist dem Webserver völlig egal.

Es spielt also keine Rolle, ob Du per java.net.URL, JSoup, JavaScript, Python oder sonstwie die Daten abrufst: es ist immer einer HTTP-Anfrage, die vom Google Server beantwortet wird und Google hat das natürlich die Hand drauf. Die Antworten können sich je nach URL unterscheiden: der normale Seitenaufruf führt zu einer Antwort in HTML, die vom Browser dargestellt wird, die Anfragen an die REST-Endpoints (also die URLs, die in der API-Dokumentation genannt sind), führen eben z. B. zu JSON als Antwort.
 

mihe7

Top Contributor
Ganz vergessen: jetzt hast Du also eine Antwort in einem bestimmten Format erhalten und die musst Du ja irgendwie verarbeiten. Da kommen dann so Dinge wie JSON-Libraries ins Spiel oder JSoup zum Verarbeiten von HTML-Seiten.
 

BodyLAB

Bekanntes Mitglied
Es spielt also keine Rolle, ob Du per java.net.URL, JSoup, JavaScript, Python oder sonstwie die Daten abrufst: es ist immer einer HTTP-Anfrage, die vom Google Server beantwortet wird und Google hat das natürlich die Hand drauf. Die Antworten können sich je nach URL unterscheiden: der normale Seitenaufruf führt zu einer Antwort in HTML, die vom Browser dargestellt wird, die Anfragen an die REST-Endpoints (also die URLs, die in der API-Dokumentation genannt sind), führen eben z. B. zu JSON als Antwort.
Achso und daran erkennt google dann auch relativ leicht wer was mit der Suchmaschine treibt und kann eben dann die IPs oder ähnliches sperren ;-)

Danke
 

BodyLAB

Bekanntes Mitglied
Meinst du diese hier?

Ich finde nur nicht so ganz was ich damit tun kann und wie :D
____
Das ganze mit dem REST bzw. net.URL schaue ich mir dennoch an sobald ich Zeit dafür finde ;-) Wikipedia würde erst einmal vollkommen ausreichen für mein Versuch :)
 

BodyLAB

Bekanntes Mitglied
Jup die Seite habe ich nun auch gefunden.
Nur bin ich zu doof zu verstehen was die von mir wollen!

Also mal wieder gegooglet und gefunden das hier:

Dann läuft das ganze in JS (keine Ahnung ob es so überhaupt läuft :D)! Leider habe ich NULL Erfahrungen mit diesen ganzen API Dingen :-(
Kann es gerne mal mit JS versuchen doch das geht sicherlich auch in Java oder liege ich Falsch?

Schade das es dafür keine Tutorials gibt wie man so etwas einbindet und so etwas 😟

__________
Das sieht mir nach einem Java Tutorial dafür aus:

und ebenfalls hier noch die gwtwiki jar Datei:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
A Methoden Allgemeine Java Frage Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
I Allgemeine Herangehensweise bei Übernahme Allgemeine Java-Themen 19
J Erste Schritte Applet allgemeine Funkion Allgemeine Java-Themen 8
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S allgemeine Datenbankschnittstelle für Webservice Allgemeine Java-Themen 72
M allgemeine frage zur plattformunabhängigkeit Allgemeine Java-Themen 2
M allgemeine Architekturfrage Allgemeine Java-Themen 4
J Ganz allgemeine Frage Allgemeine Java-Themen 3
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
V Ich hätte 2 Fragen Allgemeine Java-Themen 5
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
H Fragen zur Kraken Api Allgemeine Java-Themen 1
nonickatall Klassen Grundsätzliche Fragen zu geplanter Programmstruktur Allgemeine Java-Themen 5
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
T Fragen bezgl. Lambdas Allgemeine Java-Themen 20
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
M Diverse Design-Fragen Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
2 2 Klein Fragen Allgemeine Java-Themen 7
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
A Java Theorie-Fragen Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
R Socket Fragen zu UDP Allgemeine Java-Themen 1
B Noob-Fragen zu Tablets und PC kompatiblität... Allgemeine Java-Themen 6
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
U Vier Fragen zu Java Allgemeine Java-Themen 2
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
D Fragen zum erstellen einer ausführbaren Jar Datei Allgemeine Java-Themen 3
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
Luk10 Fragen zum ByteBuffer (lwjgl - icons) Allgemeine Java-Themen 2
F Akkumulator Hough-Transformation offene Fragen Allgemeine Java-Themen 4
Luk10 Fragen zu Naming-Conventions Allgemeine Java-Themen 5
Z Einige Fragen Allgemeine Java-Themen 10
T OOP Einige Fragen zu UML-Klassendiagrammen Allgemeine Java-Themen 6
G Einige Fragen zu ResourceBundles Allgemeine Java-Themen 2
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
DStrohma Grundsätzliche Fragen zum Aufbau eines komplexeren Programmes Allgemeine Java-Themen 8
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
X Executor fragen ob fertig Allgemeine Java-Themen 13
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
K Reflections Fragen Allgemeine Java-Themen 7
S Fragen zum SCJD-Zertifikat Allgemeine Java-Themen 2
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Fragen zu Scala Allgemeine Java-Themen 11
Daniel_L Fragen zu RegEx und URL umwandeln Allgemeine Java-Themen 4
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
S Fragen zum ShutdownHook Allgemeine Java-Themen 7
V Fragen zu einem Java Browser Allgemeine Java-Themen 7
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
L Einige Fragen zu Java Allgemeine Java-Themen 9
F Linguistische Fragen zu Javadoc bzw. Englisch Allgemeine Java-Themen 4
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
D Grundsätzliche Fragen zur Grafikdarstellung in Spielen Allgemeine Java-Themen 2
J 2 Fragen zu JMF und eine Rechtsfrage Allgemeine Java-Themen 3
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
C LinkedList Fragen Allgemeine Java-Themen 7
P Fragen zur JBuilder und den kosten. Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
M ein paar fragen über JBoss und Catalina Allgemeine Java-Themen 7
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
I zwei simple fragen Allgemeine Java-Themen 22
G 2 Fragen Allgemeine Java-Themen 7
G Fragen zu ausführbaren JAR Files Allgemeine Java-Themen 23
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben