Schnittstelle zum Simbad-System nur für Daten

Status
Es sind keine weiteren Antworten möglich.

David27

Neues Mitglied
Hallo,
ich suche eine Möglichkeit Daten vom Simbad-System automatisiert abzufragen. Nach Möglichkeit ohne störende HTML-Informationen.

Mein Versuch die Daten von folgender Adresse: Nachbarschaft von Sol über C++ mit Qt5 zu bekommen scheint zu scheitern. Es kommen keine Daten zurück,die Verbindung wird aber auch nicht durch Timeout oder Fehlermeldung unterbrochen.
Wenn ich die abgesendete URL direkt in den Browser eingebe bekomme ich die gewünschte Seite.
Wenn ich die URL mit curl absende bekomme ich nur die HTML -Informationen ohne Daten. Bei anderen URLs mit Daten.

Weiß jemand eine Möglichkeit/Schnittstelle die Daten direkt abzufragen, so das man sie als csv oder xml -Datei bekommt ?




Meine bisherigen Versuche mit C++ und Qt:

Hier werden die Parmeter für die URL in einen Hash geschrieben

void star_catalog_receiver::get_sol_neighborhood()
{
qDebug() << "get_sol_neighborhood started";

QHash<QString,QString> para;
para["Criteria"] = "plx>326";
para["submit"]= "submit+query";
para["OutputMode"] = "LIST";
para["maxObject"]= "1000";

qDebug() << "this->send_simbad_request(para); called";
QNetworkReply* reply_ptr = this->send_simbad_request(para);

qDebug() << "reading reply data";
QString data(reply_ptr->readAll());
qDebug() << data;
}

Hier werden nur die Daten vom Hash in eine Liste (QList) von QPair-Elementen geschrieben. Dies ist notwendig da die Methode QUrlQuery.setQueryItem nur Listen von QPair akzeptiert.


QNetworkReply* star_catalog_receiver::send_simbad_request(QHash<QString,QString> url_para)
{
qDebug("send_simbad_request(QHash<QString,QString> url_para) reached");

QUrl simbad_url("http://simbad.u-strasbg.fr/simbad/sim-sam");
QUrlQuery simbad_query;
QList<QPair<QString,QString>> itemlist;
QPair<QString,QString> item;
QHashIterator <QString,QString> url_para_iterator(url_para);
QNetworkReply *result_ptr;



qDebug("fill itemlist");

while(url_para_iterator.hasNext())
{
url_para_iterator.next();


item.first = url_para_iterator.key();
item.second = url_para_iterator.value();
// qMakePair(url_para_iterator.key(), url_para_iterator.value())

itemlist.append(item);

}

qDebug("itemlist filled");
simbad_query.setQueryItems(itemlist);
qDebug("set query");
simbad_url.setQuery(simbad_query);

qDebug("call: this->send_simbad_request(simbad_url)");
result_ptr = this->send_simbad_request(simbad_url);
qDebug("called this->send_simbad_request(simbad_url)");
return result_ptr;
}






Hier kommt der eigentlich interessante Teil:
QNetworkReply* star_catalog_receiver::send_simbad_request(QUrl url)
{
this->set_error_default();
QNetworkReply* reply_ptr;

QNetworkRequest simbad_request(url);

qDebug()<< url.toDisplayString();

reply_ptr = this->net_access_manager.get(simbad_request);
this->request_state = REQUEST_STATE::RUNNING;
while((reply_ptr->isRunning())&&(reply_ptr->error() == false))
{
//waiting for response
// qDebug()<<"Waiting for response";
// qDebug() << reply_ptr->readAll();


}

if(reply_ptr->error())
{
this->request_state = REQUEST_STATE::ERROR;
this->is_error = true;
this->error_nr = reply_ptr->error();
this->error_msg = reply_ptr->errorString();
return reply_ptr;
}

this->request_state = REQUEST_STATE::FINISHED;

return reply_ptr;

}

Die Eigenschaft this->net_access_manager ist ein Objekt von QNetworkAccessMananger. Dort findet der Aufruf statt.
In der anschließenden Schleife bleibt er dann hängen.

Vielleicht findet der eine oder andere Programmierer unter beim überfliegen den Fehler,falls er offensichtlich ist.
Es ist gut möglich,das noch weitere Fehler drin sind,ich konnte das Debuggen jedenfalls nicht beenden.


 
Zuletzt von einem Moderator bearbeitet:
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben