1
22
23 package com.liferay.portlet.weather.util;
24
25 import com.liferay.portal.kernel.util.GetterUtil;
26 import com.liferay.portal.kernel.util.HtmlUtil;
27 import com.liferay.portal.kernel.util.HttpUtil;
28 import com.liferay.portal.kernel.webcache.WebCacheException;
29 import com.liferay.portal.kernel.webcache.WebCacheItem;
30 import com.liferay.portlet.weather.model.Weather;
31 import com.liferay.util.Time;
32
33
39 public class WeatherWebCacheItem implements WebCacheItem {
40
41 public WeatherWebCacheItem(String zip) {
42 _zip = zip;
43 }
44
45 public Object convert(String key) throws WebCacheException {
46 Weather weather = null;
47
48 try {
49 String text = HtmlUtil.stripComments(HttpUtil.URLtoString(
50 "http://weather.yahoo.com/search/weather2?p=" +
51 HttpUtil.encodeURL(_zip)));
52
53 int x = text.indexOf("forecast-temperature");
54
55 x = text.indexOf("h3>", x) + 3;
56
57 int y = text.indexOf("°", x);
58
59 float temperature = GetterUtil.getFloat(text.substring(x, y));
60
61 x = text.indexOf("background:url(", x);
62 x = text.indexOf("http://", x);
63
64 y = text.indexOf(".png", x) - 1;
65
66 String iconURL = text.substring(x, y) + "s.png";
67
68 weather = new Weather(_zip, iconURL, temperature);
69 }
70 catch (Exception e) {
71 throw new WebCacheException(_zip);
72 }
73
74 return weather;
75 }
76
77 public long getRefreshTime() {
78 return _REFRESH_TIME;
79 }
80
81 private static final long _REFRESH_TIME = Time.MINUTE * 20;
82
83 private String _zip;
84
85 }