আপনি গুগল প্রোগ্রামগতভাবে জাভা এপিআই [বন্ধ] কীভাবে অনুসন্ধান করতে পারেন


105

গুগল প্রোগ্রামেমেটিকভাবে অনুসন্ধান করা কীভাবে এবং কীভাবে সম্ভব - কেউ বিশেষত যদি এর জন্য জাভা এপিআই থাকে তবে কী জানেন?


আমাদের নোডেজের জন্য সমর্থন আছে?
বিনোদ কুমার মারুপু

গুগল জাভা ব্যবহার করে অনুসন্ধান করার উদাহরণ - জসপ এইচটিএমএল পার্সার: কোডফয়চ.কম /
প্রশান্ত ২

উত্তর:


138

কিছু ঘটনা:

  1. Google একটি সর্বজনীন অনুসন্ধান webservice এপিআই যা ফেরৎ উপলব্ধ করা হয় তাদেরকে JSON : http://ajax.googleapis.com/ajax/services/search/webডকুমেন্টেশন এখানে

  2. জাভা অফার করে java.net.URLএবং java.net.URLConnectionএইচটিটিপি অনুরোধগুলিকে চালিত করে এবং পরিচালনা করে।

  3. JSON জাভাতে একটি স্বেচ্ছাসেবী জাভা JSON এপিআই ব্যবহার করে একটি পূর্ণ যোগ্য জাভাবেন আইটেমে রূপান্তরিত হতে পারে can সেরা এক গুগল 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());
}

গুগলের রিটার্ন হিসাবে এই জাভাবিয়ান বর্গটি সবচেয়ে গুরুত্বপূর্ণ জেএসওএন ডেটা উপস্থাপন করে (এটি আসলে আরও ডেটা ফেরত দেয় তবে সেই অনুসারে এটি জাভাবিয়ান কোডটি প্রসারিত করার অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে):

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

}

আরো দেখুন:


নভেম্বর ২০১০ সাল থেকে আপডেট (উপরের উত্তরের ২ মাস পরে), সর্বজনীন অনুসন্ধান ওয়েব সার্ভিস অবহ্রাসিত হয়েছে (এবং শেষ দিনটি যেখানে পরিষেবাটি দেওয়া হয়েছিল সেপ্টেম্বর ২৯, ২০১৪)। আপনার সেরা বাজি এখন একটি সৎ ব্যবহারকারী এজেন্টের সাথে সরাসরি http://www.google.com/search অনুসন্ধান করছে এবং তারপরে HTML পার্সার ব্যবহার করে ফলাফলটি পার্স করছে । আপনি যদি ব্যবহারকারী এজেন্ট বাদ দেন তবে আপনি একটি 403 ফিরে পাবেন। যদি আপনি ব্যবহারকারীর এজেন্টে পড়ে থাকেন এবং কোনও ওয়েব ব্রাউজারের অনুকরণ করে (যেমন ক্রোম বা ফায়ারফক্স), তবে আপনি ব্যাকউইথ এবং পারফরম্যান্সের অপচয় নষ্ট এমন এক বৃহত্তর এইচটিএমএল প্রতিক্রিয়া ফিরে পাবেন।

জসপকে এইচটিএমএল পার্সার হিসাবে ব্যবহার করে এখানে একটি কিক অফের উদাহরণ দেওয়া হয়েছে :

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
দয়া করে নোট করুন যে গুগল অনুসন্ধান এপিআই নভেম্বর ২০১০ সাল থেকে অবহিত হয়ে গেছে (উপরের উত্তরটি পোস্ট করার ২ মাস পরে) এন্ডেউসাররা গুগল কাস্টম অনুসন্ধান এপিআই এ যাওয়ার জন্য উত্সাহিত করা হয়: developers.google.com/custom-search/v1/overview
BalusC

2
@ বালুসসি কেবল গুগলের কাস্টম অনুসন্ধানেই কোনও নির্দিষ্ট ওয়েবসাইটের পরিবর্তে পুরো ওয়েবের অনুসন্ধানের জন্য নয়?
পরগাত

1
এছাড়াও, আপনার যদি কোনও সংস্থার নাম বা বট পৃষ্ঠা না থাকে তবে ??
মাইক ওয়ারেন

