-
-
Save domoritz/2012629 to your computer and use it in GitHub Desktop.
<?php | |
$auth_url = "http://search.isiknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl"; | |
$auth_client = @new SoapClient($auth_url); | |
$auth_response = $auth_client->authenticate(); | |
$search_url = "http://search.isiknowledge.com/esti/wokmws/ws/WokSearchLite?wsdl"; | |
$search_client = @new SoapClient($search_url); | |
$search_client->__setCookie('SID',$auth_response->return); | |
$search_array = array( | |
'queryParameters' => array( | |
'databaseID' => 'WOS', | |
'userQuery' => 'AU=Douglas T*', | |
'editions' => array( | |
array('collection' => 'WOS', 'edition' => 'SSCI'), | |
array('collection' => 'WOS', 'edition' => 'SCI') | |
), | |
'queryLanguage' => 'en' | |
), | |
'retrieveParameters' => array( | |
'count' => '5', | |
'fields' => array( | |
array('name' => 'Date', 'sort' => 'D') | |
), | |
'firstRecord' => '1' | |
) | |
); | |
try{ | |
$search_response = $search_client->search($search_array); | |
} catch (Exception $e) { | |
echo $e->getMessage(); | |
} | |
print_r($search_response); | |
?> |
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
from suds.client import Client | |
from suds.transport.http import HttpTransport | |
import urllib2 | |
class HTTPSudsPreprocessor(urllib2.BaseHandler): | |
def __init__(self, SID): | |
self.SID = SID | |
def http_request(self, req): | |
req.add_header('cookie', 'SID="'+self.SID+'"') | |
return req | |
https_request = http_request | |
class WokmwsSoapClient(): | |
""" | |
main steps you have to do: | |
soap = WokmwsSoapClient() | |
results = soap.search(...) | |
""" | |
def __init__(self): | |
self.url = self.client = {} | |
self.SID = '' | |
self.url['auth'] = 'http://search.isiknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl' | |
self.url['search'] = 'http://search.isiknowledge.com/esti/wokmws/ws/WokSearchLite?wsdl' | |
self.prepare() | |
def __del__(self): | |
self.close() | |
def prepare(self): | |
"""does all the initialization we need for a request""" | |
self.initAuthClient() | |
self.authenticate() | |
self.initSearchClient() | |
def initAuthClient(self): | |
self.client['auth'] = Client(self.url['auth']) | |
def initSearchClient(self): | |
http = HttpTransport() | |
opener = urllib2.build_opener(HTTPSudsPreprocessor(self.SID)) | |
http.urlopener = opener | |
self.client['search'] = Client(self.url['search'], transport = http) | |
def authenticate(self): | |
self.SID = self.client['auth'].service.authenticate() | |
def close(self): | |
self.client['auth'].service.closeSession() | |
def search(self, query): | |
qparams = { | |
'databaseID' : 'WOS', | |
'userQuery' : query, | |
'queryLanguage' : 'en', | |
'editions' : [{ | |
'collection' : 'WOS', | |
'edition' : 'SCI', | |
},{ | |
'collection' : 'WOS', | |
'edition' : 'SSCI', | |
}] | |
} | |
rparams = { | |
'count' : 5, # 1-100 | |
'firstRecord' : 1, | |
'fields' : [{ | |
'name' : 'Relevance', | |
'sort' : 'D', | |
}], | |
} | |
return self.client['search'].service.search(qparams, rparams) |
require 'savon' | |
require 'handsoap' | |
require 'pp' | |
class Soapy | |
def initialize(opts) | |
@client = Savon::Client | |
@auth_url = opts[:auth_url] || | |
"http://search.isiknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl" | |
@search_url = opts[:search_url] || | |
"http://search.isiknowledge.com/esti/wokmws/ws/WokSearchLite?wsdl" | |
@search_xml = opts[:search_xml] || | |
<<-EOF | |
<queryParameters> | |
<databaseID>WOS</databaseID> | |
<userQuery>AU=Douglas T*</userQuery> | |
<editions> | |
<collection>WOS</collection> | |
<edition>SSCI</edition> | |
</editions> | |
<editions> | |
<collection>WOS</collection> | |
<edition>SCI</edition> | |
</editions> | |
<queryLanguage>en</queryLanguage> | |
</queryParameters> | |
<retrieveParameters> | |
<count>5</count> | |
<fields> | |
<name>Date</name> | |
<sort>D</sort> | |
</fields> | |
<firstRecord>1</firstRecord> | |
</retrieveParameters> | |
EOF | |
end | |
def authenticate(auth_url=@auth_url) | |
@auth_client ||= @client.new(@auth_url) | |
@auth_client.request :authenticate | |
@session_cookie = @auth_client.http.headers["Cookie"] | |
@search_client.http.headers["Cookie"] = @session_cookie if @search_client | |
end | |
def search(query=@search_xml) | |
@search_client ||= @client.new(@search_url) | |
authenticate if @session_cookie.nil? | |
@last_search = @search_client.request(:search) { soap.body = query} | |
end | |
def destroy | |
@auth_client.request :close_session | |
end | |
end | |
# Savon | |
soap = Soapy.new | |
pp soap.search | |
# Handsoap | |
# So... the Handsoap API turned out to be a pain, so let's just use Savon. |
Also running wos.php i retrieve the same error:
"The Web Service (version 2.0) has been retired permanently. Please contact Thomson Reuters IP and Science Technical Support http://ip-science.thomsonreuters.com/techsupport/ for information on how to obtain a new version of our Web Service."
Is there a new version? Does anyone knows something?
Thanks.
Here is the description of the web service version 3.0: http://ipscience-help.thomsonreuters.com/wosWebServicesLite/WebServicesLiteOverviewGroup/Introduction.html
I'm trying to get use version 3.0, anyone managed to get it working?
I got it working! Just change databaseID
to databaseId
and the new URLs are:
http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl
,
http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl
.
I created a python client library and cli tool with also authenticated access. You can install it with:
pip install wos
Github repository: https://github.com/enricobacis/wos
PyPI: https://pypi.python.org/pypi/wos
Does anyone know if they provide API keys for institutional users?
I need help.
I log into WoS via web interface and institutional access.
I copy the SID that appears in the session and use it with wos command line but it gives me error:
wos -s Z2I5xJejzCTcVtrz2lH doi '10.1007/s00283-010-9170-7'
ERROR: (SEE0003) There is a problem with your session identifier (SID). Reason: Error received from a server supporting the Web service. Cause: Supporting server error message = [Session not found: SID=Z2I5xJejzCTcVtrz2lH NodeID=W6]. Supporting server error code = [Server.sessionNotFound]. Remedy: If the session identifier is expired or invalid, get a new session identifier and submit your request again. If the session identifier is missing correct your SOAP client. Otherwise call customer support.
I have tried several times with some minor changes and different sessions, but to no avail.
Help would be very much appreciated.
See also recent work we have done in ruby using the savon gem
Thanks for the examples.
I created a nodejs code, retrieves records pages by page, matches Quartile values with journal issn/eissn codes by using a quartile dictionary created on 2020, then prints them:
https://github.com/zakcali/wos-lite-api-nodejs
FYI, running the python version of this gives this error:
The Web Service (version 2.0) has been retired permanently.