실시간 중간 버젼
git-svn-id: svn://192.168.0.12/source@78 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
@@ -6,54 +6,23 @@
|
||||
#include <QFileDialog>
|
||||
#include <QPushButton>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
#include <QThread>
|
||||
#include "snavercafemanage.h"
|
||||
#include "snaverblogmanage.h"
|
||||
#include "sdaumcafemanage.h"
|
||||
Widget::Widget(QWidget *parent) : QWidget(parent)
|
||||
|
||||
Widget::Widget(QWidget *parent) : QWidget(parent) , m_nMode(E_MODE_WAIT)
|
||||
{
|
||||
connect(&m_timer, SIGNAL(timeout()), this, SLOT(Update()));
|
||||
|
||||
m_pcb = new QComboBox;
|
||||
m_pcb->setInsertPolicy(QComboBox::InsertAtCurrent);
|
||||
|
||||
QPushButton *pbtRefresh = new QPushButton("Refresh",this);
|
||||
QPushButton *pbtStart = new QPushButton("Start",this);
|
||||
QPushButton *pbtStop = new QPushButton("Stop",this);
|
||||
{
|
||||
QObject::connect(pbtStart,SIGNAL(clicked()),this,SLOT(StartButton()));
|
||||
QObject::connect(pbtStop,SIGNAL(clicked()),this,SLOT(StopButton()));
|
||||
QObject::connect(pbtRefresh,SIGNAL(clicked()),this,SLOT(RefreshButton()));
|
||||
}
|
||||
|
||||
QVBoxLayout *vlayout = new QVBoxLayout;
|
||||
{
|
||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||
hlayout->addWidget(m_pcb,Qt::AlignLeft);
|
||||
hlayout->addWidget(pbtRefresh);
|
||||
vlayout->addLayout(hlayout);
|
||||
}
|
||||
|
||||
m_pedTime = new QLineEdit(this);
|
||||
m_pedTime->setText(QString("3~10"));
|
||||
{
|
||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||
hlayout->addWidget(m_pedTime);
|
||||
hlayout->addWidget(pbtStart);
|
||||
hlayout->addWidget(pbtStop);
|
||||
vlayout->addLayout(hlayout);
|
||||
}
|
||||
|
||||
{
|
||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||
m_pResultList = new QListWidget;
|
||||
hlayout->addWidget(m_pResultList);
|
||||
vlayout->addLayout(hlayout);
|
||||
}
|
||||
|
||||
vlayout->addWidget(setRealGroupWidgets());
|
||||
vlayout->addWidget(m_pResultList);
|
||||
}
|
||||
setLayout(vlayout);
|
||||
|
||||
|
||||
m_pNaverCafe = new SNaverCafeManage(this);
|
||||
m_pNaverBlog = new SNaverBlogManage(this);
|
||||
m_pDaumCafe = new SDaumCafeManage(this);
|
||||
@@ -76,12 +45,65 @@ Widget::Widget(QWidget *parent) : QWidget(parent)
|
||||
m_pManage[i]->SetParent(this);
|
||||
|
||||
RefreshButton();
|
||||
m_timer.start(1000);
|
||||
}
|
||||
|
||||
Widget::~Widget()
|
||||
{
|
||||
{
|
||||
if (m_nMode == E_MODE_RUN)
|
||||
{
|
||||
if (m_pgbManual->isChecked() == false)
|
||||
{
|
||||
if (m_strCrawlingID.isEmpty() == false)
|
||||
{
|
||||
SetCrawlingState("Finish");
|
||||
}
|
||||
}
|
||||
}
|
||||
UnLockTables();
|
||||
m_db.close();
|
||||
m_pNaverCafe->SetParent(0);
|
||||
for (int i = 0 ; i < C_CRAWLER_MAX ; i++)
|
||||
m_pManage[i]->SetParent(0);
|
||||
|
||||
}
|
||||
|
||||
QGroupBox *Widget::setRealGroupWidgets()
|
||||
{
|
||||
m_pcb = new QComboBox;
|
||||
m_pcb->setInsertPolicy(QComboBox::InsertAtCurrent);
|
||||
|
||||
QPushButton *pbtRefresh = new QPushButton("Refresh",this);
|
||||
QPushButton *pbtStart = new QPushButton("Start",this);
|
||||
QPushButton *pbtStop = new QPushButton("Stop",this);
|
||||
{
|
||||
QObject::connect(pbtStart,SIGNAL(clicked()),this,SLOT(StartButton()));
|
||||
QObject::connect(pbtStop,SIGNAL(clicked()),this,SLOT(StopButton()));
|
||||
QObject::connect(pbtRefresh,SIGNAL(clicked()),this,SLOT(RefreshButton()));
|
||||
}
|
||||
|
||||
QVBoxLayout *vlayout = new QVBoxLayout;
|
||||
{
|
||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||
hlayout->addWidget(m_pcb,Qt::AlignLeft);
|
||||
hlayout->addWidget(pbtRefresh);
|
||||
vlayout->addLayout(hlayout);
|
||||
}
|
||||
|
||||
m_pedTime = new QLineEdit(this);
|
||||
m_pedTime->setText(QString("3"));
|
||||
{
|
||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||
hlayout->addWidget(m_pedTime);
|
||||
hlayout->addWidget(pbtStart);
|
||||
hlayout->addWidget(pbtStop);
|
||||
vlayout->addLayout(hlayout);
|
||||
}
|
||||
|
||||
m_pgbManual = new QGroupBox(tr("Manual"));
|
||||
m_pgbManual->setCheckable(true);
|
||||
m_pgbManual->setChecked(true);
|
||||
m_pgbManual->setLayout(vlayout);
|
||||
return m_pgbManual;
|
||||
}
|
||||
|
||||
void Widget::InsertLog(QString str)
|
||||
@@ -108,55 +130,43 @@ void Widget::InsertLog(QString str)
|
||||
m_pResultList->setCurrentRow( m_pResultList->count() - 1 );
|
||||
m_pResultList->repaint();
|
||||
}
|
||||
/*
|
||||
void Widget::InsertLog(int _nSelect,QString str)
|
||||
|
||||
void Widget::SetCrawlingState(QString _str)
|
||||
{
|
||||
if (_nSelect >= C_CRAWLER_MAX) return;
|
||||
|
||||
QTime time = QTime::currentTime();
|
||||
QString strOut = time.toString("[hh:mm:ss] ") + str;
|
||||
m_aResultList[_nSelect].addItem(strOut);
|
||||
QDate date = QDate::currentDate();
|
||||
|
||||
QFile file(date.toString(Qt::ISODate)+"_"+QString::number(_nSelect)+".log");
|
||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
|
||||
return;
|
||||
|
||||
QTextStream out(&file);
|
||||
out << strOut << "\n";
|
||||
file.close();
|
||||
|
||||
if (m_aResultList[_nSelect].count() > 1024)
|
||||
{
|
||||
m_aResultList[_nSelect].removeItemWidget(m_aResultList[_nSelect].item(0));
|
||||
QListWidgetItem* item = m_aResultList[_nSelect].takeItem(0);
|
||||
delete item;
|
||||
}
|
||||
m_aResultList[_nSelect].setCurrentRow( m_aResultList[_nSelect].count() - 1 );
|
||||
m_aResultList[_nSelect].repaint();
|
||||
}
|
||||
*/
|
||||
|
||||
void Widget::StartButton()
|
||||
{
|
||||
m_timer.stop();
|
||||
m_timer.start(1000);
|
||||
|
||||
QSqlQuery query;
|
||||
query.exec("UPDATE crawling set state = '" + QString("run") + "' where id = '" + m_pcb->currentData().toString() + "'");
|
||||
query.exec("SELECT _keyword.start,_keyword.end, _keyword.searches,_keyword.authorship,_keyword.id,_datagroup.id,_keyword.platform "
|
||||
"FROM crawling _crawling INNER JOIN keyword _keyword ON _crawling.keyword_id = _keyword.id "
|
||||
"inner join datagroup _datagroup on _crawling.datagroup_id = _datagroup.id "
|
||||
"where _crawling.id = '" + m_pcb->currentData().toString() + "'");
|
||||
if (_str == QString("Finish"))
|
||||
{
|
||||
if (m_pgbManual->isChecked())
|
||||
query.exec("UPDATE crawling set state = 2 where id = '" + m_strCrawlingID + "'");
|
||||
else
|
||||
query.exec("UPDATE crawling set state = 0 where id = '" + m_strCrawlingID + "'");
|
||||
m_pgbManual->setEnabled(true);
|
||||
m_nMode = E_MODE_WAIT;
|
||||
}
|
||||
if (_str == QString("Start"))
|
||||
{
|
||||
if (m_pgbManual->isChecked() == false)
|
||||
query.exec("UPDATE crawling set state = 1 where id = '" + m_strCrawlingID + "'");
|
||||
m_pgbManual->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Widget::Start()
|
||||
{
|
||||
QSqlQuery query;
|
||||
query.exec("SELECT keyword.start,keyword.end, keyword.searches,keyword.authorship,keyword.id,datagroup.id,keyword.platform "
|
||||
"FROM crawling INNER JOIN keyword ON crawling.keyword_id = keyword.id "
|
||||
"inner join datagroup on crawling.datagroup_id = datagroup.id "
|
||||
"where crawling.id = '" + m_strCrawlingID + "'");
|
||||
query.next();
|
||||
/*
|
||||
QString str = + " , ";
|
||||
str += query.value(1).toString() + " ~ ";
|
||||
str += query.value(2).toString() + " -> ";
|
||||
str += query.value(3).toString();
|
||||
*/
|
||||
|
||||
m_nPlatform = 0;
|
||||
|
||||
|
||||
if(0 <= query.value(6).toInt() && query.value(6).toInt() < C_CRAWLER_MAX)
|
||||
m_nPlatform = query.value(6).toInt();
|
||||
else
|
||||
@@ -165,24 +175,56 @@ void Widget::StartButton()
|
||||
return;
|
||||
}
|
||||
|
||||
m_pManage[m_nPlatform]->Start(QDate::fromString(query.value(0).toString(),"yyyy-MM-dd"),
|
||||
QDate::fromString(query.value(1).toString(),"yyyy-MM-dd"),
|
||||
query.value(2).toString().trimmed(),// keyword
|
||||
query.value(3).toString().trimmed(),// authorship
|
||||
query.value(4).toString().trimmed(),// keyword_id
|
||||
query.value(5).toString().trimmed(),
|
||||
1,
|
||||
m_pedTime->text().trimmed());
|
||||
if (m_pgbManual->isChecked())
|
||||
{
|
||||
m_pManage[m_nPlatform]->Start(QDate::fromString(query.value(0).toString(),"yyyy-MM-dd"),
|
||||
QDate::fromString(query.value(1).toString(),"yyyy-MM-dd"),
|
||||
query.value(2).toString().trimmed(),// keyword
|
||||
query.value(3).toString().trimmed(),// authorship
|
||||
query.value(4).toString().trimmed(),// keyword_id
|
||||
query.value(5).toString().trimmed(),
|
||||
1,
|
||||
m_pedTime->text().trimmed());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pManage[m_nPlatform]->Start(QDate::currentDate(),QDate::currentDate(),
|
||||
query.value(2).toString().trimmed(),// keyword
|
||||
query.value(3).toString().trimmed(),// authorship
|
||||
query.value(4).toString().trimmed(),// keyword_id
|
||||
query.value(5).toString().trimmed(),
|
||||
1,
|
||||
m_pedTime->text().trimmed());
|
||||
}
|
||||
SetCrawlingState("Start");
|
||||
m_nMode = E_MODE_RUN;
|
||||
}
|
||||
|
||||
void Widget::StartButton()
|
||||
{
|
||||
m_strCrawlingID = m_pcb->currentData().toString();
|
||||
Start();
|
||||
}
|
||||
|
||||
void Widget::StopButton()
|
||||
{
|
||||
m_nMode = E_MODE_WAIT;
|
||||
}
|
||||
|
||||
bool Widget::LockTable(QString _strTable)
|
||||
{
|
||||
m_timer.stop();
|
||||
QSqlQuery query;
|
||||
return query.exec(QString("lock tables " + _strTable + "write" ).toUtf8());
|
||||
}
|
||||
|
||||
void Widget::UnLockTables()
|
||||
{
|
||||
QSqlQuery query;
|
||||
query.exec(QString("unlock tables").toUtf8());
|
||||
}
|
||||
|
||||
void Widget::Update()
|
||||
{
|
||||
|
||||
if (m_db.isOpen() == false)
|
||||
{
|
||||
if (m_db.open())
|
||||
@@ -193,27 +235,57 @@ void Widget::Update()
|
||||
}
|
||||
}
|
||||
|
||||
//int nCount = 0;
|
||||
//for (int i = 0 ; i < C_CRAWLER_MAX ; i++)
|
||||
//nCount +=
|
||||
m_pManage[m_nPlatform]->Update();
|
||||
|
||||
/*
|
||||
if (nCount == C_CRAWLER_MAX)
|
||||
if (m_pgbManual->isChecked())
|
||||
{
|
||||
InsertLog("Finish...");
|
||||
m_timer.stop();
|
||||
// Menual Mode
|
||||
switch(m_nMode)
|
||||
{
|
||||
case E_MODE_WAIT:return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// RealTime Mode
|
||||
switch(m_nMode)
|
||||
{
|
||||
case E_MODE_WAIT:
|
||||
LockTable("crawling");
|
||||
QSqlQuery query;
|
||||
if (query.exec("SELECT crawling.id,keyword.start,keyword.end "
|
||||
"FROM crawling INNER JOIN keyword ON crawling.keyword_id = keyword.id "
|
||||
"where crawling.state = 0 and keyword.realtime = 1 and keyword.state is null") == false)
|
||||
{
|
||||
InsertLog(query.lastError().text());
|
||||
UnLockTables();
|
||||
return;
|
||||
}
|
||||
QDate dateNow = QDate::currentDate();
|
||||
m_strCrawlingID.clear();
|
||||
while (query.next())
|
||||
{
|
||||
QDate dateStart = QDate::fromString(query.value(1).toString(),"yyyy-MM-dd");
|
||||
QDate dateEnd = QDate::fromString(query.value(2).toString(),"yyyy-MM-dd");
|
||||
if (dateNow < dateStart) continue;
|
||||
if (dateNow > dateEnd) continue;
|
||||
m_strCrawlingID = query.value(0).toString();
|
||||
break;
|
||||
}
|
||||
if(m_strCrawlingID.isEmpty() == false)
|
||||
Start();
|
||||
UnLockTables();
|
||||
return;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
m_pManage[m_nPlatform]->Update();
|
||||
}
|
||||
|
||||
void Widget::RefreshButton()
|
||||
{
|
||||
m_pcb->clear();
|
||||
QSqlQuery query("SELECT _keyword.searches,_keyword.authorship,_keyword.start,_keyword.end, _datagroup.name , _crawling.id,_keyword.platform "
|
||||
"FROM crawling _crawling INNER JOIN keyword _keyword ON _crawling.keyword_id = _keyword.id "
|
||||
"inner join datagroup _datagroup on _crawling.datagroup_id = _datagroup.id where _crawling.state is null");
|
||||
QSqlQuery query("SELECT keyword.searches,keyword.authorship,keyword.start,keyword.end,datagroup.name,keyword.platform,crawling.id "
|
||||
"FROM crawling INNER JOIN keyword ON crawling.keyword_id = keyword.id "
|
||||
"inner join datagroup on crawling.datagroup_id = datagroup.id where crawling.state = 0 and keyword.realtime = 0 ");
|
||||
while (query.next())
|
||||
{
|
||||
QString str;
|
||||
@@ -222,12 +294,12 @@ void Widget::RefreshButton()
|
||||
str += query.value(2).toString() + " ~ ";
|
||||
str += query.value(3).toString() + " -> ";
|
||||
str += query.value(4).toString();
|
||||
if(query.value(6).toString().toInt() == 0)
|
||||
str += ", NaverCafe";
|
||||
else if(query.value(6).toString().toInt() == 1)
|
||||
str += ", NaverBlog";
|
||||
else if(query.value(6).toString().toInt() == 2)
|
||||
str += ", DaumCafe";
|
||||
m_pcb->addItem(str,query.value(5));
|
||||
switch(query.value(5).toString().toInt())
|
||||
{
|
||||
case 0:str += ", Naver Cafe";break;
|
||||
case 1:str += ", Naver Blog";break;
|
||||
case 2:str += ", Daum Cafe"; break;
|
||||
}
|
||||
m_pcb->addItem(str,query.value(6));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user