I was reading some essays about Common Lisp and came across a few interesting libraries for accessing some of Yahoo’s Web Services APIs:
- cl-delicious: for accessing the del.icio.us API
- cl-yahoo: for accessing the Yahoo! Search API
- Clickr – for accessing the Flickr API
In the case of cl-delicious, it was a little harder to install (into SBCL on my Ubuntu Edgy system), as the author’s site has a bzipped file instead of the gzipped file that ASDF-Install expects.
~/.sbcl/site$ wget http://jarrodkoehler.com/cl-delicious/cl-delicious-0.1.tar.bz2 ~/.sbcl/site$ tar -xjf cl-delicious-0.1.tar.bz2 ~/.sbcl/site$ cd ../systems ~/.sbcl/systems$ ln -s ~/.sbcl/site/cl-delicious/cl-delicious.asd .
Now, at this point, I was running the current SBCL version from the Ubuntu Edgy repository and this version of SBCL seems to have a slight problem with the cl-delicious.asd
file so I had to do:
~/.sbcl/systems$ vim cl-delicious.asd . # Remove the line with LICENSE
It seems that upgrading to the release version of SBCL from the SBCL web site (1.0.2 as of this writing) also solves the problem and is perhaps a preferable solution.
and then
~/.sbcl/systems$ sbcl
or if you prefer, fire up Emacs and SLIME.
and then
CL-USER> (asdf:operate 'asdf:load-op 'cl-delicious) ...(a bazillion messages about loading and registering)...
and now you’re ready to do stuff, as shown in the cl-delicious page:
CL-USER> (in-package :cl-delicious) #<PACKAGE "CL-DELICIOUS"> CL-USER> (defparameter *du* (make-instance 'delicious-user :username "user" :password "password")) *DU* CL-DELICIOUS> (recent-posts *du* :count "2") (#S(POST :HREF "http://www.cs.indiana.edu/dfried_celebration.html" :DESCRIPTION "Daniel P Friedman: A Celebration" :EXTENDED NIL :HASH "9821f03f10279cad407aa8b2e5c2bef1" :OTHERS NIL :TAG "programming video" :TIME "2007-02-22T23:06:22Z") #S(POST :HREF "http://www.math.gatech.edu/~cain/textbooks/onlinebooks.html" :DESCRIPTION "Online texts" :EXTENDED NIL :HASH "79b0c74c3d2941dbd57ac922b471e781" :OTHERS NIL :TAG "math books" :TIME "2007-02-22T20:50:26Z"))
It was easier to install cl-yahoo.
CL-USER> (asdf-install:install 'cl-yahoo)
However, I ran into problems getting Web search to work:
CL-USER> (asdf:oos 'asdf:load-op :cl-yahoo) NIL CL-USER> (use-package :cl-yahoo) T CL-USER> (ysearch :web :query "lisp" :type 'any :results 2) XML parser encountered eof before end of entity. [Condition of type S-XML:XML-PARSER-ERROR] Restarts: 0: [ABORT] Return to SLIME's top level. 1: [TERMINATE-THREAD] Terminate this thread (#) Backtrace: 0: (S-XML::RESOLVE-ENTITY #<SB-SYS:FD-STREAM for "a constant string" {B477469}> > "invalid value: uri - http://api.search.yahoo.com/WebSearchService/V1/webSearch?" #<HASH-TABLE :TEST EQUAL :COUNT 6 {B47C031}> "appid=cl-yahoo&query=lisp&type=any&results=2&start=3&adult_ok=1</Message>^M ^M <!-- ws02.search.scd.yahoo.com uncompressed Sat Mar 3 16:16:03 PST 2007 --> > ") 1: (S-XML::PARSE-TEXT #<SB-SYS:FD-STREAM for "a constant string" {B477469}> ...
I guess I’ll email the author about that.