आप Google प्रोग्राम को जावा API कैसे खोज सकते हैं [बंद]


105

क्या कोई जानता है कि क्या और कैसे संभव है कि Google को प्रोग्रामेटिक रूप से खोजा जाए - खासकर अगर इसके लिए जावा एपीआई है?


हम नोडज के लिए समर्थन है?
विनोद कुमार मारुपु

जावा का उपयोग करके Google को खोजने के लिए उदाहरण - Jsoup HTML Parser: codeforeach.com/java/example-how-to-search-google-use-java
Prashanth

जवाबों:


138

कुछ तथ्य:

  1. Google एक सार्वजनिक खोज webservice एपीआई प्रदान करता है जो JSON लौटाता है : http://ajax.googleapis.com/ajax/services/search/webयहाँ प्रलेखन

  2. जावा ऑफ़र java.net.URLऔर java.net.URLConnectionHTTP अनुरोधों को आग लगाने और संभालने के लिए।

  3. जावा में JSON को एक मनमाना जावा JSON API का उपयोग करके एक पूर्ण योग्य Javabean ऑब्जेक्ट में परिवर्तित किया जा सकता है। सबसे अच्छे में से एक Google Gson है

अब गणित करें:

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

इस Javabean वर्ग के रूप में Google द्वारा लौटाए गए सबसे महत्वपूर्ण JSON डेटा का प्रतिनिधित्व करता है (यह वास्तव में अधिक डेटा लौटाता है, लेकिन यह आपके अनुसार इस Javabean कोड का विस्तार करने के लिए एक अभ्यास के रूप में बचा है):

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

}

यह सभी देखें:


अद्यतन नवंबर 2010 (2 महीने से ऊपर जवाब के बाद) के बाद से, सार्वजनिक खोज वेब सेवा हो गई है पदावनत (और अंतिम दिन है जिस पर सेवा की पेशकश की गई 29 सितंबर, 2014) था। आपकी सबसे अच्छी शर्त अब एक ईमानदार उपयोगकर्ता एजेंट के साथ सीधे http://www.google.com/search की क्वेरी करना और फिर HTML पार्सर का उपयोग करके परिणाम को पार्स करना है । यदि आप उपयोगकर्ता एजेंट को छोड़ देते हैं, तो आपको 403 वापस मिल जाएगा। यदि आप उपयोगकर्ता एजेंट में झूठ बोल रहे हैं और एक वेब ब्राउज़र (जैसे क्रोम या फ़ायरफ़ॉक्स) का अनुकरण करते हैं, तो आपको एक बहुत बड़ा HTML प्रतिक्रिया वापस मिलती है जो बैंडविड्थ और प्रदर्शन की बर्बादी है।

यहाँ HTML पार्सर के रूप में Jsoup का उपयोग करके एक किकऑफ़ उदाहरण दिया गया है :

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(".g>.r>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);
}

बहुत बहुत धन्यवाद - क्या यह लाइसेंस समझौते को नहीं तोड़ रहा है जैसा कि ऊपर उत्तर में वर्णित है? वास्तव में कोड की सराहना करते हैं!
दान

11
कृपया ध्यान दें कि Google खोज API नवंबर 2010 के बाद से पदावनत हो गया है (उपरोक्त उत्तर पोस्ट किए जाने के 2 महीने बाद)। एंड्यूज़र्स को Google कस्टम खोज API पर जाने के लिए प्रोत्साहित किया जाता है: Developers.google.com/custom-search/v1/overview
BalusC

2
@BalusC Google की कस्टम खोज केवल एक विशेष वेबसाइट के अंदर खोजने के लिए नहीं है, बल्कि पूरे वेब पर है ??
परगट

1
इसके अलावा, अगर आपके पास कंपनी का नाम या बॉट पेज नहीं है तो क्या होगा ??
माइक वॉरेन

1
Scala val searchResults = Jsoup.connect (googleBase + URLEncoder.encode (searchQuery, charset)) में .userAgent (userAgent) .get () .select ("। G> .r> a");
व्लादिमीर स्टाज़िलोव

13

एपीआई का उपयोग करके Google को खोजने के लिए आपको Google कस्टम खोज का उपयोग करना चाहिए , वेब पेज को स्क्रैप करने की अनुमति नहीं है

