Java tutorial
/* * 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.util.logging.Level; import java.util.logging.Logger; import java.net.*; import org.json.simple.parser.*; import org.json.simple.JSONArray; import java.util.*; // /** * Class for the Google Search API * @author Themistoklis Mavridis */ public class GoogleResults { /** * Get all the results from Google Search API * @param quer the query to search for * @param google_results_number the results number * @param example_dir the directory to save the result * @param config_path the directory to find the google search api keys * @return the urls of the results */ public String[] Get(String quer, int google_results_number, String example_dir, String config_path) { //counter is set int counter_limit = google_results_number + 1; String[] links_google_total = new String[google_results_number];//it contains all the links of the google, because the google api allows to get only 10 results each time DataManipulation textualmanipulation = new DataManipulation(); APIconn apicon = new APIconn(); for (int counter = 1; counter < counter_limit; counter += 10) {//10 is the default number that Google Search API returns String[] links = new String[10]; String[] keys;//keys is the combination of cxs and apikeys which are parameters for performing queries to Google Search API keys = GetKeys(config_path); int i = 0; int flag_key = 0; String key = ""; String line = ""; //-------------after this loop line will include the JSON response of the custom search api of google (we try with the different keys, due to account limitations) while (flag_key == 0 && i < (keys.length)) { key = keys[i]; i++; URL link_ur = null; //-------we form the URL----- try { link_ur = new URL("https://www.googleapis.com/customsearch/v1?key=" + key + "&q=" + quer + "&alt=json" + "&start=" + counter); } catch (MalformedURLException ex) { Logger.getLogger(GoogleResults.class.getName()).log(Level.SEVERE, null, ex); return links_google_total; } //------we attempt to connect to Google custom search API line = apicon.connect(link_ur); if (!line.equalsIgnoreCase("fail")) { flag_key = 1; textualmanipulation.AppendString(line, example_dir + "google/" + "json" + counter + ".txt"); //initialize JSONparsing that parses the json and gets the links JSONparsing gg = new JSONparsing(); //get the links in an array links = gg.GoogleJsonParsing(line); //insert the links from each loop to the array with all the google links for (int jj = 0; jj < links.length; jj++) { links_google_total[jj + counter - 1] = links[jj]; } } } } return links_google_total; } /** * Method to get the results number for a specific query * @param quer the query to search for * @param config_path the directory to get the keys from * @return the number of results */ public Long Get_Results_Number(String quer, String config_path) {//it gets the results number for a specific query long results_number = 0; //we connect through the google api JSON custom search 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); } String[] keys = GetKeys(config_path); int flag_key = 0; int i = 0; while (flag_key == 0 && i < (keys.length)) { try { String key = keys[i]; i++; URL link_ur = new URL( "https://www.googleapis.com/customsearch/v1?key=" + key + "&q=" + quer + "&alt=json"); APIconn apicon = new APIconn(); String line = apicon.connect(link_ur); if (!line.equalsIgnoreCase("fail")) { flag_key = 1; JSONParser parser = new JSONParser(); //Create the map Map json = (Map) parser.parse(line); // Get a set of the entries Set set = json.entrySet(); Object[] obj = set.toArray(); Map.Entry entry = (Map.Entry) obj[2]; //get to the second level String you = entry.getValue().toString(); json = (Map) parser.parse(you); set = json.entrySet(); obj = set.toArray(); entry = (Map.Entry) obj[obj.length - 1]; //get to the third level you = entry.getValue().toString(); JSONArray json_arr = (JSONArray) parser.parse(you); obj = json_arr.toArray(); you = obj[0].toString(); //get to the fourth level json = (Map) parser.parse(you); set = json.entrySet(); obj = set.toArray(); entry = (Map.Entry) obj[4]; results_number = (Long) entry.getValue(); } } catch (MalformedURLException | ParseException ex) { Logger.getLogger(GoogleResults.class.getName()).log(Level.SEVERE, null, ex); } } return results_number; } /** * Method to get the keys of Google API search * @param config_path the directory to get the keys from * @return all the keys of Google */ public String[] GetKeys(String config_path) { ReadInput ri = new ReadInput(); List<String> cxsList = ri.GetKeyFile(config_path, "google_cxs"); List<String> apikeysList = ri.GetKeyFile(config_path, "google_apikeys"); String[] cxs = cxsList.toArray(new String[cxsList.size()]); String[] apikeys = apikeysList.toArray(new String[apikeysList.size()]); String[] keys = new String[cxsList.size() * cxsList.size()]; int k = 0; for (int i = 0; i < cxs.length; i++) { for (int j = 0; j < apikeys.length; j++) { keys[k] = apikeys[i] + "&cx=" + cxs[j]; k++; } } return keys; } }