Browse Source

Parsing de efetch terminé (avec un minimum de gestion d'erreurs)

Enregistrement dans la base !
master
Maxime Wack 11 years ago
parent
commit
e001e04df4
2 changed files with 48 additions and 25 deletions
  1. +12
    -1
      CosMoS/bdd.cpp
  2. +36
    -24
      CosMoS/recherche.cpp

+ 12
- 1
CosMoS/bdd.cpp View File

@@ -373,5 +373,16 @@ bool class_bdd::publiexists(const wxString& id)

void class_bdd::addpubli(wxString titre, wxString auteurs, wxString abstract, wxString revue, wxString lien, wxString date)
{
titre.Replace("\"", "_");
abstract.Replace("\"", "_");
wxString requete = "INSERT OR REPLACE INTO Publi (titre, auteurs, abstract, revue, lien, date_publi) VALUES (";
requete << "\"" << titre << "\", "
<< "\"" << auteurs << "\", "
<< "\"" << abstract << "\", "
<< "\"" << revue << "\", "
<< "\"" << lien << "\", "
<< "\"" << date << "\");";
rc = sqlite3_exec(db, requete, NULL, NULL, NULL);
if (rc)
wxMessageBox(_itoW(rc) + "\n" + requete);
}

+ 36
- 24
CosMoS/recherche.cpp View File

@@ -104,33 +104,47 @@ void class_recherche::parsefetch()
parcours = parcours->FirstChildElement("Journal"); // Journal
parcours = parcours->FirstChildElement("JournalIssue"); // JournalIssue
parcours = parcours->FirstChildElement("PubDate"); // PubDate
date << parcours->FirstChildElement("Month")->GetText(); // *Month
date << " " << parcours->FirstChildElement("Year")->GetText(); // *Year
if (parcours->FirstChildElement("Day"))
date << parcours->FirstChildElement("Day")->GetText(); // *Day
if (parcours->FirstChildElement("Month"))
date << parcours->FirstChildElement("Month")->GetText(); // *Month
if (parcours->FirstChildElement("Year"))
date << parcours->FirstChildElement("Year")->GetText(); // *Year
parcours = parcours->Parent()->ToElement(); // JournalIssue
revue << parcours->NextSiblingElement("ISOAbbreviation")->GetText(); // *ISOAbbreviation
parcours = parcours->Parent()->ToElement(); // Journal
titre << parcours->NextSiblingElement("ArticleTitle")->GetText(); // *ArticleTitle
parcours = parcours->NextSiblingElement("Abstract"); // Abstract
XMLElement* parcoursabstract = parcours->FirstChildElement("AbstractText"); // AbstractText
do
{
abstract << parcoursabstract->FirstAttribute()->Value() << " :\n";
abstract << parcoursabstract->GetText() << "\n";
parcoursabstract=parcoursabstract->NextSiblingElement("AbstractText");
}while(parcoursabstract);
if (parcours->NextSiblingElement("Abstract"))
{
parcours = parcours->NextSiblingElement("Abstract"); // Abstract
XMLElement* parcoursabstract = parcours->FirstChildElement("AbstractText"); // AbstractText
do
{
if (parcoursabstract->FirstAttribute())
abstract << parcoursabstract->FirstAttribute()->Value() << " :\n";
abstract << parcoursabstract->GetText() << "\n";
parcoursabstract=parcoursabstract->NextSiblingElement("AbstractText");
}while(parcoursabstract);
}
else
abstract = "";
parcours = parcours->NextSiblingElement("AuthorList"); // AuthorList
XMLElement* parcoursauteurs = parcours->FirstChildElement("Author"); // Author
do
{
auteurs << parcoursauteurs->FirstChildElement("LastName")->GetText();
auteurs << " " << parcoursauteurs->FirstChildElement("ForeName")->GetText() << ",";
if (parcoursauteurs->FirstChildElement("ForeName"))
auteurs << " " << parcoursauteurs->FirstChildElement("ForeName")->GetText() << ",";
else if (parcoursauteurs->FirstChildElement("Initials"))
auteurs << " " << parcoursauteurs->FirstChildElement("Initials")->GetText() << ",";
else
auteurs << ",";
parcoursauteurs=parcoursauteurs->NextSiblingElement("Author");
}while(parcoursauteurs);
auteurs = auteurs.BeforeLast(',');
parcours = parcours->Parent()->Parent()->Parent()->ToElement()->NextSiblingElement("PubmedArticle");
bdd->addpubli(titre, auteurs, abstract, revue, lien, date);
wxMessageBox(titre + "\n" + abstract);
}while(parcours);
delete(doc);
@@ -140,9 +154,10 @@ void class_recherche::parsefetch()

void class_recherche::efetch()
{
bool accessdenied = false;
bool accessdenied;
do
{
accessdenied = false;
wxString requete = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=";
for (unsigned int i=0; i < idresult.GetCount(); i++)
requete << idresult[i] << ",";
@@ -163,17 +178,15 @@ void class_recherche::efetch()
if (curlhandle)
curl_easy_perform(curlhandle);
//wxMessageBox(curldata.content);
if (wxString(curldata.content).Left(6) == "<HTML>")
{
accessdenied = true;
time_t timer = time(NULL);
wxProgressDialog progress_dialog("Erreur proxy", _T("En attente du proxy"), 300, NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME);
while (time(NULL) < (timer + 300))
wxProgressDialog progress_dialog("Erreur proxy", _T("En attente du proxy"), 120, NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME);
while (time(NULL) < (timer + 120))
progress_dialog.Update(time(NULL) - timer);
progress_dialog.Update(300);
progress_dialog.Update(120);
if (curldata.content)
free (curldata.content);
}
@@ -211,9 +224,10 @@ void class_recherche::parsesearch()

void class_recherche::esearch(wxString requete)
{
bool accessdenied = false;
bool accessdenied;
do
{
accessdenied = false;
curl_easy_setopt (curlhandle, CURLOPT_URL, _C(requete));
if (configuration->IsUseproxy())
@@ -230,16 +244,14 @@ void class_recherche::esearch(wxString requete)
if (curlhandle)
curl_easy_perform(curlhandle);
//wxMessageBox(curldata.content);
if (wxString(curldata.content).Left(6) == "<HTML>")
{
accessdenied = true;
time_t timer = time(NULL);
wxProgressDialog progress_dialog("Erreur proxy", _T("En attente du proxy"), 300, NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME);
while (time(NULL) < (timer + 300))
wxProgressDialog progress_dialog("Erreur proxy", _T("En attente du proxy"), 120, NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME);
while (time(NULL) < (timer + 120))
progress_dialog.Update(time(NULL) - timer);
progress_dialog.Update(300);
progress_dialog.Update(120);
if (curldata.content)
free (curldata.content);
}


Loading…
Cancel
Save