|
39 | 39 | #include <objtools/eutils/efetch/PubmedBookArticle.hpp>
|
40 | 40 | #include <objtools/eutils/efetch/PubmedBookArticleSet.hpp>
|
41 | 41 |
|
42 |
| -#include <objtools/eutils/api/esearch.hpp> |
| 42 | +#include <objtools/eutils/esearch/ESearchResult.hpp> |
43 | 43 | #include <objtools/eutils/esearch/IdList.hpp>
|
44 | 44 | #include <objects/pubmed/Pubmed_entry.hpp>
|
45 | 45 | #include <objects/medline/Medline_entry.hpp>
|
@@ -210,10 +210,10 @@ void SCitMatch::FillFromArticle(const CCit_art& A)
|
210 | 210 | namespace
|
211 | 211 | {
|
212 | 212 |
|
213 |
| -struct CSearch_Request : CESearch_Request |
| 213 | +struct CSearch_Request : CEUtils_Request |
214 | 214 | {
|
215 | 215 | CSearch_Request(CRef<CEUtils_ConnContext>& ctx) :
|
216 |
| - CESearch_Request("pubmed", ctx) |
| 216 | + CEUtils_Request(ctx, "esearch.fcgi") |
217 | 217 | {
|
218 | 218 | }
|
219 | 219 |
|
@@ -316,13 +316,34 @@ struct CSearch_Request : CESearch_Request
|
316 | 316 | return true;
|
317 | 317 | }
|
318 | 318 |
|
319 |
| - TEntrezId GetResponse(EPubmedError& err) |
| 319 | + string m_Term; |
| 320 | + |
| 321 | + string GetQueryString() const override |
| 322 | + { |
| 323 | + string args = "db=pubmed&field=title&retmax=2&rettype=ulist&term="; |
| 324 | + args += NStr::URLEncode(m_Term, NStr::eUrlEnc_ProcessMarkChars); |
| 325 | + return args; |
| 326 | + } |
| 327 | + |
| 328 | + ESerialDataFormat GetSerialDataFormat() const override |
| 329 | + { |
| 330 | + return eSerial_Xml; |
| 331 | + } |
| 332 | + |
| 333 | + TEntrezId GetResponse(EPubmedError& err, string term) |
320 | 334 | {
|
321 | 335 | err = EPubmedError::operational_error;
|
322 | 336 |
|
323 |
| - CRef<esearch::CESearchResult> result = this->GetESearchResult(); |
324 |
| - if (result && result->IsSetData()) { |
325 |
| - auto& D = result->GetData(); |
| 337 | + m_Term = term; |
| 338 | + |
| 339 | + CObjectIStream* is = GetObjIStream(); |
| 340 | + _ASSERT(is); |
| 341 | + esearch::CESearchResult result; |
| 342 | + *is >> result; |
| 343 | + Disconnect(); |
| 344 | + |
| 345 | + if (result.IsSetData()) { |
| 346 | + auto& D = result.GetData(); |
326 | 347 | if (D.IsInfo() && D.GetInfo().IsSetContent() && D.GetInfo().GetContent().IsSetIdList()) {
|
327 | 348 | const auto& idList = D.GetInfo().GetContent().GetIdList();
|
328 | 349 | if (idList.IsSetId()) {
|
@@ -374,10 +395,6 @@ TEntrezId CEUtilsUpdater::CitMatch(const CPub& pub, EPubmedError* perr)
|
374 | 395 | TEntrezId CEUtilsUpdater::CitMatch(const SCitMatch& cm, EPubmedError* perr)
|
375 | 396 | {
|
376 | 397 | CSearch_Request req(m_Ctx);
|
377 |
| - req.SetField("title"); |
378 |
| - req.SetRetMax(2); |
379 |
| - req.SetUseHistory(false); |
380 |
| - req.SetRetType(CESearch_Request::eRetType_uilist); |
381 | 398 | EPubmedError err = EPubmedError::citation_not_found;
|
382 | 399 |
|
383 | 400 | // clang-format off
|
@@ -408,8 +425,7 @@ TEntrezId CEUtilsUpdater::CitMatch(const SCitMatch& cm, EPubmedError* perr)
|
408 | 425 |
|
409 | 426 | string term;
|
410 | 427 | if (CSearch_Request::BuildSearchTerm(cm, r, term)) {
|
411 |
| - req.SetTerm(term); |
412 |
| - TEntrezId pmid = req.GetResponse(err); |
| 428 | + TEntrezId pmid = req.GetResponse(err, term); |
413 | 429 | if (pmid != ZERO_ENTREZ_ID) {
|
414 | 430 | return pmid;
|
415 | 431 | }
|
|
0 commit comments