1
স্কেলা ভাল অনুসন্ধানের ফলাফলগুলিতে = Jsoup.con সংযুক্ত (googleBase + URLEncoder.encode (সার্চকিউয়ারি, চরসেট))। ব্যবহারকারীর (ইউজার এজেন্ট) .get () .সलेक्ट করুন ("। G> .r> একটি"));
ভ্লাদিমির স্টাজিলভ

13

এপিআই ব্যবহার করে গুগল অনুসন্ধান করতে আপনার Google কাস্টম অনুসন্ধান ব্যবহার করা উচিত , ওয়েবপৃষ্ঠা স্ক্র্যাপ করার অনুমতি নেই

জাভাতে আপনি জাভার জন্য কাস্টম অনুসন্ধান এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন

খাঁটি নির্ভরতা হ'ল:

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

গুগল কাস্টম অনুসন্ধান এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কোড অনুসন্ধানের উদাহরণ

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

}

আপনি দেখতে পাচ্ছেন আপনাকে একটি এপিআই কী এবং অনুরোধ করতে হবে নিজস্ব অনুসন্ধান ইঞ্জিন আইডি, সিএক্স

নোট করুন যে আপনি সিক্স সেটআপের সময় বেসিক ট্যাব সেটিংসে "সম্পূর্ণ ওয়েব অনুসন্ধান করুন" নির্বাচন করে পুরো ওয়েবটি অনুসন্ধান করতে পারেন, তবে ফলাফলগুলি সাধারণ ব্রাউজার গুগল অনুসন্ধানের মতো হবে না।

বর্তমানে (উত্তরের তারিখ) আপনি প্রতিদিন 100 টি এপিআই কল পান বিনামূল্যে, তারপরে গুগল আপনার লাভ ভাগ করে নিতে চাই।


12

গুগলের পরিষেবার শর্তাদিতে আমরা পড়তে পারি:

5.3 আপনি গুগলের সাথে পৃথক চুক্তিতে নির্দিষ্টভাবে অনুমতি না দেওয়া না হলে আপনি গুগলের সরবরাহ করা ইন্টারফেসের বাইরে অন্য কোনও উপায়ে কোনও পরিষেবা অ্যাক্সেস (বা অ্যাক্সেসের চেষ্টা) না করার বিষয়ে সম্মত হন। আপনি বিশেষত কোনও স্বয়ংক্রিয় উপায়ে (স্ক্রিপ্ট বা ওয়েব ক্রলার ব্যবহার সহ) কোনও পরিষেবা অ্যাক্সেস (বা অ্যাক্সেসের চেষ্টা) না করার বিষয়ে সম্মত হন এবং পরিষেবাগুলিতে উপস্থিত যে কোনও রোবট. টেক্সট ফাইলের নির্দেশাবলী আপনি মেনে চলছেন তা নিশ্চিত করবেন ।

সুতরাং আমি অনুমান করি উত্তরটি হ'ল এসওএপি এপিআই এর বেশি আর পাওয়া যায় না


7
তবে, এজ্যাক্স এপিআই গুগল সরবরাহ করেছে - এবং এইভাবে পরিষেবার শর্তাদি লঙ্ঘন না করে ব্যবহারযোগ্য হবে।
জিন হোমিনাল

এটি সম্ভবত এমন রোবটগুলিতে প্রযোজ্য যা এপিআইয়ের মধ্য দিয়ে যাচ্ছেন না।
জেমস পি।

3

গুগল টিওএস এপ্রিল 2014 এ কিছুটা শিথিল করা হয়েছে। এখন এটিতে বলা হয়েছে:

"আমাদের পরিষেবাগুলির অপব্যবহার করবেন না। উদাহরণস্বরূপ, আমাদের পরিষেবাদিগুলিতে হস্তক্ষেপ করবেন না বা ইন্টারফেস এবং আমরা যে নির্দেশাবলী সরবরাহ করি সেগুলি ছাড়া অন্য কোনও পদ্ধতি ব্যবহার করে সেগুলি অ্যাক্সেস করার চেষ্টা করবেন না।"

