Avatar
Insane Qurd
Redaktor
Avatar
Insane Qurd:

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ý
Redaktor
Avatar
Odpovídá na Insane Qurd
Jan Vargovský:
https://developers.google.com/custom-search/json-api/v1/overview
 
Nahoru Odpovědět 14.5.2015 19:05
Avatar
Insane Qurd
Redaktor
Avatar
Odpovídá na Jan Vargovský
Insane Qurd:

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
Odpovídá na Insane Qurd
Petr Čech (czubehead):

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í
+1 bodů
Řešení problému
Nahoru Odpovědět 17.5.2015 12:45
Why so serious? -Joker
Avatar
Odpovídá na Insane Qurd
Petr Čech (czubehead):

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
Why so serious? -Joker
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.