!747

m {
  // in
  static S query = "Java class declarations";
  
  // intermediate
  static S url, json;
  
  // out
  static O data;
  static new List<GoogleResult> results;
  
  static class GoogleResult {
    S url, cacheurl, title;
  }
  
  p {
    url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=" + urlencode(query);
    json = loadPage(url);
    //print(json);
    //print();
    data = jsonDecode(json);
    //print(structure(data));
    
    O responseData = ((Map) data).get("responseData");
    //print(structure(responseData));
    
    List<Map> _results = cast ((Map) responseData).get("results");
    //print(structure(_results));
    
    for (int i = 0; i < _results.size(); i++) {
      Map row = _results.get(i);
      //print(structure(row));
      new GoogleResult r;
      r.url = (S) row.get("unescapedUrl");
      r.cacheurl = (S) row.get("cacheUrl");
      r.title = (S) row.get("titleNoFormatting");
      print(structure(r));
      results.add(r);
    }
  }
}