git-svn-id: svn://192.168.0.12/source@347 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.2.0, 2017-04-12T18:09:18. -->
|
<!-- Written by QtCreator 4.2.0, 2017-05-29T19:01:30. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ SOURCES += main.cpp \
|
|||||||
seffectprocess.cpp \
|
seffectprocess.cpp \
|
||||||
snaverblog.cpp \
|
snaverblog.cpp \
|
||||||
seffectstatistics.cpp \
|
seffectstatistics.cpp \
|
||||||
snaverblogprocess.cpp
|
snaverblogprocess.cpp \
|
||||||
|
snaverurlvalidator.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
swebpage.h \
|
swebpage.h \
|
||||||
@@ -32,4 +33,5 @@ HEADERS += \
|
|||||||
seffectprocess.h \
|
seffectprocess.h \
|
||||||
seffectstatistics.h \
|
seffectstatistics.h \
|
||||||
snaverblog.h \
|
snaverblog.h \
|
||||||
snaverblogprocess.h
|
snaverblogprocess.h \
|
||||||
|
snaverurlvalidator.h
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.2.0, 2017-04-13T14:15:14. -->
|
<!-- Written by QtCreator 4.2.0, 2017-05-22T18:05:04. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
#include "seffectprocess.h"
|
#include "seffectprocess.h"
|
||||||
#include "snaverblogprocess.h"
|
#include "snaverblogprocess.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "sutilfunction.h"
|
||||||
|
#include "snaverurlvalidator.h"
|
||||||
|
|
||||||
std::shared_ptr<SEffectProcess>
|
std::shared_ptr<SEffectProcess>
|
||||||
getProcess(const QString& _platform_name, const QString& _platform_form,
|
getProcess(const QString& _platform_name, const QString& _platform_form,
|
||||||
@@ -28,10 +30,24 @@ int main(int argc, char *argv[])
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<SEffectProcess> process = getProcess(argv[1], argv[2], argv[3], argv[4], argv[5]);
|
QString platform_name = argv[1];
|
||||||
|
QString platform_form = argv[2];
|
||||||
process->run(argv[4]);
|
QString event_code = argv[3];
|
||||||
|
QString url = argv[4];
|
||||||
|
QString date = argv[5];
|
||||||
|
if (platform_name.trimmed() == "naver" && platform_form.trimmed() == "blog")
|
||||||
|
{
|
||||||
|
SNaverUrlValidator naverUrlValidator(url);
|
||||||
|
url = naverUrlValidator.makeUrl();
|
||||||
|
if (url == "")
|
||||||
|
{
|
||||||
|
std::cout << "x!@#!@#!@#e010!@#checkUrl";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<SEffectProcess> process = getProcess(platform_name, platform_form, event_code, url, date);
|
||||||
|
process->run(url);
|
||||||
|
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,12 +49,6 @@ QString getReplyBuzz(const EffectData& _data)
|
|||||||
QDate firstDate = QDateTime::fromString(_data.body.data[ARTICLE_DATE].trimmed().replace("T", " ").replace(".","-").replace("- "," "), "yyyy-MM-dd hh:mm:ss").date();
|
QDate firstDate = QDateTime::fromString(_data.body.data[ARTICLE_DATE].trimmed().replace("T", " ").replace(".","-").replace("- "," "), "yyyy-MM-dd hh:mm:ss").date();
|
||||||
QDate lastDate = QDate::currentDate();
|
QDate lastDate = QDate::currentDate();
|
||||||
|
|
||||||
|
|
||||||
qDebug() << _data.body.data[ARTICLE_DATE];
|
|
||||||
qDebug() << "firstDate:" << firstDate.toString("yyyy-MM-dd");
|
|
||||||
qDebug() << "lastDate:" << lastDate.toString("yyyy-MM-dd");
|
|
||||||
|
|
||||||
|
|
||||||
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
|
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
|
||||||
{
|
{
|
||||||
mapDate.insert(date, 0);
|
mapDate.insert(date, 0);
|
||||||
@@ -83,19 +77,13 @@ QString getReplyBuzz(const EffectData& _data)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString getReplyBuzz(const EffectData& _data, const QString& _startdate)
|
QJsonArray getReplyBuzz(const EffectData& _data, const QString& _startdate)
|
||||||
{
|
{
|
||||||
QMap<QDate, int> mapDate;
|
QMap<QDate, int> mapDate;
|
||||||
|
|
||||||
QDate firstDate = QDateTime::fromString(_startdate, "yyyy-MM-dd").date();
|
QDate firstDate = QDateTime::fromString(_startdate, "yyyy-MM-dd").date();
|
||||||
QDate lastDate = QDate::currentDate();
|
QDate lastDate = QDate::currentDate();
|
||||||
|
|
||||||
|
|
||||||
qDebug() << _data.body.data[ARTICLE_DATE];
|
|
||||||
qDebug() << "firstDate:" << firstDate.toString("yyyy-MM-dd");
|
|
||||||
qDebug() << "lastDate:" << lastDate.toString("yyyy-MM-dd");
|
|
||||||
|
|
||||||
|
|
||||||
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
|
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
|
||||||
{
|
{
|
||||||
mapDate.insert(date, 0);
|
mapDate.insert(date, 0);
|
||||||
@@ -110,16 +98,77 @@ QString getReplyBuzz(const EffectData& _data, const QString& _startdate)
|
|||||||
continue;
|
continue;
|
||||||
mapDate[date]++;
|
mapDate[date]++;
|
||||||
}
|
}
|
||||||
QJsonArray jArray;
|
|
||||||
|
|
||||||
|
QJsonArray jArray;
|
||||||
|
int nAccReplyCount = 0;
|
||||||
for (auto iter = mapDate.cbegin(); iter != mapDate.cend(); ++iter)
|
for (auto iter = mapDate.cbegin(); iter != mapDate.cend(); ++iter)
|
||||||
{
|
{
|
||||||
|
int nValue = iter.value();
|
||||||
|
nAccReplyCount += nValue;
|
||||||
|
|
||||||
QJsonObject jObj;
|
QJsonObject jObj;
|
||||||
jObj["date"] = iter.key().toString("MM-dd-yyyy");
|
jObj["date"] = iter.key().toString("yyyyMMdd");
|
||||||
jObj["value"] = iter.value();
|
jObj["reply_day"] = nValue;
|
||||||
|
jObj["reply_acc"] = nAccReplyCount;
|
||||||
jArray.append(jObj);
|
jArray.append(jObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return jArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonArray getLikeBuzz(const EffectData& _data, const QString& _startdate)
|
||||||
|
{
|
||||||
|
QMap<QString, int> mapDate;
|
||||||
|
|
||||||
|
QDate firstDate = QDateTime::fromString(_startdate, "yyyy-MM-dd").date();
|
||||||
|
QDate lastDate = QDate::currentDate();
|
||||||
|
|
||||||
|
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
|
||||||
|
{
|
||||||
|
mapDate.insert(date.toString("yyyyMMdd"), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
QMapIterator<QString, int> iter(_data.like);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
QString date = iter.key();
|
||||||
|
mapDate[date] = iter.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonArray jArray;
|
||||||
|
int nAccLikeCount = 0;
|
||||||
|
for (auto iter = mapDate.cbegin(); iter != mapDate.cend(); ++iter)
|
||||||
|
{
|
||||||
|
int nValue = iter.value();
|
||||||
|
nAccLikeCount += nValue;
|
||||||
|
|
||||||
|
QJsonObject jObj;
|
||||||
|
jObj["date"] = iter.key();
|
||||||
|
jObj["like_day"] = nValue;
|
||||||
|
jObj["like_acc"] = nAccLikeCount;
|
||||||
|
jArray.append(jObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return jArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString summaryLikeAndReply(QJsonArray _replyBuzz, QJsonArray _likeBuzz)
|
||||||
|
{
|
||||||
|
QJsonArray jArray;
|
||||||
|
for (int i=0; i<_replyBuzz.count(); i++)
|
||||||
|
{
|
||||||
|
QJsonObject jObj;
|
||||||
|
jObj["date"] = _replyBuzz.at(i).toObject()["date"];
|
||||||
|
jObj["reply_day"] = _replyBuzz.at(i).toObject()["reply_day"];
|
||||||
|
jObj["reply_acc"] = _replyBuzz.at(i).toObject()["reply_acc"];
|
||||||
|
jObj["like_day"] = _likeBuzz.at(i).toObject()["like_day"];
|
||||||
|
jObj["like_acc"] = _likeBuzz.at(i).toObject()["like_acc"];
|
||||||
|
jArray.append(jObj);
|
||||||
|
}
|
||||||
|
|
||||||
QJsonDocument jDoc(jArray);
|
QJsonDocument jDoc(jArray);
|
||||||
QString result = jDoc.toJson(QJsonDocument::Compact);
|
QString result = jDoc.toJson(QJsonDocument::Compact);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,11 @@ QString getViewBuzz(const EffectData& _data);
|
|||||||
|
|
||||||
QString getReplyBuzz(const EffectData& _data);
|
QString getReplyBuzz(const EffectData& _data);
|
||||||
|
|
||||||
QString getReplyBuzz(const EffectData& _data, const QString& _startdate);
|
QJsonArray getReplyBuzz(const EffectData& _data, const QString& _startdate);
|
||||||
|
|
||||||
|
QJsonArray getLikeBuzz(const EffectData& _data, const QString& _startdate);
|
||||||
|
|
||||||
|
QString summaryLikeAndReply(QJsonArray _replyBuzz, QJsonArray _likeBuzz);
|
||||||
|
|
||||||
|
|
||||||
#endif // SEFFECTSTATISTICS
|
#endif // SEFFECTSTATISTICS
|
||||||
|
|||||||
@@ -279,8 +279,38 @@ const QString SNaverBlog::scriptReply =
|
|||||||
" }"
|
" }"
|
||||||
" return result;"
|
" return result;"
|
||||||
"}"
|
"}"
|
||||||
"getReply();"
|
"getReply();";
|
||||||
;
|
|
||||||
|
const QString SNaverBlog::scriptLike =
|
||||||
|
"function getLike()"
|
||||||
|
"{"
|
||||||
|
" var result = [];"
|
||||||
|
" var datemap = new Map();"
|
||||||
|
" var likeTableBody = document.querySelector('#comment>table>tbody');"
|
||||||
|
" var likeTrs = likeTableBody.querySelectorAll('tr');"
|
||||||
|
" for (var i=0; i<likeTrs.length; i++)"
|
||||||
|
" {"
|
||||||
|
" var span = likeTrs[i].querySelector('th>span');"
|
||||||
|
" var rawdate = span.textContent;"
|
||||||
|
" var date = rawdate.split(' ')[0];"
|
||||||
|
""
|
||||||
|
" if (datemap.get(date) == undefined)"
|
||||||
|
" {"
|
||||||
|
" datemap.set(date, 1);"
|
||||||
|
" }"
|
||||||
|
" else"
|
||||||
|
" {"
|
||||||
|
" datemap.set(date, datemap.get(date)+1);"
|
||||||
|
" }"
|
||||||
|
" }"
|
||||||
|
" datemap.forEach(function (item, key) {"
|
||||||
|
" var datecount = [key, item];"
|
||||||
|
" result.push(datecount);"
|
||||||
|
" });"
|
||||||
|
""
|
||||||
|
" return result;"
|
||||||
|
"}"
|
||||||
|
"getLike();";
|
||||||
|
|
||||||
|
|
||||||
QString GetSafeUtf(const QString& _strData)
|
QString GetSafeUtf(const QString& _strData)
|
||||||
@@ -467,6 +497,12 @@ void SNaverBlog::slotLoadFinished(bool ok)
|
|||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case E_CRAWL_MODE::LIKE:
|
||||||
|
{
|
||||||
|
m_pWebPage->runJavaScript(scriptLike, std::bind(&SNaverBlog::cbLike,this, _1));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//emit signalDataOk(m_efData);
|
//emit signalDataOk(m_efData);
|
||||||
}
|
}
|
||||||
@@ -572,6 +608,24 @@ QString SNaverBlog::makeReplyUrl(const QString& _url)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString SNaverBlog::makeLikeUrl(const QString& _url)
|
||||||
|
{
|
||||||
|
QStringList strList = _url.split("/");
|
||||||
|
QString strOut = "";
|
||||||
|
|
||||||
|
if(strList.size() < 4)
|
||||||
|
emit signalError(E_ERROR_CODE::OUT_DATED_CRAWLER, "Check Body and LikeUrl\n");
|
||||||
|
|
||||||
|
//url example : http://blog.naver.com/SympathyHistoryList.nhn?blogId=yewonerang&logNo=220984900374
|
||||||
|
strOut += "http://blog.naver.com/SympathyHistoryList.nhn?blogId=";
|
||||||
|
strOut += strList.at(3);
|
||||||
|
strOut += "&logNo=";
|
||||||
|
strOut += strList.at(4);
|
||||||
|
|
||||||
|
return strOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SNaverBlog::cbBodyArticleDate(const QVariant& _result)
|
void SNaverBlog::cbBodyArticleDate(const QVariant& _result)
|
||||||
{
|
{
|
||||||
//qDebug() << "articledate";
|
//qDebug() << "articledate";
|
||||||
@@ -743,6 +797,19 @@ void SNaverBlog::goReplyUrl()
|
|||||||
go(makeReplyUrl(m_strUrl), E_CRAWL_MODE::REPLY);
|
go(makeReplyUrl(m_strUrl), E_CRAWL_MODE::REPLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SNaverBlog::goLikeUrl()
|
||||||
|
{
|
||||||
|
m_bBodyProcessed = true;
|
||||||
|
|
||||||
|
if (!check(m_efData.body))
|
||||||
|
{
|
||||||
|
emit signalError(E_ERROR_CODE::BLOCK_ERROR, "Block or Check naver");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
go(makeLikeUrl(m_strUrl), E_CRAWL_MODE::LIKE);
|
||||||
|
}
|
||||||
|
|
||||||
void SNaverBlog::cbReply(const QVariant& _result)
|
void SNaverBlog::cbReply(const QVariant& _result)
|
||||||
{
|
{
|
||||||
//id, nickname, date, commment, order, strParent;
|
//id, nickname, date, commment, order, strParent;
|
||||||
@@ -770,6 +837,24 @@ void SNaverBlog::cbReply(const QVariant& _result)
|
|||||||
qDebug() << "cbReply";
|
qDebug() << "cbReply";
|
||||||
qDebug() << m_efData.reply.size();
|
qDebug() << m_efData.reply.size();
|
||||||
*/
|
*/
|
||||||
|
// emit signalDataOk(m_efData);
|
||||||
|
goLikeUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SNaverBlog::cbLike(const QVariant& _result)
|
||||||
|
{
|
||||||
|
if (_result.isValid() && !_result.isNull())
|
||||||
|
{
|
||||||
|
QList<QVariant> results = _result.toList();
|
||||||
|
foreach (auto &result, results)
|
||||||
|
{
|
||||||
|
QStringList slResult = result.toStringList();
|
||||||
|
QString date = ((QString)slResult.at(0)).replace(".", "");
|
||||||
|
|
||||||
|
m_efData.like[date] = ((QString)slResult.at(1)).toInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
emit signalDataOk(m_efData);
|
emit signalDataOk(m_efData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,8 @@
|
|||||||
enum class E_CRAWL_MODE
|
enum class E_CRAWL_MODE
|
||||||
{
|
{
|
||||||
BODY = 0,
|
BODY = 0,
|
||||||
REPLY
|
REPLY,
|
||||||
|
LIKE
|
||||||
};
|
};
|
||||||
|
|
||||||
static const QString scriptArticleDate;
|
static const QString scriptArticleDate;
|
||||||
@@ -42,11 +43,13 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QString makeReplyUrl(const QString& _url);
|
QString makeReplyUrl(const QString& _url);
|
||||||
|
QString makeLikeUrl(const QString& _url);
|
||||||
QString changeUrl(const QString& _url);
|
QString changeUrl(const QString& _url);
|
||||||
void initConnect();
|
void initConnect();
|
||||||
bool check(const DataForm& _data);
|
bool check(const DataForm& _data);
|
||||||
bool check(const QVector<DataForm>& _data);
|
bool check(const QVector<DataForm>& _data);
|
||||||
void goReplyUrl();
|
void goReplyUrl();
|
||||||
|
void goLikeUrl();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DataForm getBody();
|
DataForm getBody();
|
||||||
@@ -73,6 +76,8 @@ private:
|
|||||||
void cbBodyArticleOrder(const QVariant& result);
|
void cbBodyArticleOrder(const QVariant& result);
|
||||||
void cbBodyReplyUrl(const QVariant& _result);
|
void cbBodyReplyUrl(const QVariant& _result);
|
||||||
void cbBodyLikeCount(const QVariant& _result);
|
void cbBodyLikeCount(const QVariant& _result);
|
||||||
|
void cbReply(const QVariant& _result);
|
||||||
|
void cbLike(const QVariant& _result);
|
||||||
bool doneBodyCrawler(E_FUNC _func_type);
|
bool doneBodyCrawler(E_FUNC _func_type);
|
||||||
|
|
||||||
|
|
||||||
@@ -83,11 +88,10 @@ private:
|
|||||||
static const QString scriptLikeCount;
|
static const QString scriptLikeCount;
|
||||||
static const QString scriptArticleNickname;
|
static const QString scriptArticleNickname;
|
||||||
static const QString scriptArticleOrder;
|
static const QString scriptArticleOrder;
|
||||||
bool m_abOk[E_FUNC_MAX];
|
|
||||||
|
|
||||||
void cbReply(const QVariant& _result);
|
|
||||||
static const QString scriptReply;
|
static const QString scriptReply;
|
||||||
|
static const QString scriptLike;
|
||||||
|
|
||||||
|
bool m_abOk[E_FUNC_MAX];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<SWebPage> m_pWebPage;
|
std::shared_ptr<SWebPage> m_pWebPage;
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ State_s1_effect SNaverBlogProcess::processData(const EffectData& _data)
|
|||||||
|
|
||||||
result.event_num = eventCode();
|
result.event_num = eventCode();
|
||||||
result.likecount = getlikeCount(_data);
|
result.likecount = getlikeCount(_data);
|
||||||
//result.replybuzz = getReplyBuzz(_data);
|
|
||||||
result.replybuzz = getReplyBuzz(_data, m_pParam[E_PARAM_START_DATE]);
|
result.replybuzz = getReplyBuzz(_data, m_pParam[E_PARAM_START_DATE]);
|
||||||
|
result.likebuzz = getLikeBuzz(_data, m_pParam[E_PARAM_START_DATE]);
|
||||||
|
result.totalbuzz = summaryLikeAndReply(result.replybuzz, result.likebuzz);
|
||||||
result.viewcount = getViewCount(_data);
|
result.viewcount = getViewCount(_data);
|
||||||
result.interactioncount = getInteractionCount(_data);
|
result.interactioncount = getInteractionCount(_data);
|
||||||
result.replycount = getReplyCount(_data);
|
result.replycount = getReplyCount(_data);
|
||||||
|
|||||||
128
EffectProcess/snaverurlvalidator.cpp
Normal file
128
EffectProcess/snaverurlvalidator.cpp
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
#include "snaverurlvalidator.h"
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
const QString SNaverUrlValidator::m_strSubDomain = "www";
|
||||||
|
const QString SNaverUrlValidator::m_strProtocol = "http";
|
||||||
|
const QString SNaverUrlValidator::m_strBaseHost = "blog.naver.com";
|
||||||
|
const QString SNaverUrlValidator::m_strSecondaryHost = "blog.me";
|
||||||
|
|
||||||
|
SNaverUrlValidator::SNaverUrlValidator(QString url) : m_isBaseHost(false), m_isSecondaryHost(false)
|
||||||
|
{
|
||||||
|
m_strUrl = url.trimmed();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SNaverUrlValidator::makeUrl()
|
||||||
|
{
|
||||||
|
if (!validateUrl())
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString strUrl = m_strProtocol + "://" + m_strBaseHost + "/" + m_strUserId + "/" + m_strArticleNum;
|
||||||
|
return strUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SNaverUrlValidator::validateUrl()
|
||||||
|
{
|
||||||
|
int nStartIndex = getHostStartPosition();
|
||||||
|
if (nStartIndex < 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
nStartIndex = checkHost(nStartIndex);
|
||||||
|
if (nStartIndex < 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkPath(nStartIndex) < 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SNaverUrlValidator::getHostStartPosition()
|
||||||
|
{
|
||||||
|
int nHostStartPosition = m_strUrl.indexOf(':');
|
||||||
|
if (nHostStartPosition == -1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_strUrl.at(nHostStartPosition+1) != '/' || m_strUrl.at(nHostStartPosition+2) != '/')
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nHostStartPosition + 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SNaverUrlValidator::checkHost(int _nHostStartPosition)
|
||||||
|
{
|
||||||
|
int nHostEndPosition = m_strUrl.indexOf('/', _nHostStartPosition) - 1;
|
||||||
|
if (nHostEndPosition < 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_isBaseHost = m_strUrl.contains(m_strBaseHost);
|
||||||
|
m_isSecondaryHost = m_strUrl.contains(m_strSecondaryHost);
|
||||||
|
if ((m_isBaseHost == false) && (m_isSecondaryHost == false))
|
||||||
|
{
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_isSecondaryHost)
|
||||||
|
{
|
||||||
|
int nHostLength = nHostEndPosition - _nHostStartPosition + 1;
|
||||||
|
QString strHost = m_strUrl.mid(_nHostStartPosition, nHostLength);
|
||||||
|
QStringList listHostSplit = strHost.split('.');
|
||||||
|
for (int i=0; i<listHostSplit.count(); i++)
|
||||||
|
{
|
||||||
|
QString strHostSplit = listHostSplit.at(i);
|
||||||
|
|
||||||
|
if (listHostSplit.at(i) == m_strSubDomain)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
m_strUserId = strHostSplit;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nHostEndPosition + 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SNaverUrlValidator::checkPath(int _nHostStartPosition)
|
||||||
|
{
|
||||||
|
int nUrlLength = m_strUrl.length();
|
||||||
|
int nPathLength = nUrlLength - _nHostStartPosition + 1;
|
||||||
|
QString strPath = m_strUrl.mid(_nHostStartPosition, nPathLength);
|
||||||
|
QStringList pathList = strPath.split('/');
|
||||||
|
|
||||||
|
if (m_isBaseHost)
|
||||||
|
{
|
||||||
|
if (pathList.size() < 2)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_strUserId = pathList[0];
|
||||||
|
m_strArticleNum = pathList[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_isSecondaryHost)
|
||||||
|
{
|
||||||
|
if (pathList.size() < 1)
|
||||||
|
{
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_strArticleNum = pathList[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
33
EffectProcess/snaverurlvalidator.h
Normal file
33
EffectProcess/snaverurlvalidator.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#ifndef SNAVERURLVALIDATOR_H
|
||||||
|
#define SNAVERURLVALIDATOR_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class SNaverUrlValidator
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static const QString m_strSubDomain;
|
||||||
|
static const QString m_strProtocol;
|
||||||
|
static const QString m_strBaseHost;
|
||||||
|
static const QString m_strSecondaryHost;
|
||||||
|
|
||||||
|
QString m_strUserId;
|
||||||
|
QString m_strArticleNum;
|
||||||
|
|
||||||
|
QString m_strUrl;
|
||||||
|
|
||||||
|
bool m_isBaseHost;
|
||||||
|
bool m_isSecondaryHost;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool validateUrl();
|
||||||
|
int getHostStartPosition();
|
||||||
|
int checkHost(int _nHostStartPosition);
|
||||||
|
int checkPath(int _nHostStartPosition);
|
||||||
|
public:
|
||||||
|
SNaverUrlValidator(QString url);
|
||||||
|
QString makeUrl();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // SNAVERURLVALIDATOR_H
|
||||||
@@ -95,7 +95,8 @@ bool SResultSender::send(const State_s1_effect& _result)
|
|||||||
QSqlQuery query(db);
|
QSqlQuery query(db);
|
||||||
query.prepare(strQuery);
|
query.prepare(strQuery);
|
||||||
query.bindValue(":event_num", _result.event_num);
|
query.bindValue(":event_num", _result.event_num);
|
||||||
query.bindValue(":replybuzz", _result.replybuzz);
|
// query.bindValue(":replybuzz", _result.replybuzz);
|
||||||
|
query.bindValue(":replybuzz", _result.totalbuzz);
|
||||||
query.bindValue(":replycount", _result.replycount);
|
query.bindValue(":replycount", _result.replycount);
|
||||||
query.bindValue(":likecount", _result.likecount);
|
query.bindValue(":likecount", _result.likecount);
|
||||||
query.bindValue(":interactioncount", _result.interactioncount);
|
query.bindValue(":interactioncount", _result.interactioncount);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <QDate>
|
#include <QDate>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <QJsonArray>
|
||||||
|
|
||||||
class STableWidgetItem : public QTableWidgetItem
|
class STableWidgetItem : public QTableWidgetItem
|
||||||
{
|
{
|
||||||
@@ -195,13 +196,16 @@ struct EffectData
|
|||||||
{
|
{
|
||||||
DataForm body;
|
DataForm body;
|
||||||
QVector<DataForm> reply;
|
QVector<DataForm> reply;
|
||||||
|
QMap<QString, int> like;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct State_s1_effect
|
struct State_s1_effect
|
||||||
{
|
{
|
||||||
int event_num;
|
int event_num;
|
||||||
QString view_buzz;
|
QString view_buzz;
|
||||||
QString replybuzz;
|
QJsonArray replybuzz;
|
||||||
|
QJsonArray likebuzz;
|
||||||
|
QString totalbuzz;
|
||||||
int replycount;
|
int replycount;
|
||||||
int likecount;
|
int likecount;
|
||||||
int viewcount;
|
int viewcount;
|
||||||
|
|||||||
@@ -67,5 +67,22 @@ QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code)
|
|||||||
static_cast<int>(_code) < static_cast<int>(E_ERROR_CODE::MAX))
|
static_cast<int>(_code) < static_cast<int>(E_ERROR_CODE::MAX))
|
||||||
return ERROR_MESSAGE_CODE[static_cast<int>(_code)];
|
return ERROR_MESSAGE_CODE[static_cast<int>(_code)];
|
||||||
else
|
else
|
||||||
return ERROR_MESSAGE_CODE[static_cast<int>(E_ERROR_CODE::UNKNOWN_ERROR)];
|
return ERROR_MESSAGE_CODE[static_cast<int>(E_ERROR_CODE::UNKNOWN_ERROR)];
|
||||||
|
}
|
||||||
|
|
||||||
|
QString convertNaverBlogMeUrl(const QString& _str)
|
||||||
|
{
|
||||||
|
QStringList listSplitUrl = _str.split("/");
|
||||||
|
if (listSplitUrl.count() != 4)
|
||||||
|
return _str;
|
||||||
|
|
||||||
|
QString strPostNumber = listSplitUrl[3];
|
||||||
|
QStringList listSplitHostUrl = listSplitUrl[2].split(".");
|
||||||
|
if (listSplitHostUrl.count() != 3)
|
||||||
|
return _str;
|
||||||
|
|
||||||
|
QString strUserId = listSplitHostUrl[0];
|
||||||
|
QString strConvertedUrl = "http://blog.naver.com/" + strUserId + "/" + strPostNumber;
|
||||||
|
|
||||||
|
return strConvertedUrl;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ void messageBoxError(const QString& title, const QString &body);
|
|||||||
QString errorCodeToString(E_ERROR_CODE _error_code);
|
QString errorCodeToString(E_ERROR_CODE _error_code);
|
||||||
E_ERROR_CODE strErrorCodeToEnumErrorCode(const QString& _str);
|
E_ERROR_CODE strErrorCodeToEnumErrorCode(const QString& _str);
|
||||||
QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code);
|
QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code);
|
||||||
|
QString convertNaverBlogMeUrl(const QString& _str);
|
||||||
#endif // SUTILFUNCTION
|
#endif // SUTILFUNCTION
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.2.0, 2017-04-13T14:15:14. -->
|
<!-- Written by QtCreator 4.2.0, 2017-05-22T18:05:04. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
@@ -779,8 +779,8 @@
|
|||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">EffectUI</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">EffectUI</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">EffectUI2</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/source/EffectUI2/EffectUI.pro</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/source/EffectUI/EffectUI.pro</value>
|
||||||
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
|
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">EffectUI.pro</value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">EffectUI.pro</value>
|
||||||
|
|||||||
@@ -69,3 +69,20 @@ QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code)
|
|||||||
else
|
else
|
||||||
return ERROR_MESSAGE_CODE[static_cast<int>(E_ERROR_CODE::UNKNOWN_ERROR)];
|
return ERROR_MESSAGE_CODE[static_cast<int>(E_ERROR_CODE::UNKNOWN_ERROR)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString convertNaverBlogMeUrl(const QString& _str)
|
||||||
|
{
|
||||||
|
QStringList listSplitUrl = _str.split("/");
|
||||||
|
if (listSplitUrl.count() != 4)
|
||||||
|
return _str;
|
||||||
|
|
||||||
|
QString strPostNumber = listSplitUrl[3];
|
||||||
|
QStringList listSplitHostUrl = listSplitUrl[2].split(".");
|
||||||
|
if (listSplitHostUrl.count() != 3)
|
||||||
|
return _str;
|
||||||
|
|
||||||
|
QString strUserId = listSplitHostUrl[0];
|
||||||
|
QString strConvertedUrl = "http://blog.naver.com/" + strUserId + "/" + strPostNumber;
|
||||||
|
|
||||||
|
return strConvertedUrl;
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ void messageBoxError(const QString& title, const QString &body);
|
|||||||
QString errorCodeToString(E_ERROR_CODE _error_code);
|
QString errorCodeToString(E_ERROR_CODE _error_code);
|
||||||
E_ERROR_CODE strErrorCodeToEnumErrorCode(const QString& _str);
|
E_ERROR_CODE strErrorCodeToEnumErrorCode(const QString& _str);
|
||||||
QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code);
|
QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code);
|
||||||
|
QString convertNaverBlogMeUrl(const QString& _str);
|
||||||
#endif // SUTILFUNCTION
|
#endif // SUTILFUNCTION
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.2.0, 2017-03-16T03:16:35. -->
|
<!-- Written by QtCreator 4.2.0, 2017-05-22T18:05:30. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
@@ -285,8 +285,8 @@
|
|||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Filter</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Filter</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Filter2</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/source/Filter2/Filter.pro</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/source/Filter/Filter.pro</value>
|
||||||
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
|
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">Filter.pro</value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">Filter.pro</value>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.2.0, 2017-04-12T18:09:18. -->
|
<!-- Written by QtCreator 4.2.0, 2017-05-30T10:34:37. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
@@ -1273,8 +1273,8 @@
|
|||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">FilterProcess</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">FilterProcess</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">FilterProcess2</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/source/FilterProcess/FilterProcess.pro</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/source/FilterProcess2/FilterProcess.pro</value>
|
||||||
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
|
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">FilterProcess.pro</value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">FilterProcess.pro</value>
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ int main(int argc, char *argv[])
|
|||||||
cout << " ";
|
cout << " ";
|
||||||
cout << QString(__TIME__).toStdString() << endl;
|
cout << QString(__TIME__).toStdString() << endl;
|
||||||
SFilterProcess filter;
|
SFilterProcess filter;
|
||||||
|
|
||||||
if (argc != 4)
|
if (argc != 4)
|
||||||
{
|
{
|
||||||
cout << "check argument " << endl;
|
cout << "check argument " << endl;
|
||||||
|
|||||||
@@ -166,6 +166,10 @@ bool SDatagroup::loadData(const int& _nDatagroupNumber)
|
|||||||
|
|
||||||
m_stBodyReplyCount.m_nAllBodyCount = m_mapBody.size();
|
m_stBodyReplyCount.m_nAllBodyCount = m_mapBody.size();
|
||||||
m_stBodyReplyCount.m_nAllReplyCount = ncReply;
|
m_stBodyReplyCount.m_nAllReplyCount = ncReply;
|
||||||
|
|
||||||
|
makeBodyCountOfPlatform();
|
||||||
|
makeUserCountOfPlatform();
|
||||||
|
|
||||||
m_pSInitializer->insertLog("End Loading");
|
m_pSInitializer->insertLog("End Loading");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -570,22 +574,77 @@ const QMap<QString, QMap<int, QStringList> >* SDatagroup::getmapReply()
|
|||||||
|
|
||||||
int SDatagroup::getBodyCount()
|
int SDatagroup::getBodyCount()
|
||||||
{
|
{
|
||||||
return m_SBody.getBodyCount();
|
int nBodyCount = 0;
|
||||||
|
|
||||||
|
QMapIterator<QString, int> iter(m_mapBodyCountOfPlatform);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
nBodyCount += iter.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
return nBodyCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDatagroup::getUserCount()
|
int SDatagroup::getUserCount()
|
||||||
{
|
{
|
||||||
return m_SBody.getUserCount();
|
int nUserCount = 0;
|
||||||
|
|
||||||
|
QMapIterator<QString, int> iter(m_mapUserCountOfPlatform);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
nUserCount += iter.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
return nUserCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDatagroup::makeBodyCountOfPlatform()
|
||||||
|
{
|
||||||
|
const int *anColumn = m_pSInitializer->getColumnIntArray();
|
||||||
|
QMapIterator<QString, QStringList> iter(m_mapBody);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QStringList columns = iter.value();
|
||||||
|
QString strPlatform = columns[anColumn[SInitializer::E_DATA_platform_name]].trimmed();
|
||||||
|
|
||||||
|
m_mapBodyCountOfPlatform[strPlatform]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDatagroup::makeUserCountOfPlatform()
|
||||||
|
{
|
||||||
|
QMap<QString, QSet<QString>> mapUserIdsOfPlatform;
|
||||||
|
const int *anColumn = m_pSInitializer->getColumnIntArray();
|
||||||
|
QMapIterator<QString, QStringList> iter(m_mapBody);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QStringList columns = iter.value();
|
||||||
|
QString strPlatform = columns[anColumn[SInitializer::E_DATA_platform_name]].trimmed();
|
||||||
|
QString strUserId = columns[anColumn[SInitializer::E_DATA_platform_id]].trimmed();
|
||||||
|
|
||||||
|
if (mapUserIdsOfPlatform[strPlatform].contains(strUserId))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mapUserIdsOfPlatform[strPlatform].insert(strUserId);
|
||||||
|
|
||||||
|
m_mapUserCountOfPlatform[strPlatform]++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QMap<QString, int> SDatagroup::getMapBodyCountOfPlatform()
|
QMap<QString, int> SDatagroup::getMapBodyCountOfPlatform()
|
||||||
{
|
{
|
||||||
return m_SBody.getMapBodyCountOfPlatform();
|
return m_mapBodyCountOfPlatform;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMap<QString, int> SDatagroup::getMapUserCountOfPlatform()
|
QMap<QString, int> SDatagroup::getMapUserCountOfPlatform()
|
||||||
{
|
{
|
||||||
return m_SBody.getMapUserCountOfPlatform();
|
return m_mapUserCountOfPlatform;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SDatagroup::SBody::putCategory(const QString &_url, const int &_nCategory)
|
bool SDatagroup::SBody::putCategory(const QString &_url, const int &_nCategory)
|
||||||
@@ -772,85 +831,85 @@ int SDatagroup::SBody::getBodyNum(const QString &_url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDatagroup::SBody::getBodyCount()
|
//int SDatagroup::SBody::getBodyCount()
|
||||||
{
|
//{
|
||||||
int nBodyCount = 0;
|
// int nBodyCount = 0;
|
||||||
QSet<QString> setUrl;
|
// QSet<QString> setUrl;
|
||||||
QMapIterator<QString, stBody> iter(m_mapBody);
|
// QMapIterator<QString, stBody> iter(m_mapBody);
|
||||||
while (iter.hasNext())
|
// while (iter.hasNext())
|
||||||
{
|
// {
|
||||||
iter.next();
|
// iter.next();
|
||||||
|
|
||||||
if (setUrl.contains(iter.value().url))
|
// if (setUrl.contains(iter.value().url))
|
||||||
continue;
|
// continue;
|
||||||
|
|
||||||
setUrl.insert(iter.key());
|
// setUrl.insert(iter.key());
|
||||||
|
|
||||||
nBodyCount++;
|
// nBodyCount++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nBodyCount;
|
// return nBodyCount;
|
||||||
}
|
//}
|
||||||
|
|
||||||
int SDatagroup::SBody::getUserCount()
|
//int SDatagroup::SBody::getUserCount()
|
||||||
{
|
//{
|
||||||
int nUserCount = 0;
|
// int nUserCount = 0;
|
||||||
QSet<int> setId;
|
// QSet<int> setId;
|
||||||
QMapIterator<QString, stBody> iter(m_mapBody);
|
// QMapIterator<QString, stBody> iter(m_mapBody);
|
||||||
while (iter.hasNext())
|
// while (iter.hasNext())
|
||||||
{
|
// {
|
||||||
iter.next();
|
// iter.next();
|
||||||
|
|
||||||
if (setId.contains(iter.value().id_num))
|
// if (setId.contains(iter.value().id_num))
|
||||||
continue;
|
// continue;
|
||||||
|
|
||||||
setId.insert(iter.value().id_num);
|
// setId.insert(iter.value().id_num);
|
||||||
|
|
||||||
nUserCount++;
|
// nUserCount++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nUserCount;
|
// return nUserCount;
|
||||||
}
|
//}
|
||||||
|
|
||||||
QMap<QString, int> SDatagroup::SBody::getMapBodyCountOfPlatform()
|
//QMap<QString, int> SDatagroup::SBody::getMapBodyCountOfPlatform()
|
||||||
{
|
//{
|
||||||
QMap<QString, int> mapBodyCountOfPlatform;
|
// QMap<QString, int> mapBodyCountOfPlatform;
|
||||||
QSet<QString> setUrl;
|
// QSet<QString> setUrl;
|
||||||
QMapIterator<QString, stBody> iter(m_mapBody);
|
// QMapIterator<QString, stBody> iter(m_mapBody);
|
||||||
while (iter.hasNext())
|
// while (iter.hasNext())
|
||||||
{
|
// {
|
||||||
iter.next();
|
// iter.next();
|
||||||
|
|
||||||
if (setUrl.contains(iter.value().url))
|
// if (setUrl.contains(iter.value().url))
|
||||||
continue;
|
// continue;
|
||||||
|
|
||||||
setUrl.insert(iter.key());
|
// setUrl.insert(iter.key());
|
||||||
|
|
||||||
mapBodyCountOfPlatform[iter.value().platformname_name]++;
|
// mapBodyCountOfPlatform[iter.value().platformname_name]++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
return mapBodyCountOfPlatform;
|
// return mapBodyCountOfPlatform;
|
||||||
}
|
//}
|
||||||
|
|
||||||
QMap<QString, int> SDatagroup::SBody::getMapUserCountOfPlatform()
|
//QMap<QString, int> SDatagroup::SBody::getMapUserCountOfPlatform()
|
||||||
{
|
//{
|
||||||
QMap<QString, int> mapUserCountOfPlatform;
|
// QMap<QString, int> mapUserCountOfPlatform;
|
||||||
QSet<int> setId;
|
// QSet<int> setId;
|
||||||
QMapIterator<QString, stBody> iter(m_mapBody);
|
// QMapIterator<QString, stBody> iter(m_mapBody);
|
||||||
while (iter.hasNext())
|
// while (iter.hasNext())
|
||||||
{
|
// {
|
||||||
iter.next();
|
// iter.next();
|
||||||
|
|
||||||
if (setId.contains(iter.value().id_num))
|
// if (setId.contains(iter.value().id_num))
|
||||||
continue;
|
// continue;
|
||||||
|
|
||||||
setId.insert(iter.value().id_num);
|
// setId.insert(iter.value().id_num);
|
||||||
|
|
||||||
mapUserCountOfPlatform[iter.value().platformname_name]++;
|
// mapUserCountOfPlatform[iter.value().platformname_name]++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
return mapUserCountOfPlatform;
|
// return mapUserCountOfPlatform;
|
||||||
}
|
//}
|
||||||
|
|
||||||
void SDatagroup::SReply::put(const QString &_url, const int &_order, const stReply &_streply)
|
void SDatagroup::SReply::put(const QString &_url, const int &_order, const stReply &_streply)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -154,10 +154,10 @@ public:
|
|||||||
void setInitializer(SInitializer &initializer){ m_pSInitializer = &initializer; }
|
void setInitializer(SInitializer &initializer){ m_pSInitializer = &initializer; }
|
||||||
stBody* get(const QString& _url);
|
stBody* get(const QString& _url);
|
||||||
void clear();
|
void clear();
|
||||||
int getBodyCount();
|
// int getBodyCount();
|
||||||
int getUserCount();
|
// int getUserCount();
|
||||||
QMap<QString, int> getMapBodyCountOfPlatform();
|
// QMap<QString, int> getMapBodyCountOfPlatform();
|
||||||
QMap<QString, int> getMapUserCountOfPlatform();
|
// QMap<QString, int> getMapUserCountOfPlatform();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SReply
|
class SReply
|
||||||
@@ -248,9 +248,10 @@ private:
|
|||||||
QStringList m_slOrderedBodyUrl;
|
QStringList m_slOrderedBodyUrl;
|
||||||
QMap<QString, QMap<int, QStringList> > m_mapReply;
|
QMap<QString, QMap<int, QStringList> > m_mapReply;
|
||||||
QMap<QString, QStringList> m_mapBody;
|
QMap<QString, QStringList> m_mapBody;
|
||||||
|
QMap<QString, int> m_mapBodyCountOfPlatform;
|
||||||
|
QMap<QString, int> m_mapUserCountOfPlatform;
|
||||||
QMap<stProfileurlKey, QStringList*> m_mapProfile;
|
QMap<stProfileurlKey, QStringList*> m_mapProfile;
|
||||||
|
|
||||||
|
|
||||||
SBody m_SBody;
|
SBody m_SBody;
|
||||||
SReply m_SReply;
|
SReply m_SReply;
|
||||||
SCommunity m_SCommunity;
|
SCommunity m_SCommunity;
|
||||||
@@ -290,6 +291,8 @@ private:
|
|||||||
void init();
|
void init();
|
||||||
void setloadQuery(QString _astrQuery[], int _nDatagroupNumber);
|
void setloadQuery(QString _astrQuery[], int _nDatagroupNumber);
|
||||||
void makeProfile(const QStringList& _strList);
|
void makeProfile(const QStringList& _strList);
|
||||||
|
void makeBodyCountOfPlatform();
|
||||||
|
void makeUserCountOfPlatform();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ bool SInfluencer::makeTable(SDatagroup &_datagroup)
|
|||||||
m_pSInitializer->insertLog("Make influencer influencer");
|
m_pSInitializer->insertLog("Make influencer influencer");
|
||||||
m_STInfluencer.makeTable(_datagroup, m_mapCategory);
|
m_STInfluencer.makeTable(_datagroup, m_mapCategory);
|
||||||
m_pSInitializer->insertLog("Make influencer stats_json");
|
m_pSInitializer->insertLog("Make influencer stats_json");
|
||||||
//m_SStatsJson.makeTable(_datagroup, m_mapCategory);
|
// m_SStatsJson.makeTable(_datagroup, m_mapCategory);
|
||||||
m_SStatsJson.makeTable(_datagroup, m_STInfluencer);
|
m_SStatsJson.makeTable(_datagroup, m_STInfluencer);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -247,17 +247,23 @@ bool SInfluencer::STInfluencer::SaveDataFile(int _companyNum)
|
|||||||
stream.setAutoDetectUnicode(true);
|
stream.setAutoDetectUnicode(true);
|
||||||
stream << "Category," << "ID," << "Nick," << "Title," << "Url," << "Like," << "Share," << "Body," << "Reply," << "Value" << "\n";
|
stream << "Category," << "ID," << "Nick," << "Title," << "Url," << "Like," << "Share," << "Body," << "Reply," << "Value" << "\n";
|
||||||
|
|
||||||
QMapIterator<int, QList<stInfluencer>> iter1(m_mapInfluencerOfCategory);
|
QMapIterator<int, QMap<int, QList<stInfluencer>>> iter(m_mapInfluencerOfGroup);
|
||||||
while (iter1.hasNext())
|
while (iter.hasNext())
|
||||||
{
|
{
|
||||||
iter1.next();
|
iter.next();
|
||||||
int nCategoryNum = iter1.key();
|
|
||||||
const QList<stInfluencer> listInfluencer = iter1.value();
|
QMapIterator<int, QList<stInfluencer>> iter2(iter.value());
|
||||||
foreach (stInfluencer Influecner, listInfluencer)
|
while (iter2.hasNext())
|
||||||
{
|
{
|
||||||
stream << Influecner.category_num << "," << Influecner.id_id << "," << Influecner.nickname_nickname << "," << Influecner.community_title << ","
|
iter2.next();
|
||||||
<< "http://" + Influecner.community_url << "," << Influecner.likecount << "," << Influecner.sharecount << "," << Influecner.bodycount << ","
|
|
||||||
<< Influecner.replycount << "," << Influecner.influencervalue << "\n";
|
const QList<stInfluencer> listInfluencer = iter2.value();
|
||||||
|
foreach (stInfluencer Influecner, listInfluencer)
|
||||||
|
{
|
||||||
|
stream << Influecner.category_num << "," << Influecner.id_id << "," << Influecner.nickname_nickname << "," << Influecner.community_title << ","
|
||||||
|
<< "http://" + Influecner.community_url << "," << Influecner.likecount << "," << Influecner.sharecount << "," << Influecner.bodycount << ","
|
||||||
|
<< Influecner.replycount << "," << Influecner.influencervalue << "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,10 +279,12 @@ void SInfluencer::STInfluencer::makeTable(SDatagroup &_datagroup, const QMap<int
|
|||||||
const QStringList* orderedUrl = _datagroup.getOrderedUrl();
|
const QStringList* orderedUrl = _datagroup.getOrderedUrl();
|
||||||
|
|
||||||
const int* anColumn = m_pSInitializer->getColumnIntArray();
|
const int* anColumn = m_pSInitializer->getColumnIntArray();
|
||||||
|
m_mapInfluencerGroupInfo = m_pSInitializer->getInfluencerGroup();
|
||||||
|
|
||||||
for (QMap<int, stReal>::const_iterator iterPos = _mapCategory.constBegin(); iterPos != _mapCategory.constEnd(); iterPos++)
|
for (QMap<int, stReal>::const_iterator iterPos = _mapCategory.constBegin(); iterPos != _mapCategory.constEnd(); iterPos++)
|
||||||
{
|
{
|
||||||
QMap<SDatagroup::stProfileurlKey, stInfluencer> mapRank;
|
QMap<SDatagroup::stProfileurlKey, stInfluencer> mapRank;
|
||||||
|
int nCategoryNum = iterPos.key();
|
||||||
const stReal& streal = iterPos.value();
|
const stReal& streal = iterPos.value();
|
||||||
foreach (const QString& _url, *orderedUrl)
|
foreach (const QString& _url, *orderedUrl)
|
||||||
{
|
{
|
||||||
@@ -293,7 +301,7 @@ void SInfluencer::STInfluencer::makeTable(SDatagroup &_datagroup, const QMap<int
|
|||||||
mapRank[stprofileurlkey].community_num = _datagroup.getstBody(_url)->community_num;
|
mapRank[stprofileurlkey].community_num = _datagroup.getstBody(_url)->community_num;
|
||||||
mapRank[stprofileurlkey].profile = (*(_datagroup.getmapBody(stprofileurlkey)))[anColumn[SInitializer::E_DATA_article_profile]].trimmed();
|
mapRank[stprofileurlkey].profile = (*(_datagroup.getmapBody(stprofileurlkey)))[anColumn[SInitializer::E_DATA_article_profile]].trimmed();
|
||||||
mapRank[stprofileurlkey].profileurl = (*(_datagroup.getmapBody(stprofileurlkey)))[anColumn[SInitializer::E_DATA_article_profileurl]].trimmed();
|
mapRank[stprofileurlkey].profileurl = (*(_datagroup.getmapBody(stprofileurlkey)))[anColumn[SInitializer::E_DATA_article_profileurl]].trimmed();
|
||||||
mapRank[stprofileurlkey].category_num = iterPos.key();
|
mapRank[stprofileurlkey].category_num = nCategoryNum;
|
||||||
//mapRank[stprofileurlkey].community_title = _datagroup.getstCommunity(*(_datagroup.getmapBody(stprofileurlkey)))->title;
|
//mapRank[stprofileurlkey].community_title = _datagroup.getstCommunity(*(_datagroup.getmapBody(stprofileurlkey)))->title;
|
||||||
//mapRank[stprofileurlkey].community_url = _datagroup.getstCommunity(*(_datagroup.getmapBody(stprofileurlkey)))->url;
|
//mapRank[stprofileurlkey].community_url = _datagroup.getstCommunity(*(_datagroup.getmapBody(stprofileurlkey)))->url;
|
||||||
//mapRank[stprofileurlkey].community_id = _datagroup.getstCommunity(*(_datagroup.getmapBody(stprofileurlkey)))->id;
|
//mapRank[stprofileurlkey].community_id = _datagroup.getstCommunity(*(_datagroup.getmapBody(stprofileurlkey)))->id;
|
||||||
@@ -321,7 +329,6 @@ void SInfluencer::STInfluencer::makeTable(SDatagroup &_datagroup, const QMap<int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//insert Reply
|
//insert Reply
|
||||||
const QMap<int, SDatagroup::stReply>* mapstReply = _datagroup.getstReply(_url);
|
const QMap<int, SDatagroup::stReply>* mapstReply = _datagroup.getstReply(_url);
|
||||||
if (mapstReply == 0) continue;
|
if (mapstReply == 0) continue;
|
||||||
@@ -339,7 +346,6 @@ void SInfluencer::STInfluencer::makeTable(SDatagroup &_datagroup, const QMap<int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (QMap<SDatagroup::stProfileurlKey, stInfluencer>::iterator iterPos1 = mapRank.begin(); iterPos1 != mapRank.end(); iterPos1++)
|
for (QMap<SDatagroup::stProfileurlKey, stInfluencer>::iterator iterPos1 = mapRank.begin(); iterPos1 != mapRank.end(); iterPos1++)
|
||||||
{
|
{
|
||||||
stInfluencer &val = iterPos1.value();
|
stInfluencer &val = iterPos1.value();
|
||||||
@@ -347,174 +353,18 @@ void SInfluencer::STInfluencer::makeTable(SDatagroup &_datagroup, const QMap<int
|
|||||||
val.interactionrank = idrankbyinteractionColumn.makeIdrankbyinteractionColumnJson(val);
|
val.interactionrank = idrankbyinteractionColumn.makeIdrankbyinteractionColumnJson(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nInfluencerGroupNum = getInfluencerGroupNum(nCategoryNum);
|
||||||
// for (QMap<SDatagroup::stProfileurlKey, stInfluencer>::iterator iterPos1 = mapRank.begin(); iterPos1 != mapRank.end(); iterPos1++)
|
m_mapInfluencerOfGroup[nInfluencerGroupNum][nCategoryNum].append(mapRank.values());
|
||||||
// {
|
|
||||||
// stInfluencer &val = iterPos1.value();
|
|
||||||
// //val.influencervalue = val.bodycount * m_pSInitializer->getInfluencerParam(0) + val.replycount * m_pSInitializer->getInfluencerParam(1);
|
|
||||||
// if (val.bodycount == 0)
|
|
||||||
// val.influencervalue = 0;
|
|
||||||
// else
|
|
||||||
// val.influencervalue = static_cast<double>(val.replycount + val.sharecount + val.likecount) * m_pSInitializer->getInfluencerParam().A /
|
|
||||||
// (val.bodycount * m_pSInitializer->getInfluencerParam().B);
|
|
||||||
// }
|
|
||||||
|
|
||||||
SInfluencerWeight influecnerWeight;
|
|
||||||
for (QMap<SDatagroup::stProfileurlKey, stInfluencer>::iterator iter = mapRank.begin(); iter != mapRank.end(); iter++)
|
|
||||||
{
|
|
||||||
stInfluencer &influencer = iter.value();
|
|
||||||
influecnerWeight.insert(influencer);
|
|
||||||
}
|
|
||||||
|
|
||||||
influecnerWeight.calculateWeight();
|
|
||||||
|
|
||||||
for (QMap<SDatagroup::stProfileurlKey, stInfluencer>::iterator iter = mapRank.begin(); iter != mapRank.end(); iter++)
|
|
||||||
{
|
|
||||||
stInfluencer &influencer = iter.value();
|
|
||||||
influencer.influencervalue = influecnerWeight.getInfluenceValue(influencer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QList<stInfluencer> listmap = mapRank.values();
|
|
||||||
qSort(listmap.begin(), listmap.end(), isGreaterInfluencerValue());
|
|
||||||
int rank = 1;
|
|
||||||
for (QList<stInfluencer>::iterator iterPos1 = listmap.begin(); iterPos1 != listmap.end(); iterPos1++)
|
|
||||||
{
|
|
||||||
iterPos1->rank = rank++;
|
|
||||||
}
|
|
||||||
m_listMap.append(listmap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setInfluencerValueWieght();
|
||||||
|
processDuplicatedInfluencer();
|
||||||
|
|
||||||
|
setInfluecnerRank();
|
||||||
|
|
||||||
//Make Map Influencer Group by Category within limit range, Sort by rank
|
copyInfluencerFromGroupToList();
|
||||||
int nInfluencerLimitFrom = m_pSInitializer->getInfluencerLimitFrom().toInt();
|
|
||||||
int nInfluencerLimitTo = m_pSInitializer->getInfluencerLimitTo().toInt();
|
|
||||||
QListIterator<stInfluencer> iter(m_listMap);
|
|
||||||
while (iter.hasNext())
|
|
||||||
{
|
|
||||||
const stInfluencer& influencer = iter.next();
|
|
||||||
if (influencer.rank < nInfluencerLimitFrom || nInfluencerLimitTo < influencer.rank)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
m_mapInfluencerOfCategory[influencer.category_num].append(influencer);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (QMap<int, QList<stInfluencer>>::iterator iter = m_mapInfluencerOfCategory.begin(); iter != m_mapInfluencerOfCategory.end(); iter++)
|
|
||||||
{
|
|
||||||
QList<stInfluencer>& listInfluencer = iter.value();
|
|
||||||
qSort(listInfluencer.begin(), listInfluencer.end(), isGreaterInfluencerRank());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
bool SInfluencer::STInfluencer::uploadData(QSqlDatabase &_db, const int &_nCompany)
|
|
||||||
{
|
|
||||||
QString strQuery = "delete from influencer where company_num = " + QString::number(_nCompany);
|
|
||||||
QSqlQuery query(_db);
|
|
||||||
if (query.exec(strQuery.toUtf8()) == false)
|
|
||||||
{
|
|
||||||
m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
strQuery = "insert into influencer (rank,company_num,id_num,nickname_num,community_num,bodycount,replycount,influencervalue,profile,profileurl,id_id)"
|
|
||||||
" VALUES (:RANK,:COMPANY_NUM,:ID_NUM,:NICKNAME_NUM,:COMMUNITY_NUM,:BODY_COUNT,:REPLY_COUNT,:INPL,:PROFILE,:PROFILE_URL,:ID_ID)";
|
|
||||||
|
|
||||||
query.clear();
|
|
||||||
query.prepare(strQuery.toUtf8());
|
|
||||||
|
|
||||||
foreach (const stInfluencer& stinfluencer, m_listMap)
|
|
||||||
{
|
|
||||||
query.bindValue(":RANK", stinfluencer.rank);
|
|
||||||
query.bindValue(":COMPANY_NUM", _nCompany);
|
|
||||||
query.bindValue(":ID_NUM", stinfluencer.id_num);
|
|
||||||
query.bindValue(":NICKNAME_NUM", stinfluencer.nickname_num);
|
|
||||||
query.bindValue(":COMMUNITY_NUM", stinfluencer.community_num);
|
|
||||||
query.bindValue(":BODY_COUNT", stinfluencer.bodycount);
|
|
||||||
query.bindValue(":REPLY_COUNT", stinfluencer.replycount);
|
|
||||||
query.bindValue(":ID_ID", stinfluencer.id_id);
|
|
||||||
query.bindValue(":INPL", QString::number(stinfluencer.influencervalue, 'g', 3));
|
|
||||||
//query.bindValue(":PROFILE", ((stinfluencer.profile.trimmed().isEmpty())? " " : sqlString(stinfluencer.profile).trimmed().replace(QChar(160), "")));
|
|
||||||
//query.bindValue(":PROFILE_URL", ((stinfluencer.profileurl.trimmed().isEmpty())? " ", stinfluencer.profileurl.trimmed()));
|
|
||||||
query.bindValue(":PROFILE", sqlString(stinfluencer.profile).trimmed().replace(QChar(160), ""));
|
|
||||||
query.bindValue(":PROFILE_URL", stinfluencer.profileurl.trimmed());
|
|
||||||
if (query.exec() == false)
|
|
||||||
{
|
|
||||||
m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strQuery = "update dbinfo set influencercount = " + QString::number(m_listMap.size()) + " where company_num = "
|
|
||||||
+ QString::number(_nCompany);
|
|
||||||
query.exec(strQuery);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
//bool SInfluencer::STInfluencer::uploadData(QSqlDatabase &_db, const int &_nCompany)
|
|
||||||
//{
|
|
||||||
// QString strQuery = "delete from influencer_" + QString::number(_nCompany) + "_update";
|
|
||||||
// QSqlQuery query(_db);
|
|
||||||
// if (query.exec(strQuery.toUtf8()) == false)
|
|
||||||
// {
|
|
||||||
// m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
// m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// strQuery = "insert into influencer_" + QString::number(_nCompany) +
|
|
||||||
// "_update (rank,category_num,id_num,nickname_num,community_num,bodycount,replycount, likecount, sharecount, influencervalue,profile,profileurl,id_id,"
|
|
||||||
// "community_title,community_url,community_id,nickname_nickname,nickname_exnickname,platformname_num,idrankbyinteraction,platformname_name) VALUES (";
|
|
||||||
|
|
||||||
// query.clear();
|
|
||||||
|
|
||||||
// foreach (const stInfluencer& stinfluencer, m_listMap)
|
|
||||||
// {
|
|
||||||
// QString str = strQuery;
|
|
||||||
// str += QString::number(stinfluencer.rank) + ",";
|
|
||||||
// str += QString::number(stinfluencer.category_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.id_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.nickname_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.community_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.bodycount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.replycount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.likecount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.sharecount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.influencervalue, 'g', 3) + ",";
|
|
||||||
// str += "'" + sqlString(stinfluencer.profile).trimmed().replace(QChar(160), "") + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.profileurl.trimmed()) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.id_id) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.community_title) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.community_url) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.community_id) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.nickname_nickname) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.nickname_exnickname) + "',";
|
|
||||||
// str += QString::number(stinfluencer.platformname_num) + ",";
|
|
||||||
//str += "'" + sqlString(stinfluencer.interactionrank) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.platformname_name) + "')";
|
|
||||||
|
|
||||||
// if (query.exec(str.toUtf8()) == false)
|
|
||||||
// {
|
|
||||||
// m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
// m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// strQuery = "update dbinfo set influencercount = " + QString::number(m_listMap.size()) + " where company_num = "
|
|
||||||
// + QString::number(_nCompany);
|
|
||||||
// query.exec(strQuery);
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
|
|
||||||
bool SInfluencer::STInfluencer::uploadData(QSqlDatabase &_db, const int &_nCompany)
|
bool SInfluencer::STInfluencer::uploadData(QSqlDatabase &_db, const int &_nCompany)
|
||||||
{
|
{
|
||||||
QString strQuery = "delete from influencer_" + QString::number(_nCompany) + "_update";
|
QString strQuery = "delete from influencer_" + QString::number(_nCompany) + "_update";
|
||||||
@@ -531,94 +381,39 @@ bool SInfluencer::STInfluencer::uploadData(QSqlDatabase &_db, const int &_nCompa
|
|||||||
|
|
||||||
query.clear();
|
query.clear();
|
||||||
|
|
||||||
QMapIterator<int, QList<stInfluencer>> iter1(m_mapInfluencerOfCategory);
|
foreach (const stInfluencer& stinfluencer, m_listMap)
|
||||||
while (iter1.hasNext())
|
|
||||||
{
|
{
|
||||||
iter1.next();
|
QString str = strQuery;
|
||||||
const QList<stInfluencer>& listInfluencer = iter1.value();
|
str += QString::number(stinfluencer.rank) + ",";
|
||||||
foreach (stInfluencer stinfluencer, listInfluencer)
|
str += QString::number(stinfluencer.category_num) + ",";
|
||||||
|
str += QString::number(stinfluencer.id_num) + ",";
|
||||||
|
str += QString::number(stinfluencer.nickname_num) + ",";
|
||||||
|
str += QString::number(stinfluencer.community_num) + ",";
|
||||||
|
str += QString::number(stinfluencer.bodycount) + ",";
|
||||||
|
str += QString::number(stinfluencer.replycount) + ",";
|
||||||
|
str += QString::number(stinfluencer.likecount) + ",";
|
||||||
|
str += QString::number(stinfluencer.sharecount) + ",";
|
||||||
|
str += QString::number(stinfluencer.influencervalue, 'g', 3) + ",";
|
||||||
|
str += "'" + sqlString(stinfluencer.profile).trimmed().replace(QChar(160), "") + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.profileurl.trimmed()) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.id_id) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.community_title) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.community_url) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.community_id) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.nickname_nickname) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.nickname_exnickname) + "',";
|
||||||
|
str += QString::number(stinfluencer.platformname_num) + ",";
|
||||||
|
str += "'" + sqlString(stinfluencer.interactionrank) + "',";
|
||||||
|
str += "'" + sqlString(stinfluencer.platformname_name) + "')";
|
||||||
|
|
||||||
|
if (query.exec(str.toUtf8()) == false)
|
||||||
{
|
{
|
||||||
QString str = strQuery;
|
m_pSInitializer->insertLog(query.lastQuery());
|
||||||
str += QString::number(stinfluencer.rank) + ",";
|
m_pSInitializer->insertLog(query.lastError().text());
|
||||||
str += QString::number(stinfluencer.category_num) + ",";
|
return false;
|
||||||
str += QString::number(stinfluencer.id_num) + ",";
|
|
||||||
str += QString::number(stinfluencer.nickname_num) + ",";
|
|
||||||
str += QString::number(stinfluencer.community_num) + ",";
|
|
||||||
str += QString::number(stinfluencer.bodycount) + ",";
|
|
||||||
str += QString::number(stinfluencer.replycount) + ",";
|
|
||||||
str += QString::number(stinfluencer.likecount) + ",";
|
|
||||||
str += QString::number(stinfluencer.sharecount) + ",";
|
|
||||||
str += QString::number(stinfluencer.influencervalue, 'g', 3) + ",";
|
|
||||||
str += "'" + sqlString(stinfluencer.profile).trimmed().replace(QChar(160), "") + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.profileurl.trimmed()) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.id_id) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.community_title) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.community_url) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.community_id) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.nickname_nickname) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.nickname_exnickname) + "',";
|
|
||||||
str += QString::number(stinfluencer.platformname_num) + ",";
|
|
||||||
str += "'" + sqlString(stinfluencer.interactionrank) + "',";
|
|
||||||
str += "'" + sqlString(stinfluencer.platformname_name) + "')";
|
|
||||||
|
|
||||||
if (query.exec(str.toUtf8()) == false)
|
|
||||||
{
|
|
||||||
m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// foreach (const stInfluencer& stinfluencer, m_listMap)
|
|
||||||
// {
|
|
||||||
// QString str = strQuery;
|
|
||||||
// str += QString::number(stinfluencer.rank) + ",";
|
|
||||||
// str += QString::number(stinfluencer.category_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.id_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.nickname_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.community_num) + ",";
|
|
||||||
// str += QString::number(stinfluencer.bodycount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.replycount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.likecount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.sharecount) + ",";
|
|
||||||
// str += QString::number(stinfluencer.influencervalue, 'g', 3) + ",";
|
|
||||||
// str += "'" + sqlString(stinfluencer.profile).trimmed().replace(QChar(160), "") + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.profileurl.trimmed()) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.id_id) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.community_title) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.community_url) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.community_id) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.nickname_nickname) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.nickname_exnickname) + "',";
|
|
||||||
// str += QString::number(stinfluencer.platformname_num) + ",";
|
|
||||||
//str += "'" + sqlString(stinfluencer.interactionrank) + "',";
|
|
||||||
// str += "'" + sqlString(stinfluencer.platformname_name) + "')";
|
|
||||||
|
|
||||||
// if (query.exec(str.toUtf8()) == false)
|
|
||||||
// {
|
|
||||||
// m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
// m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// strQuery = "delete from influencer_" + QString::number(_nCompany) + "_update " +
|
|
||||||
// "where rank < " + m_pSInitializer->getInfluencerLimitFrom() + " or rank > " + m_pSInitializer->getInfluencerLimitTo();
|
|
||||||
// if (query.exec(strQuery.toUtf8()) == false)
|
|
||||||
// {
|
|
||||||
// m_pSInitializer->insertLog(query.lastQuery());
|
|
||||||
// m_pSInitializer->insertLog(query.lastError().text());
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
strQuery = "select count(*) from influencer_" + QString::number(_nCompany) + "_update";
|
strQuery = "select count(*) from influencer_" + QString::number(_nCompany) + "_update";
|
||||||
if (query.exec(strQuery.toUtf8()) == false)
|
if (query.exec(strQuery.toUtf8()) == false)
|
||||||
{
|
{
|
||||||
@@ -657,6 +452,209 @@ m_pSInitializer->insertLog("influencer_" + QString::number(_nCompany) + " rename
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SInfluencer::STInfluencer::getInfluencerGroupNum(int _nCategoryNum)
|
||||||
|
{
|
||||||
|
QMapIterator<int, QList<int>> iter(m_mapInfluencerGroupInfo);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
int nGroupNum = iter.key();
|
||||||
|
QList<int> listCategoryInfo = iter.value();
|
||||||
|
for (int i=0; i<listCategoryInfo.count(); i++)
|
||||||
|
{
|
||||||
|
int nCategoryNum = listCategoryInfo.at(i);
|
||||||
|
if (nCategoryNum == _nCategoryNum)
|
||||||
|
return nGroupNum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::setInfluencerValueWieght()
|
||||||
|
{
|
||||||
|
QMutableMapIterator<int, QMap<int, QList<stInfluencer>>> iter(m_mapInfluencerOfGroup);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
SInfluencerWeight influencerWeight;
|
||||||
|
QMutableMapIterator<int, QList<stInfluencer>> iter2(iter.value());
|
||||||
|
while (iter2.hasNext())
|
||||||
|
{
|
||||||
|
QList<stInfluencer> &listInfluencer = iter2.next().value();
|
||||||
|
for (QList<stInfluencer>::iterator iter3 = listInfluencer.begin(); iter3 != listInfluencer.end(); iter3++)
|
||||||
|
{
|
||||||
|
influencerWeight.insert(*iter3);
|
||||||
|
}
|
||||||
|
|
||||||
|
influencerWeight.calculateWeight();
|
||||||
|
|
||||||
|
for (QList<stInfluencer>::iterator iter3 = listInfluencer.begin(); iter3 != listInfluencer.end(); iter3++)
|
||||||
|
{
|
||||||
|
iter3->influencervalue = influencerWeight.getInfluenceValue(*iter3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::processDuplicatedInfluencer()
|
||||||
|
{
|
||||||
|
QMutableMapIterator<int, QMap<int, QList<stInfluencer>>> iter(m_mapInfluencerOfGroup);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QMap<QString, QList<double>> mapInfluencerValuesOfId = makeInfluencerValuesOfId(iter.value());
|
||||||
|
QMap<QString, QList<double>> mapFilteredInfluencerValuesOfId = filterInfluencerValuesOfId(mapInfluencerValuesOfId);
|
||||||
|
sortInfluencerValuesOfId(mapFilteredInfluencerValuesOfId);
|
||||||
|
|
||||||
|
setDuplicatedInfluencerFlag(iter.value(), mapFilteredInfluencerValuesOfId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<QString, QList<double>> SInfluencer::STInfluencer::makeInfluencerValuesOfId(QMap<int, QList<stInfluencer>> &_mapInfluencersOfCategory)
|
||||||
|
{
|
||||||
|
QMap<QString, QList<double>> mapInfluencerValuesOfId;
|
||||||
|
|
||||||
|
QMutableMapIterator<int, QList<stInfluencer>> iter(_mapInfluencersOfCategory);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QList<stInfluencer> &listInfluencer = iter.value();
|
||||||
|
for (QList<stInfluencer>::iterator iter2 = listInfluencer.begin(); iter2 != listInfluencer.end(); iter2++)
|
||||||
|
{
|
||||||
|
mapInfluencerValuesOfId[iter2->id_id].append(iter2->influencervalue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapInfluencerValuesOfId;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<QString, QList<double>> SInfluencer::STInfluencer::filterInfluencerValuesOfId(QMap<QString, QList<double>> &_mapInfluencerValuesOfId)
|
||||||
|
{
|
||||||
|
QMap<QString, QList<double>> mapFilteredInfluencerValuesOfId;
|
||||||
|
|
||||||
|
QMutableMapIterator<QString, QList<double>> iter(_mapInfluencerValuesOfId);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QString id = iter.key();
|
||||||
|
QList<double> &listValue = iter.value();
|
||||||
|
if (listValue.count() <= 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mapFilteredInfluencerValuesOfId[id].append(listValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapFilteredInfluencerValuesOfId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::sortInfluencerValuesOfId(QMap<QString, QList<double>> &_mapInfluencerValuesOfId)
|
||||||
|
{
|
||||||
|
QMutableMapIterator<QString, QList<double>> iter(_mapInfluencerValuesOfId);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QList<double> &listValue = iter.value();
|
||||||
|
qSort(listValue.begin(), listValue.end(), qGreater<double>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::copyInfluencerFromGroupToList()
|
||||||
|
{
|
||||||
|
m_listMap.clear();
|
||||||
|
|
||||||
|
QMapIterator<int, QMap<int, QList<stInfluencer>>> iter(m_mapInfluencerOfGroup);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QMapIterator<int, QList<stInfluencer>> iter2(iter.value());
|
||||||
|
while (iter2.hasNext())
|
||||||
|
{
|
||||||
|
iter2.next();
|
||||||
|
|
||||||
|
m_listMap.append(iter2.value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::sortInfluencerByValue()
|
||||||
|
{
|
||||||
|
QMutableMapIterator<int, QMap<int, QList<stInfluencer>>> iter(m_mapInfluencerOfGroup);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QMutableMapIterator<int, QList<stInfluencer>> iter2(iter.value());
|
||||||
|
while (iter2.hasNext())
|
||||||
|
{
|
||||||
|
iter2.next();
|
||||||
|
|
||||||
|
QList<stInfluencer> &listInfluencer = iter2.value();
|
||||||
|
qSort(listInfluencer.begin(), listInfluencer.end(), isGreaterInfluencerValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::setInfluecnerRank()
|
||||||
|
{
|
||||||
|
sortInfluencerByValue();
|
||||||
|
|
||||||
|
QMutableMapIterator<int, QMap<int, QList<stInfluencer>>> iter(m_mapInfluencerOfGroup);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QMutableMapIterator<int, QList<stInfluencer>> iter2(iter.value());
|
||||||
|
while (iter2.hasNext())
|
||||||
|
{
|
||||||
|
QList<stInfluencer> &listInfluencer = iter2.next().value();
|
||||||
|
|
||||||
|
int rank = 1;
|
||||||
|
for (QList<stInfluencer>::iterator iter3 = listInfluencer.begin(); iter3 != listInfluencer.end(); iter3++)
|
||||||
|
{
|
||||||
|
iter3->rank = rank++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SInfluencer::STInfluencer::setDuplicatedInfluencerFlag(QMap<int, QList<stInfluencer>> &_mapInfluencersOfCategory, QMap<QString, QList<double>> &_mapInfluencerValuesOfId)
|
||||||
|
{
|
||||||
|
QMutableMapIterator<int, QList<stInfluencer>> iter(_mapInfluencersOfCategory);
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
iter.next();
|
||||||
|
|
||||||
|
QList<stInfluencer> &listInfluencer = iter.value();
|
||||||
|
for (QList<stInfluencer>::iterator iter2 = listInfluencer.begin(); iter2 != listInfluencer.end(); iter2++)
|
||||||
|
{
|
||||||
|
QString id = iter2->id_id;
|
||||||
|
if (!_mapInfluencerValuesOfId.contains(id))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
double fValue = iter2->influencervalue;
|
||||||
|
double fMaxValue = _mapInfluencerValuesOfId[id].first();
|
||||||
|
|
||||||
|
if (fMaxValue == fValue && fMaxValue >= 0)
|
||||||
|
{
|
||||||
|
iter2->isSelected = "true";
|
||||||
|
_mapInfluencerValuesOfId[id][0] = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iter2->isSelected = "false";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SInfluencer::SStatsInfBloggerRank::makeTable(SDatagroup &_datagroup, const QMap<int, stReal>& _mapCategory)
|
void SInfluencer::SStatsInfBloggerRank::makeTable(SDatagroup &_datagroup, const QMap<int, stReal>& _mapCategory)
|
||||||
{
|
{
|
||||||
const QMap<QString, QStringList>* mapBody = _datagroup.getmapBody();
|
const QMap<QString, QStringList>* mapBody = _datagroup.getmapBody();
|
||||||
@@ -1348,135 +1346,6 @@ struct stDate
|
|||||||
stDate():dStart(2020, 1, 1), dEnd(1990, 1, 1){}
|
stDate():dStart(2020, 1, 1), dEnd(1990, 1, 1){}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//void SInfluencer::SStatsJson::makeTable(SDatagroup &_datagroup, const QMap<int, stReal> &_mapCategory)
|
|
||||||
//{
|
|
||||||
// const QMap<QString, QStringList>* mapBody = _datagroup.getmapBody();
|
|
||||||
// const QMap<QString, QMap<int, QStringList> >* mapReply = _datagroup.getmapReply();
|
|
||||||
// const int* anColumn = m_pSInitializer->getColumnIntArray();
|
|
||||||
// const QStringList *slOrderedUrl = _datagroup.getOrderedUrl();
|
|
||||||
|
|
||||||
// QMap<QString, stCount> mapCount;
|
|
||||||
// QMap<QString, stDate> mapBodyDate;
|
|
||||||
|
|
||||||
// foreach (const QString& strUrl, *slOrderedUrl)
|
|
||||||
// {
|
|
||||||
// if (mapBody->contains(strUrl))
|
|
||||||
// {
|
|
||||||
// QString strKey = (*mapBody)[strUrl][anColumn[SInitializer::E_DATA_platform_name]].trimmed() + strSeparator + (*mapBody)[strUrl][anColumn[SInitializer::E_DATA_platform_form]].trimmed();
|
|
||||||
// if (!mapCount.contains(strKey))
|
|
||||||
// mapCount.insert(strKey, stCount());
|
|
||||||
|
|
||||||
// mapCount[strKey].body += 1;
|
|
||||||
// mapCount[strKey].id.insert((*mapBody)[strUrl][anColumn[SInitializer::E_DATA_article_id]].trimmed());
|
|
||||||
|
|
||||||
// if (mapReply->contains(strUrl))
|
|
||||||
// mapCount[strKey].reply += (*mapReply)[strUrl].size();
|
|
||||||
|
|
||||||
// if (!mapBodyDate.contains(strKey))
|
|
||||||
// mapBodyDate.insert(strKey, stDate());
|
|
||||||
// QDate dBodyDate = QDateTime::fromString((*mapBody)[strUrl][anColumn[SInitializer::E_DATA_article_date]].trimmed().replace("T", " "), "yyyy-MM-dd hh:mm:ss").date();
|
|
||||||
// mapBodyDate[strKey].dStart = (mapBodyDate.value(strKey).dStart < dBodyDate) ? mapBodyDate.value(strKey).dStart : dBodyDate;
|
|
||||||
// mapBodyDate[strKey].dEnd = (mapBodyDate.value(strKey).dEnd > dBodyDate) ? mapBodyDate.value(strKey).dEnd : dBodyDate;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// QSet<QString> setRealAllUrl;
|
|
||||||
|
|
||||||
// for (QMap<int, stReal>::const_iterator iterPos = _mapCategory.constBegin(); iterPos != _mapCategory.constEnd(); iterPos++)
|
|
||||||
// {
|
|
||||||
// stStatsJson ststatsjson;
|
|
||||||
// ststatsjson.category_num = iterPos.key();
|
|
||||||
// ststatsjson.platformname_num = 1;
|
|
||||||
// ststatsjson.servicenum = 1;
|
|
||||||
// ststatsjson.title = "info";
|
|
||||||
// ststatsjson.subtitle = "";
|
|
||||||
|
|
||||||
// const stReal& streal = iterPos.value();
|
|
||||||
// QSet<QString> setPlatformType;
|
|
||||||
|
|
||||||
// foreach (const QString& strUrl, streal.m_setRealAllUrl)
|
|
||||||
// {
|
|
||||||
// if (mapBody->contains(strUrl))
|
|
||||||
// setPlatformType.insert((*mapBody)[strUrl][anColumn[SInitializer::E_DATA_platform_name]].trimmed() + strSeparator + (*mapBody)[strUrl][anColumn[SInitializer::E_DATA_platform_form]].trimmed());
|
|
||||||
// setRealAllUrl.insert(strUrl);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// unsigned int nBody = 0;
|
|
||||||
// unsigned int nUser = 0;
|
|
||||||
// QJsonObject jsonObj;
|
|
||||||
|
|
||||||
// foreach (const QString& strKey, setPlatformType)
|
|
||||||
// {
|
|
||||||
// if (strKey == "naver!@#blog")
|
|
||||||
// {
|
|
||||||
// nBody += ((mapBodyDate.value(strKey).dStart.daysTo(mapBodyDate.value(strKey).dEnd) + 1) * 1000);
|
|
||||||
// if (setPlatformType.size() == 1)
|
|
||||||
// jsonObj["pagenum"] = m_pSInitializer->getBlogPageNum();
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// nBody += mapCount[strKey].body;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// nUser += mapCount[strKey].id.size();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// unsigned int nTotalCount = nBody;
|
|
||||||
// jsonObj["totalcount"] = static_cast<int>(nTotalCount);
|
|
||||||
// jsonObj["totalusercount"] = static_cast<int>(nUser);
|
|
||||||
// if (!jsonObj.contains("pagenum"))
|
|
||||||
// jsonObj["pagenum"] = -1;
|
|
||||||
// QJsonDocument jsonDoc(jsonObj);
|
|
||||||
// ststatsjson.jdata = jsonDoc.toJson();
|
|
||||||
// m_listMap.append(ststatsjson);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// {
|
|
||||||
// stStatsJson ststatsjson;
|
|
||||||
// ststatsjson.category_num = -1;
|
|
||||||
// ststatsjson.platformname_num = 1;
|
|
||||||
// ststatsjson.servicenum = 1;
|
|
||||||
// ststatsjson.title = "info";
|
|
||||||
// ststatsjson.subtitle = "";
|
|
||||||
|
|
||||||
// QSet<QString> setPlatformType;
|
|
||||||
|
|
||||||
// foreach (const QString& strUrl, setRealAllUrl)
|
|
||||||
// {
|
|
||||||
// if (mapBody->contains(strUrl))
|
|
||||||
// setPlatformType.insert((*mapBody)[strUrl][anColumn[SInitializer::E_DATA_platform_name]].trimmed() + strSeparator + (*mapBody)[strUrl][anColumn[SInitializer::E_DATA_platform_form]].trimmed());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// unsigned int nBody = 0;
|
|
||||||
// unsigned int nUser = 0;
|
|
||||||
// QJsonObject jsonObj;
|
|
||||||
|
|
||||||
// foreach (const QString& strKey, setPlatformType)
|
|
||||||
// {
|
|
||||||
// if (strKey == "naver!@#blog")
|
|
||||||
// {
|
|
||||||
// nBody += ((mapBodyDate.value(strKey).dStart.daysTo(mapBodyDate.value(strKey).dEnd) + 1) * 1000);
|
|
||||||
// if (setPlatformType.size() == 1)
|
|
||||||
// jsonObj["pagenum"] = m_pSInitializer->getBlogPageNum();
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// nBody += mapCount[strKey].body;
|
|
||||||
// }
|
|
||||||
// nUser += mapCount[strKey].id.size();
|
|
||||||
// }
|
|
||||||
// unsigned int nTotalCount = nBody;
|
|
||||||
// jsonObj["totalcount"] = static_cast<int>(nTotalCount);
|
|
||||||
// jsonObj["totalusercount"] = static_cast<int>(nUser);
|
|
||||||
// if (!jsonObj.contains("pagenum"))
|
|
||||||
// jsonObj["pagenum"] = -1;
|
|
||||||
// QJsonDocument jsonDoc(jsonObj);
|
|
||||||
// ststatsjson.jdata = jsonDoc.toJson();
|
|
||||||
// m_listMap.append(ststatsjson);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
void SInfluencer::SStatsJson::makeGroupStatsJson(SGroupStatistics _groupStatistics, SPlatformStatistics _platformStatistics)
|
void SInfluencer::SStatsJson::makeGroupStatsJson(SGroupStatistics _groupStatistics, SPlatformStatistics _platformStatistics)
|
||||||
{
|
{
|
||||||
QList<int> listGroup = m_pSInitializer->getInfluencerGroup().keys();
|
QList<int> listGroup = m_pSInitializer->getInfluencerGroup().keys();
|
||||||
|
|||||||
@@ -40,10 +40,12 @@ public:
|
|||||||
int platformname_num;
|
int platformname_num;
|
||||||
int sharecount;
|
int sharecount;
|
||||||
int likecount;
|
int likecount;
|
||||||
QString interactionrank;
|
QString interactionrank;
|
||||||
QMap<QString, QList<SDatagroup::stReply>> interactions;
|
QString isSelected;
|
||||||
int interactionsTotalReplyCount;
|
QMap<QString, QList<SDatagroup::stReply>> interactions;
|
||||||
int interactionsTotalCount;
|
int interactionsTotalReplyCount;
|
||||||
|
int interactionsTotalCount;
|
||||||
|
|
||||||
stInfluencer():id_num(0),nickname_num(0),community_num(0),category_num(0),bodycount(0),replycount(0),rank(0),influencervalue(0.0),platformname_num(0),
|
stInfluencer():id_num(0),nickname_num(0),community_num(0),category_num(0),bodycount(0),replycount(0),rank(0),influencervalue(0.0),platformname_num(0),
|
||||||
sharecount(0), likecount(0), interactionsTotalReplyCount(0), interactionsTotalCount(0) {}
|
sharecount(0), likecount(0), interactionsTotalReplyCount(0), interactionsTotalCount(0) {}
|
||||||
|
|
||||||
@@ -117,6 +119,8 @@ int interactionsTotalCount;
|
|||||||
SInitializer *m_pSInitializer;
|
SInitializer *m_pSInitializer;
|
||||||
QList<stInfluencer> m_listMap;
|
QList<stInfluencer> m_listMap;
|
||||||
QMap<int, QList<stInfluencer>> m_mapInfluencerOfCategory;
|
QMap<int, QList<stInfluencer>> m_mapInfluencerOfCategory;
|
||||||
|
QMap<int, QList<int>> m_mapInfluencerGroupInfo;
|
||||||
|
QMap<int, QMap<int, QList<stInfluencer>>> m_mapInfluencerOfGroup;
|
||||||
public:
|
public:
|
||||||
void setInitiaizer(SInitializer &_initializer){ m_pSInitializer = &_initializer; }
|
void setInitiaizer(SInitializer &_initializer){ m_pSInitializer = &_initializer; }
|
||||||
void makeTable(SDatagroup &_datagroup, const QMap<int, stReal>& _mapCategory);
|
void makeTable(SDatagroup &_datagroup, const QMap<int, stReal>& _mapCategory);
|
||||||
@@ -127,6 +131,16 @@ int interactionsTotalCount;
|
|||||||
QList<stInfluencer>& getInfluencerList();
|
QList<stInfluencer>& getInfluencerList();
|
||||||
int getInfluencerCount();
|
int getInfluencerCount();
|
||||||
QMap<QString, int> getInfluencerCountOfPlatform();
|
QMap<QString, int> getInfluencerCountOfPlatform();
|
||||||
|
int getInfluencerGroupNum(int _nCategoryNum);
|
||||||
|
void setInfluencerValueWieght();
|
||||||
|
void processDuplicatedInfluencer();
|
||||||
|
QMap<QString, QList<double>> makeInfluencerValuesOfId(QMap<int, QList<stInfluencer>> &_mapInfluencersOfCategory);
|
||||||
|
QMap<QString, QList<double>> filterInfluencerValuesOfId(QMap<QString, QList<double>> &_mapInfluencerValuesOfId);
|
||||||
|
void sortInfluencerValuesOfId(QMap<QString, QList<double>> &_mapInfluencerValuesOfId);
|
||||||
|
void copyInfluencerFromGroupToList();
|
||||||
|
void sortInfluencerByValue();
|
||||||
|
void setInfluecnerRank();
|
||||||
|
void setDuplicatedInfluencerFlag(QMap<int, QList<stInfluencer>> &_mapInfluencersOfCategory, QMap<QString, QList<double>> &_mapInfluencerValuesOfId);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SStatsInfBloggerRank
|
class SStatsInfBloggerRank
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ private:
|
|||||||
int m_nBlogPageNum;
|
int m_nBlogPageNum;
|
||||||
QMap<int, QString> m_mapConsumerMaketers;
|
QMap<int, QString> m_mapConsumerMaketers;
|
||||||
QMap<int, QString> m_mapConsumerCheckListUser;
|
QMap<int, QString> m_mapConsumerCheckListUser;
|
||||||
QMap<int, QList<int>> m_mapInfluencerGroup;
|
QMap<int, QList<int> > m_mapInfluencerGroup;
|
||||||
QStringList m_slConsumerCheckList;
|
QStringList m_slConsumerCheckList;
|
||||||
bool m_bUpload;
|
bool m_bUpload;
|
||||||
bool m_bDebug;
|
bool m_bDebug;
|
||||||
@@ -243,7 +243,7 @@ public:
|
|||||||
QStringList getConsumerCheckList();
|
QStringList getConsumerCheckList();
|
||||||
QMap<int, QString> getConsumerCheckListUser();
|
QMap<int, QString> getConsumerCheckListUser();
|
||||||
bool isUpload();
|
bool isUpload();
|
||||||
QMap<int, QList<int>> getInfluencerGroup();
|
QMap<int, QList<int> > getInfluencerGroup();
|
||||||
QString getInfluencerLimitFrom();
|
QString getInfluencerLimitFrom();
|
||||||
QString getInfluencerLimitTo();
|
QString getInfluencerLimitTo();
|
||||||
//bool disableIndex(QSqlDatabase& db, QString _tableName, QStringList _strIndexNames, int _nMode = MODE);
|
//bool disableIndex(QSqlDatabase& db, QString _tableName, QStringList _strIndexNames, int _nMode = MODE);
|
||||||
|
|||||||
Reference in New Issue
Block a user