com.thesmartweb.swebrank.BingResults.java Source code

Java tutorial

Introduction

Here is the source code for com.thesmartweb.swebrank.BingResults.java

Source

/* 
 * Copyright 2015 Themistoklis Mavridis <themis.mavridis@issel.ee.auth.gr>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.thesmartweb.swebrank;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.net.*;
import org.json.simple.parser.*;
import java.util.*;
import org.json.simple.JSONArray;

/**
 * Class to get results from Bing
 * @author Themistoklis Mavridis
 */
public class BingResults {

    /**
     * Class to get the results for the Bing Search API
     * @param query the query to get the search results for
     * @param bing_results_number the number of results to get
     * @param example_dir the directory to save the json file that bing returns
     * @param config_path the path with the configuration file (api keys for bing)
     * @return an array of the urls of the results of bing for this query
     */
    public String[] Get(String query, int bing_results_number, String example_dir, String config_path) {
        String[] links = new String[bing_results_number];
        try {
            APIconn apicon = new APIconn();
            String line = "fail";
            query = query.replace("+", "%20");
            URL azure_url = new URL("https://api.datamarket.azure.com/Bing/SearchWeb/v1/Web?Query=%27" + query
                    + "%27&$top=" + bing_results_number + "&$format=JSON");
            line = apicon.azureconnect(azure_url, config_path);
            if ((!line.equalsIgnoreCase("fail")) && (!line.equalsIgnoreCase("insufficient"))
                    && (!line.equalsIgnoreCase("provided"))) {
                //write the json-ticket text to a file
                DataManipulation textualmanipulation = new DataManipulation();
                textualmanipulation.AppendString(line, example_dir + "bing/" + query + "/json" + ".txt");
                //initialize JSONparsing
                JSONparsing gg = new JSONparsing(bing_results_number);
                //get the links in an array
                links = gg.BingAzureJsonParsing(line, bing_results_number);
            }
            return links;
        } catch (IOException ex) {
            Logger.getLogger(BingResults.class.getName()).log(Level.SEVERE, null, ex);
            System.out.print("\n*********Failure in Bing results*********\n");
            return links;
        }

    }

    /**
     * Class to get the results number from Bing in order to use it in NWD
     * @param quer the query to get the results for
     * @param config_path the path with the configuration file (api keys for bing)
     * @return the number of the results for a certain query
     */
    public Long Get_Results_Number(String quer, String config_path) {
        try {
            long results_number = 0;
            //we check if we have an extra useless + in the end
            String check_quer = quer.substring(quer.length() - 1, quer.length());
            char plus = "+".charAt(0);
            char check_plus = check_quer.charAt(0);
            if (check_plus == plus) {
                quer = quer.substring(0, quer.length() - 1);
            }
            quer = quer.replace("+", "%20");
            //we connect through the Bing search api
            URL azure_url = new URL(
                    "https://api.datamarket.azure.com/Bing/Search/Composite?Sources=%27web%27&Query=%27" + quer
                            + "%27&$format=JSON");
            APIconn apicon = new APIconn();
            String line = apicon.azureconnect(azure_url, config_path);
            if ((!line.equalsIgnoreCase("fail")) && (!line.equalsIgnoreCase("insufficient"))
                    && (!line.equalsIgnoreCase("provided"))) {
                //Create a parser of the json
                JSONParser parser = new JSONParser();
                //Create the map
                Map json = (Map) parser.parse(line);
                // Get a set of the entries
                Set set = json.entrySet();
                Object[] arr = set.toArray();
                Map.Entry entry = (Map.Entry) arr[0];
                //get to second level of yahoo json
                String you = entry.getValue().toString();
                json = (Map) parser.parse(you);
                set = json.entrySet();
                arr = set.toArray();
                entry = (Map.Entry) arr[0];
                you = entry.getValue().toString();
                Object parse = parser.parse(you);
                JSONArray json_new = (JSONArray) parse;
                json = (Map) json_new.get(0);
                set = json.entrySet();
                arr = set.toArray();
                Map.Entry[] entries_bing = null;
                int k = 0;
                Iterator new_iterator = set.iterator();
                while (new_iterator.hasNext()) {
                    Object next = new_iterator.next();
                    Map.Entry next_entry = (Map.Entry) next;
                    if (next_entry.getKey().toString().equalsIgnoreCase("WebTotal")) {
                        results_number = Long.parseLong(next_entry.getValue().toString());
                    }
                }
            }
            return results_number;
        } catch (MalformedURLException | ParseException | java.lang.ArrayIndexOutOfBoundsException
                | java.lang.NullPointerException | NumberFormatException ex) {
            Logger.getLogger(BingResults.class.getName()).log(Level.SEVERE, null, ex);
            long results_number = 0;
            return results_number;
        }
    }
}