সুতরাং "স্বয়ংক্রিয় মানে" এবং স্ক্রিপ্টগুলি সম্পর্কে উত্তরণ এখন শেষ হয়ে গেছে। স্পষ্টতই এটি এখনও তাদের পরিষেবাদি অ্যাক্সেসের পছন্দসই (গুগল দ্বারা) নয়, তবে আমি মনে করি এটি এখন "ইন্টারফেস" ঠিক কী তা ব্যাখ্যা করার জন্য আনুষ্ঠানিকভাবে উন্মুক্ত এবং ঠিক ফেরত এইচটিএমএলকে কীভাবে প্রক্রিয়াজাত করা হয় তাতে কোনও পার্থক্য রয়েছে কিনা ( রেন্ডার বা পার্সড)। যাইহোক, আমি একটি জাভা সুবিধার লাইব্রেরি লিখেছি এবং এটি ব্যবহার করবেন কি না তা সিদ্ধান্ত নেওয়ার সিদ্ধান্ত আপনার উপর নির্ভর করবে:

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


জাভাতে লিখিত সমাধানের জন্য গবেষণার পরে কয়েক ঘন্টা গবেষণা করে যা সত্যিই কাজ করে, আপনার সমাধানটি জাভা পরিবেশের মধ্যে এটি করার সবচেয়ে কার্যকর উপায় বলে মনে হচ্ছে। আপনার
কোডটির


2

প্রকৃতপক্ষে প্রোগ্রামগুলিকভাবে গুগল অনুসন্ধান করার জন্য একটি এপিআই রয়েছে। এপিআইকে গুগল কাস্টম অনুসন্ধান বলা হয়। এই এপিআই ব্যবহার করার জন্য আপনার একটি Google বিকাশকারী এপিআই কী এবং একটি সিক্স কী প্রয়োজন হবে। জাভা প্রোগ্রাম থেকে গুগল অনুসন্ধান অ্যাক্সেস করার জন্য একটি সহজ পদ্ধতি আমার ব্লগে ব্যাখ্যা করা হয়েছে।

এখন মারা গেছে, এখানে ওয়েব্যাক মেশিনের লিঙ্ক


আপনার ব্লগে, API কী সম্পর্কে অংশে, আপনি জাভাতে লেখা প্রোগ্রামগুলির জন্য সার্ভার কী সম্পর্কে কিছু উল্লেখ করেছিলেন। আমি জাভাতে আমার লিখছি, এবং আমার কোনও সার্ভার কী ব্যবহার করা উচিত কিনা তা জানতে চাইছিলাম এবং আমি কীভাবে আমার প্রোগ্রামে আমার API কী ব্যবহার করব। এছাড়াও, আমাকে কি কোনও লাইব্রেরি ডাউনলোড করতে হবে?
মাইক ওয়ারেন

0

বালুসসির উত্তরের বিকল্প হিসাবে এটি অবনমিত করা হয়েছে এবং আপনাকে প্রক্সি ব্যবহার করতে হবে, আপনি এই প্যাকেজটি ব্যবহার করতে পারেন। কোড নমুনা:

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

গিটহাবে লাইব্রেরি


-1

গত বছরের এই টিওএস পরিবর্তনের আলোকে আমরা একটি এপিআই তৈরি করেছি যা গুগলের অনুসন্ধানে অ্যাক্সেস দেয়। এটি কেবল আমাদের নিজস্ব ব্যবহারের জন্য ছিল তবে কিছু অনুরোধের পরে আমরা এটি খোলার সিদ্ধান্ত নিয়েছি। আমরা ভবিষ্যতে অতিরিক্ত অনুসন্ধান ইঞ্জিন যুক্ত করার পরিকল্পনা করছি!

কেউ যদি সন্ধানের ফলাফল কার্যকর করতে / অর্জনের সহজ উপায়ের সন্ধান করে তবে আপনি সাইন আপ করতে এবং REST এপিআইকে একবার চেষ্টা করে দেখতে পারেন: https://searchapi.io

এটি JSON ফলাফলগুলি প্রদান করে এবং বিশদ ডক্স সহ কার্যকর করার পক্ষে যথেষ্ট সহজ হওয়া উচিত।

এটি লজ্জার বিষয় যে এই বিষয়ে গুগলে বিং এবং ইয়াহু কয়েক মাইল এগিয়ে। তাদের এপিআইগুলি সস্তা নয়, তবে অন্তত উপলব্ধ।


-1

শুধু একটি বিকল্প। গুগল অনুসন্ধান করা এবং ফলাফলগুলি বিশ্লেষণ করা জাভাতে জাসুপের মতো কোনও HTML পার্সার ব্যবহার করে জেনেরিক উপায়ে করা যেতে পারে। নীচে উল্লিখিত উদাহরণের লিঙ্কটি দেওয়া হল।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.