जावा में आप जावा के लिए CustomSearch एपीआई क्लाइंट लाइब्रेरी का उपयोग कर सकते हैं

मावेन निर्भरता है:

<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-customsearch</artifactId>
    <version>v1-rev57-1.23.0</version>
</dependency> 

Google कस्टम खोज API क्लाइंट लाइब्रेरी का उपयोग करके उदाहरण कोड खोज

public static void main(String[] args) throws GeneralSecurityException, IOException {

    String searchQuery = "test"; //The query to search
    String cx = "002845322276752338984:vxqzfa86nqc"; //Your search engine

    //Instance Customsearch
    Customsearch cs = new Customsearch.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), null) 
                   .setApplicationName("MyApplication") 
                   .setGoogleClientRequestInitializer(new CustomsearchRequestInitializer("your api key")) 
                   .build();

    //Set search parameter
    Customsearch.Cse.List list = cs.cse().list(searchQuery).setCx(cx); 

    //Execute search
    Search result = list.execute();
    if (result.getItems()!=null){
        for (Result ri : result.getItems()) {
            //Get title, link, body etc. from search
            System.out.println(ri.getTitle() + ", " + ri.getLink());
        }
    }

}

जैसा कि आप देख सकते हैं कि आपको एक एपीआई कुंजी का अनुरोध करने और स्वयं के खोज इंजन आईडी, cx को सेटअप करने की आवश्यकता होगी ।

ध्यान दें कि आप cx की स्थापना के दौरान बुनियादी टैब सेटिंग्स पर "संपूर्ण वेब खोजें" का चयन करके पूरे वेब को खोज सकते हैं, लेकिन परिणाम बिल्कुल सामान्य ब्राउज़र Google खोज के समान नहीं होंगे।

वर्तमान में (उत्तर की तारीख) आपको प्रति दिन 100 एपीआई कॉल मुफ्त में मिलती हैं, फिर Google अपने लाभ को साझा करना पसंद करता है।


12

में गूगल की सेवा की शर्तें हम पढ़ सकते हैं:

5.3 आप सहमत हैं कि Google द्वारा प्रदान किए गए इंटरफ़ेस के अलावा किसी भी माध्यम से किसी भी सेवा का उपयोग (या एक्सेस करने का प्रयास) नहीं किया जाता है, जब तक कि आपको Google के साथ एक अलग समझौते में ऐसा करने की विशेष रूप से अनुमति नहीं दी गई हो। आप विशेष रूप से किसी भी स्वचालित साधनों (स्क्रिप्ट या वेब क्रॉलर का उपयोग सहित) के माध्यम से किसी भी सेवा का उपयोग (या एक्सेस करने का प्रयास) करने के लिए सहमत हैं और यह सुनिश्चित करेंगे कि आप सेवाओं पर मौजूद किसी भी robots.txt फ़ाइल में दिए गए निर्देशों का पालन करें। ।

इसलिए मुझे लगता है कि उत्तर नहीं है। सोप एपीआई पर अधिक उपलब्ध नहीं है


7
हालाँकि, AJAX API Google द्वारा प्रदान किया जाता है - और इस प्रकार सेवा की शर्तों का उल्लंघन किए बिना यह उपयोग करने योग्य होना चाहिए।
जीन होमिनल

यह संभवतः उन रोबोटों पर लागू होता है जो एपीआई के माध्यम से नहीं जा रहे हैं।
जेम्स पी।

3

Google टीओएस को अप्रैल 2014 में थोड़ा आराम दिया गया है। अब यह बताता है:

"हमारी सेवाओं का दुरुपयोग न करें। उदाहरण के लिए, हमारी सेवाओं में हस्तक्षेप न करें या इंटरफ़ेस और हमारे द्वारा दिए गए निर्देशों के अलावा किसी अन्य विधि का उपयोग करके उन्हें एक्सेस करने का प्रयास करें।"

