क्या कोई जानता है कि क्या और कैसे संभव है कि Google को प्रोग्रामेटिक रूप से खोजा जाए - खासकर अगर इसके लिए जावा एपीआई है?
क्या कोई जानता है कि क्या और कैसे संभव है कि Google को प्रोग्रामेटिक रूप से खोजा जाए - खासकर अगर इसके लिए जावा एपीआई है?
जवाबों:
कुछ तथ्य:
Google एक सार्वजनिक खोज webservice एपीआई प्रदान करता है जो JSON लौटाता है : http://ajax.googleapis.com/ajax/services/search/web । यहाँ प्रलेखन
जावा ऑफ़र java.net.URL
और java.net.URLConnection
HTTP अनुरोधों को आग लगाने और संभालने के लिए।
जावा में 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);
}
एपीआई का उपयोग करके 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 अपने लाभ को साझा करना पसंद करता है।
में गूगल की सेवा की शर्तें हम पढ़ सकते हैं:
5.3 आप सहमत हैं कि Google द्वारा प्रदान किए गए इंटरफ़ेस के अलावा किसी भी माध्यम से किसी भी सेवा का उपयोग (या एक्सेस करने का प्रयास) नहीं किया जाता है, जब तक कि आपको Google के साथ एक अलग समझौते में ऐसा करने की विशेष रूप से अनुमति नहीं दी गई हो। आप विशेष रूप से किसी भी स्वचालित साधनों (स्क्रिप्ट या वेब क्रॉलर का उपयोग सहित) के माध्यम से किसी भी सेवा का उपयोग (या एक्सेस करने का प्रयास) करने के लिए सहमत हैं और यह सुनिश्चित करेंगे कि आप सेवाओं पर मौजूद किसी भी robots.txt फ़ाइल में दिए गए निर्देशों का पालन करें। ।
इसलिए मुझे लगता है कि उत्तर नहीं है। सोप एपीआई पर अधिक उपलब्ध नहीं है
Google टीओएस को अप्रैल 2014 में थोड़ा आराम दिया गया है। अब यह बताता है:
"हमारी सेवाओं का दुरुपयोग न करें। उदाहरण के लिए, हमारी सेवाओं में हस्तक्षेप न करें या इंटरफ़ेस और हमारे द्वारा दिए गए निर्देशों के अलावा किसी अन्य विधि का उपयोग करके उन्हें एक्सेस करने का प्रयास करें।"
तो "स्वचालित साधनों" और लिपियों के बारे में अब बीत चुका है। यह स्पष्ट रूप से अभी भी उनकी सेवाओं तक पहुँचने का वांछित (Google द्वारा) तरीका नहीं है, लेकिन मुझे लगता है कि यह अब औपचारिक रूप से इस बात की व्याख्या के लिए खुला है कि वास्तव में "इंटरफ़ेस" क्या है और क्या इससे कोई अंतर पड़ता है कि कैसे ठीक किया गया HTML संसाधित किया जाता है ( प्रदान या पार्स किया हुआ)। किसी भी तरह, मैंने एक जावा सुविधा पुस्तकालय लिखा है और इसका उपयोग करना है या नहीं यह तय करना आपके ऊपर है:
वास्तव में Google को प्रोग्रामेटिक रूप से सर्च करने के लिए एक एपीआई है। एपीआई को गूगल कस्टम सर्च कहा जाता है। इस API का उपयोग करने के लिए, आपको Google डेवलपर API कुंजी और cx कुंजी की आवश्यकता होगी। Java program से google search तक पहुँचने की एक सरल प्रक्रिया मेरे ब्लॉग में बताई गई है।
अब मृत, यहां वेबैक मशीन लिंक है ।
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 पर
पिछले साल उन टीओएस बदलावों के प्रकाश में हमने एक एपीआई बनाया जो Google की खोज को एक्सेस देता है। यह केवल हमारे स्वयं के उपयोग के लिए था लेकिन कुछ अनुरोधों के बाद हमने इसे खोलने का फैसला किया। हम भविष्य में अतिरिक्त खोज इंजन जोड़ने की योजना बना रहे हैं!
क्या किसी को खोज परिणामों को लागू करने / प्राप्त करने के लिए एक आसान तरीका ढूंढना चाहिए जो आप साइन अप करने के लिए स्वतंत्र हैं और REST API को आज़माएँ: https://searchapi.io
यह JSON परिणाम देता है और विस्तृत डॉक्स के साथ लागू करने के लिए पर्याप्त आसान होना चाहिए।
यह शर्म की बात है कि बिंग और याहू इस संबंध में Google पर मीलों आगे हैं। उनके API सस्ते नहीं हैं, लेकिन कम से कम उपलब्ध हैं।
बस एक विकल्प है। Google की खोज करना और परिणामों को पार्स करना भी जावा में किसी भी HTML पार्सर जैसे जेएसओआरपी का उपयोग करके सामान्य तरीके से किया जा सकता है। निम्नलिखित उल्लिखित उदाहरण का लिंक है।
https://www.codeforeach.com/java/example-how-to-search-google-using-java