5

ISI Web of Science から出版物に関する情報を取得する python スクリプトを作成しようとしています。GitHubで domoritz の python スクリプトwos.pyを見つけました。Suds を使用して、ISI Web of Science Web サービスに接続します。私はそれを自分のpythonスクリプトにインポートし、コメントの非常に簡単な指示に従って、このコードを試しました:

from wos import *
soap = WokmwsSoapClient()
results = soap.search('Hallam')

次に、エラーが発生します。

suds.WebFault: Server raised fault: 'line 1:1: unexpected token: Hallam'

wos.py のコードを調べました。search関数は次のとおりです。

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)

実際にはタイプのWSDLページでquery見たように、単なる python 文字列にはならないのではないかと思いました。しかし、このページには、「有効な WOKQL クエリ ステートメントである必要があります。この要件は内部で適用されます」と記載されているため、特別な型を渡す必要はないように思えます。とにかく、クエリの先頭に追加しようとしましたが、同じエラーが発生しました。userQueryxs:stringuserQuery'xs:string'

このメソッドを使用する適切な方法を知っている人はいますか?

4

2 に答える 2

4

Wos Python Client次の方法でインストールできるものを使用してみてください。

pip install wos

そして、次のように使用できます。

from wos import WosClient
import wos.utils

with WosClient('JohnDoe', '12345') as client:
    print(wos.utils.query(client, 'AU=Knuth Donald'))

次のように使用する CLI ツールもあります。

wos -u 'JohnDoe' -p '12345' query 'AU=Knuth Donald'

*免責事項: 私は Web of Science で働いていませんが、クライアントの作成者です。Web of Science は通常のユーザーからの Web サービス要求を許可しないため、Web サービス アクセス (通常の WOS アクセスに加えて有料サービス) が必要です。WOS から提供されたユーザー名とパスワードを大学に提供するように依頼する必要があります。これは私のクライアントだけでなく、WOS Web サービスを使用するあらゆるものに当てはまります。*

于 2016-06-10T07:45:33.057 に答える
1

したがって、python 文字列を渡すことは問題ないようですが、検索クエリに似た文字列が必要でした。前述の Web サイトでこの例を見つけました。

<soap:Body>
  <woksearch:search xmlns:woksearch="http://woksearch.v3.wokmws.thomsonreuters.com">
  <!--  this request has the minimum required elements, 
      but contains all valid retrieve options 
      for this operation and databaseId -->
  <queryParameters>
     <databaseId>WOK</databaseId> 
     <userQuery>AU=Arce, G*</userQuery>      
     <queryLanguage>en</queryLanguage> 
  </queryParameters>
....

それで私は使っresults = soap.search('AU=Hallam')てみましたが、うまくいきました。のようなことができるようprint results.recordsFoundになり、正しい答えが得られます。

于 2013-03-15T17:25:44.217 に答える