-
-
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. |
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
Does anyone know if they provide API keys for institutional users?