;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Jun 2001
;;;;
-;;;; $Id: pubmed-src.lisp,v 1.1 2003/06/06 22:04:05 kevin Exp $
+;;;; $Id$
;;;;
;;;; This file, part of cl-pubmed, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(defparameter +pubmed-host+ "www.ncbi.nlm.nih.gov")
(defparameter +pubmed-query-url+ "/entrez/utils/pmqty.fcgi")
(defparameter +pubmed-fetch-url+ "/entrez/utils/pmfetch.fcgi")
+(defparameter +proxy-host+ nil)
(define-condition pubmed-condition ()
(define-condition pubmed-server-error (error pubmed-condition)
((response :initarg :response
:initform nil
- :reader pubmed-server-error-response))
+ :reader pubmed-condition-response))
(:report (lambda (c stream)
(format stream "A PubMed server error occurred.")
- (awhen (pubmed-server-error-response c)
+ (awhen (pubmed-condition-response c)
(format stream " The server response was:~&~S" it)))))
(define-condition pubmed-query-error (error pubmed-condition)
((response :initarg :response
:initform nil
- :reader pubmed-query-error-response))
+ :reader pubmed-condition-response))
(:report (lambda (c stream)
(format stream "A PubMed server error occurred.")
- (awhen (pubmed-query-error-response c)
+ (awhen (pubmed-condition-response c)
(format stream " The server response was:~&~S" it)))))
;;; Article-Set and Article Classes
(string-append ref (format nil ":~a" it)))
ref))
-(defmethod print-article-set ((artset pm-article-set) &key (os *standard-output*) (format :text)
- (complete nil) (print-link t))
+(defmethod print-article-set ((artset pm-article-set)
+ &key (os *standard-output*) (format :text)
+ (complete nil) (print-link nil))
"Display an article set to specified stream in specified format"
- (dotimes (i (articles-count artset))
- (print-article (nth i (articles artset)) :os os :format format
- :complete complete :print-link print-link))
- artset)
+ (dotimes (i (articles-count artset) artset)
+ (if (nth i (articles artset))
+ (print-article (nth i (articles artset)) :os os :format format
+ :complete complete :print-link print-link)
+ (princ "NULL Article" os))))
(defmethod print-article ((art pm-article) &key (os *standard-output*)
- (format :text) (complete nil) (print-link t))
+ (format :text) (complete nil) (print-link nil))
"Display an article"
(ecase format
(:text
(:html
(let ((has-link (or (article-abstract art) (article-mesh-headings art))))
(when (and print-link has-link)
- (format os "<a href=\"~a?key=~a\">" (make-url "print-article") (article-pmid art)))
- (format os "<div class=\"article-title\">~a</div>~%" (article-title art))
+ (format os "<a href=\"~A\">" (funcall print-link
+ (article-pmid art))))
+ (format os "<div class=\"article-title\">~a</div>~%"
+ (article-title art))
(when (and print-link has-link)
(format os "</a>"))
(format os "<div class=\"article-authors\">~a</div>~%"
(net.aserve.client:do-http-request
(format nil "http://~a~a" +pubmed-host+ +pubmed-query-url+)
:method :get
- :query query-alist)))
+ :query query-alist
+ :proxy *proxy-host*)))
(defun pubmed-fetch-pmids-xml (pmids)
"Fetch articles for a list of PubMed ID's and return XML string"
:method :get
:query
`(("db" . "PubMed") ("report" . "xml") ("mode" . "text")
- ("id" . ,(list-to-delimited-string pmids #\,))))))
+ ("id" . ,(list-to-delimited-string pmids #\,)))
+ :proxy *proxy-host*)))
;;; XML Extraction Routines