तो "स्वचालित साधनों" और लिपियों के बारे में अब बीत चुका है। यह स्पष्ट रूप से अभी भी उनकी सेवाओं तक पहुँचने का वांछित (Google द्वारा) तरीका नहीं है, लेकिन मुझे लगता है कि यह अब औपचारिक रूप से इस बात की व्याख्या के लिए खुला है कि वास्तव में "इंटरफ़ेस" क्या है और क्या इससे कोई अंतर पड़ता है कि कैसे ठीक किया गया HTML संसाधित किया जाता है ( प्रदान या पार्स किया हुआ)। किसी भी तरह, मैंने एक जावा सुविधा पुस्तकालय लिखा है और इसका उपयोग करना है या नहीं यह तय करना आपके ऊपर है:

https://github.com/afedulov/google-web-search


जावा में लिखे गए समाधान के लिए घंटों शोध करने के बाद, जो वास्तव में काम करता है, आपके समाधान को एक जावा पर्यावरण के अंदर ऐसा करने का सबसे व्यवहार्य तरीका लगता है। आपके कोड को कुछ समायोजन की आवश्यकता है ...
डिगाओ

जीथब पर एक मुद्दा खोलने के लिए स्वतंत्र महसूस करें
एलेक्स फेडुलोव

2

वास्तव में Google को प्रोग्रामेटिक रूप से सर्च करने के लिए एक एपीआई है। एपीआई को गूगल कस्टम सर्च कहा जाता है। इस API का उपयोग करने के लिए, आपको Google डेवलपर API कुंजी और cx कुंजी की आवश्यकता होगी। Java program से google search तक पहुँचने की एक सरल प्रक्रिया मेरे ब्लॉग में बताई गई है।

अब मृत, यहां वेबैक मशीन लिंक है


आपके ब्लॉग में, एपीआई कुंजी के बारे में, आपने जावा में लिखे प्रोग्राम के लिए सर्वर कुंजी के बारे में कुछ उल्लेख किया है। मैं जावा में अपना लिख ​​रहा हूं, और जानना चाहता था कि क्या मुझे सर्वर कुंजी का उपयोग करना चाहिए, और मैं अपने प्रोग्राम में एपीआई कुंजी का उपयोग कैसे करूंगा। इसके अलावा, क्या मुझे कोई लाइब्रेरी डाउनलोड करनी होगी?
माइक वॉरेन

0

BalusC जवाब के विकल्प के रूप में इसे हटा दिया गया है और आपको प्रॉक्सी का उपयोग करना होगा, आप इस पैकेज का उपयोग कर सकते हैं। कोड नमूना:

Map<String, String> parameter = new HashMap<>();
parameter.put("q", "Coffee");
parameter.put("location", "Portland");
GoogleSearchResults serp = new GoogleSearchResults(parameter);

JsonObject data = serp.getJson();
JsonArray results = (JsonArray) data.get("organic_results");
JsonObject first_result = results.get(0).getAsJsonObject();
System.out.println("first coffee: " + first_result.get("title").getAsString());

पुस्तकालय GitHub पर


-1

पिछले साल उन टीओएस बदलावों के प्रकाश में हमने एक एपीआई बनाया जो Google की खोज को एक्सेस देता है। यह केवल हमारे स्वयं के उपयोग के लिए था लेकिन कुछ अनुरोधों के बाद हमने इसे खोलने का फैसला किया। हम भविष्य में अतिरिक्त खोज इंजन जोड़ने की योजना बना रहे हैं!

क्या किसी को खोज परिणामों को लागू करने / प्राप्त करने के लिए एक आसान तरीका ढूंढना चाहिए जो आप साइन अप करने के लिए स्वतंत्र हैं और REST API को आज़माएँ: https://searchapi.io

यह JSON परिणाम देता है और विस्तृत डॉक्स के साथ लागू करने के लिए पर्याप्त आसान होना चाहिए।

यह शर्म की बात है कि बिंग और याहू इस संबंध में Google पर मीलों आगे हैं। उनके API सस्ते नहीं हैं, लेकिन कम से कम उपलब्ध हैं।


-1

बस एक विकल्प है। Google की खोज करना और परिणामों को पार्स करना भी जावा में किसी भी HTML पार्सर जैसे जेएसओआरपी का उपयोग करके सामान्य तरीके से किया जा सकता है। निम्नलिखित उल्लिखित उदाहरण का लिंक है।

https://www.codeforeach.com/java/example-how-to-search-google-using-java

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.