SORU
16 EYLÜL 2010, PERŞEMBE


Nasıl Google Arama Program aracılığıyla Java API mısın

Herkes nasıl arama yapmak mümkündür Google özellikle eğer bunun için bir Java API varsa, Program aracılığıyla yapar.

Şimdiden teşekkürler. Daniel

CEVAP
16 EYLÜL 2010, PERŞEMBE


Bazı gerçekler:

  1. Google sunmaktadırJSONdöndüren ortak arama Java eklentisi API: http://ajax.googleapis.com/ajax/services/search/web. Documentation here

  2. Java ateş java.net.URL java.net.URLConnection teklifler ve HTTP istekleri.

  3. JSON Java fullworthy Javabean bir nesne keyfi Java JSON API kullanarak dönüştürülebilir. En iyilerinden biri Google Gson.

Şimdi matematik:

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());
}

Google tarafından döndürülen olarak bu Javabean class en önemli JSON temsil eden veri (aslında daha çok veri verir, ama bu Javabean kodu buna göre genişletmek için bir egzersiz olarak bırakılmıştır)

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   "]"; }
    }

}

Ayrıca Bkz:


GüncellemeKasım 2010'dan bu yana (2 ay yukarıdaki cevaptan sonra), kamu arama Java eklentisi haline gelmiştirkaldırılmış(bu hizmet teklif edildi son gün 29 Eylül, 2014). En iyi bahis şimdi http://www.google.com/search dürüst bir kullanıcı aracı ile birlikte doğrudan sorgulama ve sonucu HTML parser kullanarak ayrıştırmak. Eğer kullanıcı Aracısı atlarsanız, o zaman 403 geri alırsın. Kullanıcı Aracısı yalan söylüyorsun ve bir web tarayıcısı (örneğin Chrome veya Firefox) taklit ederse, o zaman bant genişliği ve performans kaybı olan yol çok daha büyük bir HTML yanıt geri almak.

İşte maçın başlamasına bir örnek HTML ayrıştırıcısı Jsoup kullanarak:

String google = "http://www.google.com/search?q=";
String search = "stackoverflow";
String charset = "UTF-8";
String userAgent = "ExampleBot 1.0 ( http://example.com/bot)"; // Change this to your company's name and bot homepage!

Elements links = Jsoup.connect(google   URLEncoder.encode(search, charset)).userAgent(userAgent).get().select("li.g>h3>a");

for (Element link : links) {
    String title = link.text();
    String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
    url = URLDecoder.decode(url.substring(url.indexOf('=')   1, url.indexOf('&')), "UTF-8");

    if (!url.startsWith("http")) {
        continue; // Ads/news/etc.
    }

    System.out.println("Title: "   title);
    System.out.println("URL: "   url);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Central

    Android Cent

    13 Kasım 2008
  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • The Brister

    The Brister

    10 ŞUBAT 2008