[Risolto] Lanciare una ricerca con il browser di default

di il
5 risposte

[Risolto] Lanciare una ricerca con il browser di default

Carissimi,
ho ancora bisogno di un aiutino.

Da Java vorrei lanciare il web browser di default, indipendentemente dal sistema operativo su cui sta girando la mia applicazione, passandogli una stringa da cercare.
Per esempio potrei voler fare una ricerca con il testo: "Foto di gatti" oppure "Trama del film NomeDelFilm", quindi una ricerca generica.

Ora, sono riuscito a trovare come eseguire il browser di default con:
Desktop.getDesktop().browse(new URI(url));
ma come argomento il .browse vuole un URL e se gli passo una stringa di ricerca non funziona,

oppure posso chiamare un browser specifico, come per esempio Firefox e passargli la stringa di ricerca con:
Runtime.getRuntime().exec(new String[] {"C:\PathDiFirerfox\firefox", "-search", testoDiRicerca});
e questo funziona, ma in questo caso devo sapere l'esatta cartella di installazione di Firefox (che inoltre dipende dal sistema operativo) e il qualificatore per la ricerca, perché non mi sembra che sia "-search" per tutti i browser.

Qualcuno sa se esiste un modo di superare i vincoli suddetti?

5 Risposte

  • Re: [Risolto] Lanciare una ricerca con il browser di default

    >>>ma come argomento il .browse vuole un URL e se gli passo una stringa di ricerca non funziona,
    non ho capito.. cosa intendi per stringa di ricerca? non è parte dell'url?
  • Re: [Risolto] Lanciare una ricerca con il browser di default

    ZioCrick ha scritto:


    e se gli passo una stringa di ricerca non funziona
    Ovviamente, banalmente così, no!

    ZioCrick ha scritto:


    Qualcuno sa se esiste un modo di superare i vincoli suddetti?
    import java.awt.Desktop;
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.net.URLEncoder;
    
    public class RicercaGoogle {
        public static void main(String[] args) throws IOException, URISyntaxException {
            String ricerca = "beautiful cats high res";
    
            String qParam = URLEncoder.encode(ricerca, "UTF-8");
            URI searchUri = new URI("https://www.google.com/search?q=" + qParam);
    
            Desktop.getDesktop().browse(searchUri);
        }
    }
    Come vedi bisogna aprire la pagina di un qualche motore di ricerca (Google nell'esempio), sapendo a priori l'url, la forma esatta per passare il testo da cercare e se è (come tipicamente) in query-string, va fatto l'encoding come da specifiche del web (e in Java c'è URLEncoder per questo). Vedrai infatti che nel browser l'url nella barra conterrà beautiful+cats+high+res

    P.S. perché, tra l'altro, se non fai l'encoding di quel q param, ti becchi un URISyntaxException alla costruzione del URI.
  • Re: [Risolto] Lanciare una ricerca con il browser di default

    gian82 ha scritto:


    >>>ma come argomento il .browse vuole un URL e se gli passo una stringa di ricerca non funziona,
    non ho capito.. cosa intendi per stringa di ricerca? non è parte dell'url?
    Come stringa di ricerca intendevo una cosa come quella dell'esempio: "Foto di gatti".
    Scusa gian82, mi sono dimenticato di specificare che sui miei pc ho differenti sistemi operativi, differenti browser e differenti motori di ricerca.
    Ecco perché cercavo qualcosa di "universale".

    andbin ha scritto:


    Come vedi bisogna aprire la pagina di un qualche motore di ricerca (Google nell'esempio), sapendo a priori l'url, la forma esatta per passare il testo da cercare e se è (come tipicamente) in query-string, va fatto l'encoding come da specifiche del web (e in Java c'è URLEncoder per questo). Vedrai infatti che nel browser l'url nella barra conterrà beautiful+cats+high+res

    P.S. perché, tra l'altro, se non fai l'encoding di quel q param, ti becchi un URISyntaxException alla costruzione del URI.
    Andrea mi dai una brutta notizia!
    Se ho capito bene posso essere indipendente dal SO e dal browser, ma devo conoscere esattamente l'URL e la sintassi del motore di ricerca.

    Se è così, c'è modo di ricavare qual'è il motore di ricerca di default del browser di default?

    Inoltre l'URLEncoder gestisce automaticamente la codifica in base al motore di ricerca?
    Oppure la codifica è la stessa indipendentemente dal motore di ricerca?

    Però non capisco una cosa: perché nel caso di utilizzo del Runtime.getRuntime, chiamando esplicitamente Firefox col qualificatore -search gli passo la stringa di ricerca non codificata e ci pensa lui a fare la ricerca infischiandosene del motore di ricerca che gli ho assegnato? (che tra l'altro non è google).
    Ah, forse perché la codifica è indipendente dal motore?

    Scusa se faccio domande banali, ma sull'argomento web sono poco più che un "utente + che finale".
  • Re: [Risolto] Lanciare una ricerca con il browser di default

    ZioCrick ha scritto:


    Se ho capito bene posso essere indipendente dal SO e dal browser, ma devo conoscere esattamente l'URL e la sintassi del motore di ricerca.
    Beh, sì, almeno quello ...

    ZioCrick ha scritto:


    Se è così, c'è modo di ricavare qual'è il motore di ricerca di default del browser di default?
    Da Java, con la sola piattaforma standard JavaSE, no, non credo proprio. Se ci fosse un qualche altro escamotage, invocando cose "native" del sistema o altro, non so, sarebbe da verificare/valutare.

    ZioCrick ha scritto:


    Inoltre l'URLEncoder gestisce automaticamente la codifica in base al motore di ricerca?
    Oppure la codifica è la stessa indipendentemente dal motore di ricerca?
    Il concetto di url encoding non c'entra niente direttamente con il tal browser o tal motore di ricerca. È un principio e specifica generale del web.
    Se ci sono parametri dopo il ? es. blabla.jsp?nome=valore&nome2=valore2 questi valori VANNO encodati appositamente (gli spazi diventano +, i caratteri speciali o unsafe encodati con il percent encoding %xx ecc..).
    Idem quando sono nel body di una request fatta in POST secondo il formato application/x-www-form-urlencoded

    ZioCrick ha scritto:


    Però non capisco una cosa: perché nel caso di utilizzo del Runtime.getRuntime, chiamando esplicitamente Firefox col qualificatore -search gli passo la stringa di ricerca non codificata e ci pensa lui a fare la ricerca infischiandosene del motore di ricerca che gli ho assegnato? (che tra l'altro non è google).
    Mai usato personalmente l'opzione -search di Firefox ma secondo la documentazione ufficiale (https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options), -search: Search term with your default search engine.
    Quindi perché non dovrebbe funzionare? Verificherò con qualche prova cosa fa ....

    ZioCrick ha scritto:


    Ah, forse perché la codifica è indipendente dal motore?
    Ripeto che "codifica" (inteso come quel url encoding) non c'entra con il tal motore.
  • Re: [Risolto] Lanciare una ricerca con il browser di default

    Andrea, ti ringrazio ancora per le tue utilissime spiegazioni.
    A questo punto mi rassegno a specificare il motore di ricerca, e considero risolto il mio quesito, visto che ho imparato svariate cose, tra cui l'uso di URLEncoder che per lo meno mi solleva dall'incombenza di codificare la stringa di ricerca.

    Ti sono estremamente debitore, per cui quando vuoi, ti aspetto per pizza e
Devi accedere o registrarti per scrivere nel forum
5 risposte