jdc 23-jan-2008 This example shows how to use the Google AJAX search API from Tcl. You will need a Google AJAX Search API Key which you can get here .
set api_key "<your google ajax api here>" set query $argv package require http package require json set url "http://google.com/uds/GwebSearch?" append url [::http::formatQuery callback GwebSearch.RawCompletion context 0 lstkp 0 rsz large hl en sig $api_key q $query key internal v 1.0 nocache 7] set t [http::geturl $url] if { [http::ncode $t] == 200 } { set d [http::data $t] set idx 0 while { $idx >= 0 } { set idx [string first {GsearchResultClass} $d $idx] if { $idx >= 0 } { set jd [json::json2dict [string range $d [expr {$idx-2}] end]] puts "[dict get $jd url] [dict get $jd titleNoFormatting]" incr idx 5 } } } else { puts "Error=[http::error $t]" puts "Status=[http::status $t]" puts "Code=[http::code $t]" puts "Ncode=[http::ncode $t]" puts "Data=[http::data $t]" } http::cleanup $t exit
Example searching this site for tcltest:
% tclsh test.tcl tcltest site::https://wiki.tcl-lang.org https://wiki.tcl-lang.org/1502 tcltest https://wiki.tcl-lang.org/3882 How to write tcltest result values https://wiki.tcl-lang.org/13235 tcltest customMatch https://wiki.tcl-lang.org/14465 Your first tcltests https://wiki.tcl-lang.org/8235 How to mimic event generation without TK https://wiki.tcl-lang.org/11263 examples needed https://wiki.tcl-lang.org/1318 Tcl and LISP https://wiki.tcl-lang.org/9989 Toplevel widgets in a tree hierarchy: the test suite
See also json
jdc 24-jan-2008 The following piece of html contains some javascript to use the Google AJAX API to query this wiki. Again you have to provide a Google AJAX Search API Key (put it where there now is ##########). At most 32 search results can be obtained with this API.
<html> <head> <script type="text/javascript" src="http://www.google.com/jsapi?key=##########"></script> <script type="text/javascript"> google.load("search", "1"); function App(query) { this.siteSearch = new GwebSearch(); this.siteSearch.setUserDefinedLabel("Tcler's wiki"); this.siteSearch.setUserDefinedClassSuffix("siteSearch"); this.siteSearch.setSiteRestriction("https://wiki.tcl-lang.org"); this.siteSearch.setResultSetSize(GSearch.LARGE_RESULTSET); this.siteSearch.setSearchCompleteCallback(this, App.prototype.OnSearchComplete); document.getElementById("searchresult").innerHTML = "<ul>"; this.siteSearch.execute(query); document.getElementById("searchresult").innerHTML += "</ul>"; document.getElementById("searchresult").innerHTML += "<form action='http://www.google.com/search'>"; document.getElementById("searchresult").innerHTML += "<input type='test' id='q' name='q' size='20' value='" + query + " site:https://wiki.tcl-lang.org'/>"; document.getElementById("searchresult").innerHTML += "<input type='submit' value='All matches on Google' />"; document.getElementById("searchresult").innerHTML += "</form>"; } App.prototype.OnSearchComplete = function() { if (this.siteSearch.results && this.siteSearch.results.length > 0) { for (var i = 0; i < this.siteSearch.results.length; i++) { var result = this.siteSearch.results[i]; if (result.GsearchResultClass == GwebSearch.RESULT_CLASS) { document.getElementById("searchresult").innerHTML += "<li><a href='" + result.url + "'>" + result.title + "</a><p>" + result.content + "</p></li>"; } } var cursor = this.siteSearch.cursor; if (cursor && cursor.currentPageIndex < cursor.pages.length - 1) { this.siteSearch.gotoPage(cursor.currentPageIndex + 1); } } } function googleQuery() { var app = new App(document.getElementById("searchstring").value); return false; } </script> </head> <body> <form action="" method="get" onSubmit="return googleQuery();"> <input id="searchstring" size="20" /> <input type="button" value="Click Here" onClick="googleQuery();" /> </form> <div id="searchresult"></div> </body> </html>