#include "cpt_rfqs.h"
CPT_RFQs::CPT_RFQs()
{
connect(this, &CPT_RFQs::downloadedSiteData, this, &CPT_RFQs::filterRFQs);
}
void CPT_RFQs::start_downloading()
{
getRFQinfo();
}
void CPT_RFQs::getRFQinfo()
{
rfqNetworkManager = new QNetworkAccessManager(this);
connect(rfqNetworkManager, &QNetworkAccessManager::sslErrors, this, &CPT_RFQs::sslConnectionErrors);
rfqNetworkManager
->get
(QNetworkRequest
(QUrl("http://web1.capetown.gov.za/web1/ProcurementPortal/RFQ/")));
connect(rfqNetworkManager, &QNetworkAccessManager::finished, this, [this](QNetworkReply *homePageReply){
std::string html_buffer = static_cast<std::string>(homePageReply->readAll());
xmlDoc *doc = htmlReadDoc((xmlChar*)html_buffer.c_str(), NULL, NULL, HTML_PARSE_RECOVER|HTML_PARSE_NOERROR|HTML_PARSE_NOWARNING);
xmlNode *node = xmlDocGetRootElement(doc);
xmlpp::Element *root = new xmlpp::Element(node);
auto node_set = root->find("/html/body/div/div/section/form/div/div/table/tbody");
auto containerDiv = dynamic_cast<const xmlpp::Element*>(node_set[0]);
auto elementList = containerDiv->get_children("tr");
QSet<QString> siteDataList;
for(const auto& child : elementList)
{
auto tableDiv = dynamic_cast<xmlpp::Element*>(child);
auto tableRows = tableDiv->get_children("td");
int i = 0;
for(const auto& data : tableRows)
{
auto tdElement = dynamic_cast<xmlpp::Element*>(data);
if(i == 7)
{
auto aNode = tdElement->get_children("a");
auto hrefEle = dynamic_cast<const xmlpp::Element*>(aNode.front());
dataRecord.
append(QString::fromUtf8(static_cast<std
::string>
(hrefEle
->get_attribute_value
("href")).
c_str()).
simplified());
}
else
{
std::string stdStr = static_cast<std::string>(tdElement->get_child_text()->get_content()).c_str();
dataRecord.
append(QString::fromUtf8(stdStr.
c_str()).
simplified());
}
i++;
}
tempContainer << dataRecord.at(0) << dataRecord.at(6) << dataRecord.at(4) << dataRecord.at(7);
siteDataList.insert(tempContainer.join(","));
dataRecord.clear();
tempContainer.clear();
}
xmlFreeDoc(doc);
emit downloadedSiteData(siteDataList);
homePageReply->deleteLater();
});
}
void CPT_RFQs::filterRFQs(QSet<QString> siteInfo)
{
QFile rfqRegister
("/home/ayanda/Desktop/TenderBot_Utilis/cpt/rfq_s/previosly_downloaded_rfq_s.csv");
if(!rfqRegister.
open(QFile::ReadWrite |
QFile::Text)) qDebug() << "RFQ file failed to open" <<endl;
QSet<QString> registerDataSet;
while(!inStream.atEnd())
registerDataSet.insert(inStream.readLine().simplified());
homePageDataList = siteInfo.subtract(registerDataSet);
if(!homePageDataList.isEmpty())
loginToPage();
else
emit noNewRFQs();
}
void CPT_RFQs::loginToPage()
{
QUrlQuery logins;
logins.addQueryItem("UserName","theusername");
logins.addQueryItem("Password","thepassword");
QNetworkRequest request
(QUrl("http://web1.capetown.gov.za/web1/ProcurementPortal/Account/LogOn"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
connect(rfqNetworkManager, &QNetworkAccessManager::finished, this, &CPT_RFQs::get_RFQ);
rfqNetworkManager
->post
(request, logins.
toString(QUrl::FullyEncoded).
toUtf8());
}
void CPT_RFQs::get_RFQ(QNetworkReply* reply)
{
Q_UNUSED(reply);
foreach
(const QString &value, homePageDataList
) qDebug() << value <<endl;
}
#include "cpt_rfqs.h"
CPT_RFQs::CPT_RFQs()
{
connect(this, &CPT_RFQs::downloadedSiteData, this, &CPT_RFQs::filterRFQs);
}
void CPT_RFQs::start_downloading()
{
getRFQinfo();
}
void CPT_RFQs::getRFQinfo()
{
rfqNetworkManager = new QNetworkAccessManager(this);
connect(rfqNetworkManager, &QNetworkAccessManager::sslErrors, this, &CPT_RFQs::sslConnectionErrors);
rfqNetworkManager->get(QNetworkRequest(QUrl("http://web1.capetown.gov.za/web1/ProcurementPortal/RFQ/")));
connect(rfqNetworkManager, &QNetworkAccessManager::finished, this, [this](QNetworkReply *homePageReply){
std::string html_buffer = static_cast<std::string>(homePageReply->readAll());
xmlDoc *doc = htmlReadDoc((xmlChar*)html_buffer.c_str(), NULL, NULL, HTML_PARSE_RECOVER|HTML_PARSE_NOERROR|HTML_PARSE_NOWARNING);
xmlNode *node = xmlDocGetRootElement(doc);
xmlpp::Element *root = new xmlpp::Element(node);
auto node_set = root->find("/html/body/div/div/section/form/div/div/table/tbody");
auto containerDiv = dynamic_cast<const xmlpp::Element*>(node_set[0]);
auto elementList = containerDiv->get_children("tr");
QSet<QString> siteDataList;
for(const auto& child : elementList)
{
auto tableDiv = dynamic_cast<xmlpp::Element*>(child);
auto tableRows = tableDiv->get_children("td");
int i = 0;
QStringList dataRecord;
for(const auto& data : tableRows)
{
auto tdElement = dynamic_cast<xmlpp::Element*>(data);
if(i == 7)
{
auto aNode = tdElement->get_children("a");
auto hrefEle = dynamic_cast<const xmlpp::Element*>(aNode.front());
dataRecord.append(QString::fromUtf8(static_cast<std::string>(hrefEle->get_attribute_value("href")).c_str()).simplified());
}
else
{
std::string stdStr = static_cast<std::string>(tdElement->get_child_text()->get_content()).c_str();
dataRecord.append(QString::fromUtf8(stdStr.c_str()).simplified());
}
i++;
}
QStringList tempContainer;
tempContainer << dataRecord.at(0) << dataRecord.at(6) << dataRecord.at(4) << dataRecord.at(7);
siteDataList.insert(tempContainer.join(","));
dataRecord.clear();
tempContainer.clear();
}
xmlFreeDoc(doc);
emit downloadedSiteData(siteDataList);
homePageReply->deleteLater();
});
}
void CPT_RFQs::filterRFQs(QSet<QString> siteInfo)
{
QFile rfqRegister("/home/ayanda/Desktop/TenderBot_Utilis/cpt/rfq_s/previosly_downloaded_rfq_s.csv");
if(!rfqRegister.open(QFile::ReadWrite | QFile::Text))
qDebug() << "RFQ file failed to open" <<endl;
QTextStream inStream(&rfqRegister);
QSet<QString> registerDataSet;
while(!inStream.atEnd())
registerDataSet.insert(inStream.readLine().simplified());
homePageDataList = siteInfo.subtract(registerDataSet);
if(!homePageDataList.isEmpty())
loginToPage();
else
emit noNewRFQs();
}
void CPT_RFQs::loginToPage()
{
QUrlQuery logins;
logins.addQueryItem("UserName","theusername");
logins.addQueryItem("Password","thepassword");
QNetworkRequest request(QUrl("http://web1.capetown.gov.za/web1/ProcurementPortal/Account/LogOn"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
connect(rfqNetworkManager, &QNetworkAccessManager::finished, this, &CPT_RFQs::get_RFQ);
rfqNetworkManager->post(request, logins.toString(QUrl::FullyEncoded).toUtf8());
}
void CPT_RFQs::get_RFQ(QNetworkReply* reply)
{
Q_UNUSED(reply);
foreach(const QString &value, homePageDataList)
qDebug() << value <<endl;
}
To copy to clipboard, switch view to plain text mode
#include <QTextStream>
#include <QUrlQuery>
#include <QStringList>
#include <QList>
#include <QDebug>
#include <string>
#include <QSet>
#include "page.h"
class CPT_RFQs : public Page
{
Q_OBJECT
public:
CPT_RFQs();
void start_downloading();
signals:
void downloadedSiteData(QSet<QString>);
void noNewRFQs();
void login();
public slots:
//void sslConnectionErrors(QNetworkReply *reply, const QList<QSslError> &errors);
void getRFQinfo();
void filterRFQs(QSet<QString>);
void loginToPage();
void get_RFQ(QNetworkReply*);
private:
QSet<QString> homePageDataList;
QNetworkAccessManager *rfqNetworkManager;
};
#endif // CPT_RFQS_H
#include <QTextStream>
#include <QUrlQuery>
#include <QStringList>
#include <QList>
#include <QDebug>
#include <string>
#include <QSet>
#include "page.h"
class CPT_RFQs : public Page
{
Q_OBJECT
public:
CPT_RFQs();
void start_downloading();
signals:
void downloadedSiteData(QSet<QString>);
void noNewRFQs();
void login();
public slots:
//void sslConnectionErrors(QNetworkReply *reply, const QList<QSslError> &errors);
void getRFQinfo();
void filterRFQs(QSet<QString>);
void loginToPage();
void get_RFQ(QNetworkReply*);
private:
QSet<QString> homePageDataList;
QNetworkAccessManager *rfqNetworkManager;
};
#endif // CPT_RFQS_H
To copy to clipboard, switch view to plain text mode
Bookmarks