NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Insane Qurd
Tvůrce
Avatar
Insane Qurd:14.5.2015 19:02

Ahoj, potřeboval bych poradit, jak na stažení a zobrazení prvního zobrazeného obrázku na Googlu.

Například by uživatel zadal js a hned by se mu ukázal:

Odpovědět
14.5.2015 19:02
It's impossible to say it's impossible.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Insane Qurd
Jan Vargovský:14.5.2015 19:05
https://developers.google.com/custom-search/json-api/v1/overview
 
Nahoru Odpovědět
14.5.2015 19:05
Avatar
Insane Qurd
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Insane Qurd:16.5.2015 13:57

Ahoj, špatně jsi mě pochopil, když mám udělanou desktop aplikaci ve WPF a uživatel zadá nějaké slovo do textboxu, potřebuji aby to ta aplikace zadala do Googlu a ukázala mu první výsledek hledání.

Nahoru Odpovědět
16.5.2015 13:57
It's impossible to say it's impossible.
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Insane Qurd
Petr Čech:17.5.2015 12:45

Tak přes WebClient pošleš request na

https://www.google.cz/search?q=[jmenoobrazku]&tbm=isch

Nainstaluješ si přes Nuget balíček CsQuerry https://github.com/…etre/CsQuery
a naparsuješ, vyjde ti něco jako tohle:

using(WebClient cl=new WebClient())
{
        string DOM = cl.DownloadString("https://www.google.cz/search?q=[jmenoobrazku]&tbm=isch");
        CQ cq = DOM;

        string imgUrl = cq[".rg_i"][0].GetAttribute("src");

        HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(imgUrl);
        HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
        Stream stream = httpWebReponse.GetResponseStream();
        Image img = Image.FromStream(stream);
}
Editováno 17.5.2015 12:46
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17.5.2015 12:45
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Insane Qurd
Petr Čech:19.5.2015 12:02

Metoda pro WPF

public void SetImage(string imageName, Image control)
{
using (Client cl = new Client())
{
        CQ DOM = cl.DownloadString("https://www.google.cz/search?q="+imageName+"&tbm=isch");
        CQ imgResults = DOM[".rg_i"];//.rg_i je CSS selektor pro výsledek hledání

        string url = "";
        for (int i = 0; i < imgResults.Length; i++)
        {
                if (imgResults[i].HasAttribute("data-src"))
                //některé bloky .rg_i nemusí být výsledky hedání,
                //proto budeme hledat, dokud nenajdeme takový, který má odkaz na obrázek.
                {
                        url = imgResults[i].GetAttribute("data-src");
                        break;
                }
        }

        if (string.IsNullOrEmpty(url))
        throw new ArgumentException("takový obrázek nebyl nalezen");

        BitmapImage bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(url, UriKind.Absolute);
        bitmap.EndInit();

        control.Source = bitmap;//WPF kontrola <image>
}
}

a potřebná třída:

public class Client:WebClient
{
public Client():base(){}

protected override WebRequest GetWebRequest(Uri address)
{
        HttpWebRequest req = WebRequest.Create(address) as HttpWebRequest;
        req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36";
        //musíme nastavit user-agent na normální prohlížeč, jinak nám Google vrátí jinou strukturu
        return req;
        }
}
Nahoru Odpovědět
19.5.2015 12:02
the cake is a lie
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.