Subversion Repositories SmartDukaan

Rev

Rev 5604 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5600 amit.gupta 1
package in.shop2020.util;
2
 
3
import in.shop2020.metamodel.util.CreationUtils;
4
 
5
import java.io.BufferedReader;
6
import java.io.InputStreamReader;
7
import java.io.Serializable;
8
import java.net.URL;
9
import java.net.URLConnection;
10
import java.text.ParseException;
11
import java.text.SimpleDateFormat;
12
import java.util.ArrayList;
13
import java.util.Calendar;
14
import java.util.Date;
15
import java.util.HashMap;
16
import java.util.HashSet;
17
import java.util.List;
18
import java.util.Map;
19
import java.util.Set;
20
import java.util.TimeZone;
21
 
22
import org.json.JSONArray;
23
import org.json.JSONException;
24
import org.json.JSONObject;
25
 
26
public class MostFrequentlySearchedKeywords implements Serializable{
27
 
5604 amit.gupta 28
	public static final String GOOGLE_SEARCH_DATA_URL = "http://saholic-datastore.appspot.com/jsp/export-search-activity.jsp";
5600 amit.gupta 29
	/**
30
	 * 
31
	 */
32
	private static final long serialVersionUID = 8355859683013334832L;
33
	private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
34
		//removeLastDate process the data and store it for further computations
35
 
36
	private void fetchAndSave(){
37
		Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
38
		cal.add(Calendar.DATE, -1);
39
		Date lastDate = cal.getTime();
40
		//iterate through map for each date and generate computations
41
		String data = sendGetRequest(GOOGLE_SEARCH_DATA_URL, null);
42
		try {
43
			JSONArray jsonArray = new JSONArray(data);
44
			List<String> searchStats = new ArrayList<String>();
45
			for(int i=0; i<jsonArray.length(); i++){
46
				JSONObject json = jsonArray.getJSONObject(i);
47
				String queryString = json.getString("queryString");
48
				Double searchConvRate = Double.parseDouble(json.getString("searchConvRate"));
49
				//filter all numberic strings
50
				if(!isDoubleNumber(queryString)  && searchConvRate.compareTo(0d) > 0){
51
					searchStats.add(queryString);
52
				}
53
			}
54
			CreationUtils.storeSearchStats(sdf.format(lastDate), searchStats);
55
			cal.add(Calendar.DATE, -30);
56
			//Remove data for last date
57
			CreationUtils.deleteSearchStats(sdf.format(cal.getTime()));
58
		} catch (JSONException e) {
59
			// TODO Auto-generated catch block
60
			e.printStackTrace();
61
		} catch (Exception e) {
62
			// TODO Auto-generated catch block
63
			e.printStackTrace();
64
		}
65
	}
66
 
67
		//Get all the search terms used in last 30 days and compute them
68
	private List<String> getAllSearchedTerms(){
69
		Set<String> set = new HashSet<String>();
70
		Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
71
		List<String> searchTerms=null;
72
		int i=1;
73
		while(i<=30){
8698 amit.gupta 74
			i++;
75
			cal.add(Calendar.DATE, -1);
5600 amit.gupta 76
			try {
77
				searchTerms = CreationUtils.getSearchStats(sdf.format(cal.getTime()));
78
			} catch (Exception e) {
79
				// TODO Auto-generated catch block
80
				e.printStackTrace();
81
				continue;
82
			}
83
			if(searchTerms != null){
84
				set.addAll(searchTerms);
85
			} else continue;
86
		}
87
 
88
		return new ArrayList<String>(set);
89
	}
90
 
91
	public void generate(){
92
		fetchAndSave();
93
		String alphabeticalTemplate = "Search keywords starting with <b>{0}</b>";
94
		String levelOneTitle = "Most Frequently Searched";
95
		String levelTwoTitle = "";
96
		List<String> list = this.getAllSearchedTerms();
97
		if(list != null && !list.isEmpty()){
98
			Map<String, List<List<String>>> map = new HashMap<String, List<List<String>>>();
99
			for(String keyword : list){
100
				String startsWith = keyword.substring(0,1).toLowerCase();
101
				List<List<String>> map1;
102
				if(map.containsKey(startsWith)){
103
					map1 = map.get(startsWith);
104
				}else {
105
					map1 = new ArrayList<List<String>>();
106
					map.put(startsWith, map1);
107
				}
108
				List<String> l1 = new ArrayList<String>();
109
				l1.add(keyword);
110
				l1.add("/search?q=" + keyword.replaceAll(" +", "+") + "&category=10000");
111
				map1.add(l1);
112
			}
113
			LevelHierarchy lh = new LevelHierarchy(alphabeticalTemplate, levelOneTitle, levelTwoTitle, map);
114
			lh.generatePages();
115
		}
116
	}
117
 
118
	public boolean isDoubleNumber(String num) {
119
	    try {
120
	    	Double.parseDouble(num);
121
	    } catch(NumberFormatException nfe) {
122
    		return false;
123
		}
124
	    return true;
125
    }
126
 
127
	/**
128
	 * 
129
	 * @param endpoint
130
	 * @param requestParameters
131
	 * @return
132
	 */
133
	 private String sendGetRequest(String endpoint, String requestParameters)
134
     {
135
             String result = null;
136
             try
137
             {
138
                     String urlStr = endpoint;
139
                     if (requestParameters != null && requestParameters.length () > 0){
140
                             urlStr += "?" + requestParameters;
141
                     }
142
                     URL url = new URL(urlStr);
143
                     URLConnection conn = url.openConnection ();
144
 
145
                     // Get the response
146
                     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
147
                     StringBuffer sb = new StringBuffer();
148
                     String line;
149
                     while ((line = rd.readLine()) != null)
150
                     {
151
                             sb.append(line);
152
                     }
153
                     rd.close();
154
                     result = sb.toString();
155
             } catch (Exception e){
156
                     e.printStackTrace();
157
             }
158
 
159
             return result;
160
     }
161
 
162
	 public static void main(String [] args) throws ParseException {
163
		 MostFrequentlySearchedKeywords mfsk = new MostFrequentlySearchedKeywords();
164
		 mfsk.generate();
165
/*		 
166
 
167
 
168
		    	SimpleDateFormat iSdf = new SimpleDateFormat("yyyyMMdd");
169
		        iSdf.setTimeZone(TimeZone.getTimeZone("IST"));
170
		    	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
171
		    	String dateStr = "20120101";
172
		    	Date date = iSdf.parse(dateStr);
173
		    	System.out.println(date);
174
 
175
		    	cal.add(Calendar.DATE, -1);
176
			    date = iSdf.parse(iSdf.format(cal.getTime()));
177
			    System.out.println(date);*/
178
 
179
	 }
180
}