Subversion Repositories SmartDukaan

Rev

Rev 5604 | Go to most recent revision | Details | 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
 
28
	public static final String GOOGLE_SEARCH_DATA_URL = "http://saholic-datalog.appspot.com/jsp/export-search-activity.jsp";
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){
74
			cal.add(Calendar.DATE, -(i++));
75
			try {
76
				searchTerms = CreationUtils.getSearchStats(sdf.format(cal.getTime()));
77
			} catch (Exception e) {
78
				// TODO Auto-generated catch block
79
				e.printStackTrace();
80
				continue;
81
			}
82
			if(searchTerms != null){
83
				set.addAll(searchTerms);
84
			} else continue;
85
		}
86
 
87
		return new ArrayList<String>(set);
88
	}
89
 
90
	public void generate(){
91
		fetchAndSave();
92
		String alphabeticalTemplate = "Search keywords starting with <b>{0}</b>";
93
		String levelOneTitle = "Most Frequently Searched";
94
		String levelTwoTitle = "";
95
		List<String> list = this.getAllSearchedTerms();
96
		if(list != null && !list.isEmpty()){
97
			Map<String, List<List<String>>> map = new HashMap<String, List<List<String>>>();
98
			for(String keyword : list){
99
				String startsWith = keyword.substring(0,1).toLowerCase();
100
				List<List<String>> map1;
101
				if(map.containsKey(startsWith)){
102
					map1 = map.get(startsWith);
103
				}else {
104
					map1 = new ArrayList<List<String>>();
105
					map.put(startsWith, map1);
106
				}
107
				List<String> l1 = new ArrayList<String>();
108
				l1.add(keyword);
109
				l1.add("/search?q=" + keyword.replaceAll(" +", "+") + "&category=10000");
110
				map1.add(l1);
111
			}
112
			LevelHierarchy lh = new LevelHierarchy(alphabeticalTemplate, levelOneTitle, levelTwoTitle, map);
113
			lh.generatePages();
114
		}
115
	}
116
 
117
	public boolean isDoubleNumber(String num) {
118
	    try {
119
	    	Double.parseDouble(num);
120
	    } catch(NumberFormatException nfe) {
121
    		return false;
122
		}
123
	    return true;
124
    }
125
 
126
	/**
127
	 * 
128
	 * @param endpoint
129
	 * @param requestParameters
130
	 * @return
131
	 */
132
	 private String sendGetRequest(String endpoint, String requestParameters)
133
     {
134
             String result = null;
135
             try
136
             {
137
                     String urlStr = endpoint;
138
                     if (requestParameters != null && requestParameters.length () > 0){
139
                             urlStr += "?" + requestParameters;
140
                     }
141
                     URL url = new URL(urlStr);
142
                     URLConnection conn = url.openConnection ();
143
 
144
                     // Get the response
145
                     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
146
                     StringBuffer sb = new StringBuffer();
147
                     String line;
148
                     while ((line = rd.readLine()) != null)
149
                     {
150
                             sb.append(line);
151
                     }
152
                     rd.close();
153
                     result = sb.toString();
154
             } catch (Exception e){
155
                     e.printStackTrace();
156
             }
157
 
158
             return result;
159
     }
160
 
161
	 public static void main(String [] args) throws ParseException {
162
		 MostFrequentlySearchedKeywords mfsk = new MostFrequentlySearchedKeywords();
163
		 mfsk.generate();
164
/*		 
165
 
166
 
167
		    	SimpleDateFormat iSdf = new SimpleDateFormat("yyyyMMdd");
168
		        iSdf.setTimeZone(TimeZone.getTimeZone("IST"));
169
		    	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
170
		    	String dateStr = "20120101";
171
		    	Date date = iSdf.parse(dateStr);
172
		    	System.out.println(date);
173
 
174
		    	cal.add(Calendar.DATE, -1);
175
			    date = iSdf.parse(iSdf.format(cal.getTime()));
176
			    System.out.println(date);*/
177
 
178
	 }
179
}