;;; org-ref-wos.el --- Web of Science functions -*- lexical-binding: t; -*- ;; Copyright (C) 2015 John Kitchin ;; Author: John Kitchin ;; Keywords: ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Adds a new org-mode link for a search in Web of Science. ;;; and an org-mode link for a link to an Accession number. (require 'org) (require 's) (require 'org-ref-utils) ;;; Code: (org-ref-link-set-parameters "wos" :follow (lambda (accession-number) (browse-url (concat "http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/" accession-number))) :export (lambda (accession-number desc format) (cond ((eq format 'html) (format "%s" accession-number (or desc (concat "wos:" accession-number))))))) (org-ref-link-set-parameters "wos-search" :follow (lambda (path) (browse-url (format "http://gateway.webofknowledge.com/gateway/Gateway.cgi?topic=%s&GWVersion=2&SrcApp=WEB&SrcAuth=HSB&DestApp=UA&DestLinkType=GeneralSearchSummary" (s-join "+" (split-string path))))) :export (lambda (link desc format) (cond ((eq format 'html) (format "%s" (format "http://gateway.webofknowledge.com/gateway/Gateway.cgi?topic=%s&GWVersion=2&SrcApp=WEB&SrcAuth=HSB&DestApp=UA&DestLinkType=GeneralSearchSummary" (s-join "+" (split-string link))) (or desc link)))))) ;;;###autoload (defun wos-search () "Open the word at point or selection in Web of Science as a topic query." ;; the url was derived from this page: http://wokinfo.com/webtools/searchbox/ (interactive) (browse-url (format "http://gateway.webofknowledge.com/gateway/Gateway.cgi?topic=%s&GWVersion=2&SrcApp=WEB&SrcAuth=HSB&DestApp=UA&DestLinkType=GeneralSearchSummary" (if (region-active-p) (mapconcat 'identity (split-string (buffer-substring (region-beginning) (region-end))) "+") (thing-at-point 'word))))) ;;;###autoload (defun wos () "Open Web of Science search page in a browser." (interactive) (browse-url "http://apps.webofknowledge.com")) ;;* Accession numbers ;; see http://kitchingroup.cheme.cmu.edu/blog/2015/06/08/Getting-a-WOS-Accession-number-from-a-DOI/ (defvar *wos-redirect* nil "Holds the redirect from a `url-retrieve' callback function.") (defvar *wos-waiting* nil "Non-nil when waiting for a `url-retrieve' redirect.") (defun wos-get-wos-redirect (url) "Return final redirect URL for open-url." (setq *wos-waiting* t) (url-retrieve url (lambda (status) (setq *wos-redirect* (car (last status))) (setq *wos-waiting* nil))) (while *wos-waiting* (sleep-for 0.1)) (url-unhex-string *wos-redirect*)) (defun wos-doi-to-accession-number (doi) "Return a WOS Accession number for a DOI." (let* ((open-url (concat "http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:doi/" doi)) (redirect (wos-get-wos-redirect open-url))) (message redirect) (string-match "&KeyUT=WOS:\\([^&]*\\)&" redirect) (match-string 1 redirect))) (provide 'org-ref-wos) ;;; org-ref-wos.el ends here