-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrjutility.cpp
More file actions
135 lines (119 loc) · 4.2 KB
/
rjutility.cpp
File metadata and controls
135 lines (119 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include "rjutility.h"
#include <QWidget>
#include <QSettings>
#include <QtWebKit>
#include <QtWebKitWidgets>
RJUtility::RJUtility(QWidget *parent)
: QWidget(parent)
{
QSettings setting("config.ini",QSettings::IniFormat);
setting.beginGroup("RJNameConfig");
UrlBase=setting.value("DLsiteUrlBase").toString();
FormatNameTemplate=setting.value("FormatNameTemplate").toString();
RJNumber_URL_Selector=setting.value("RJNumber_URL_Selector").toString();
maker_name_Selector = setting.value("maker_name_Selector").toString();
work_name_Selector = setting.value("work_name_Selector").toString();
work_outline_Selector = setting.value("work_outline_Selector").toString();
img_body_Selector = setting.value("img_body_Selector").toString();
img_attribute = setting.value("img_Attribute").toString();
}
QString RJUtility::NameCheck(QString newname)
{
newname.replace("?","?");
newname.replace("~","~");
newname.replace("*","*");
newname.replace("/","/");
newname.replace("\\","\");
newname.replace(":",":");
newname.replace("\"",""");
newname.replace("<","<");
newname.replace(">",">");
newname.replace("|","|");
return newname;
}
QString RJUtility::GetRJname(QString filename)
{
QRegExp rx("(RJ\\d{6})");
rx.setMinimal(true);
rx.indexIn(filename.toUpper(), 0);
return rx.cap(1);
}
QString RJUtility::GetFormatName(QString src)
{
QString name = FormatNameTemplate;
QWebView *webView =new QWebView();
webView->setHtml(src);
QWebElement document = webView->page()->mainFrame()->documentElement();
//QWebElementCollection elements = document.findAll(work_name_Selector);
//RJ號
QString RJNumber = GetRJname(document.findFirst(RJNumber_URL_Selector).attribute("href"));
//class = maker_name 社團
QString maker_name = document.findAll(maker_name_Selector).first().toPlainText();
//id = work_name 名稱
QString work_name = document.findAll(work_name_Selector).first().toPlainText();
//id = work_outline 描述
QWebElement work_outline = document.findAll(work_outline_Selector).first();
QList<QWebElement> fields = work_outline.findAll("tbody tr th").toList();
QList<QWebElement> values = work_outline.findAll("tbody tr td").toList();
int findSaleDateRow =-1;
int findRJTypesRow =-1;
for(int i =0; i<fields.length();i++){
if(fields.at(i).toPlainText()=="販売日"){
findSaleDateRow = i;
}
if(fields.at(i).toPlainText()=="作品形式"){
findRJTypesRow = i;
}
}
if(findSaleDateRow==-1 || findRJTypesRow==-1){
return "";
}
//販售日
QString saleDate =values.at(findSaleDateRow).toPlainText()
.replace("年","")
.replace("月","")
.replace("日","")
.right(6);
//類型
QString rjtype;
QWebElementCollection rjtypes = values.at(findRJTypesRow).findAll("a");
foreach (QWebElement item , rjtypes){
rjtype +="("+item.toPlainText() +")";
}
name =name.replace("{maker_name}",maker_name)
.replace("{saleDate}",saleDate)
.replace("{RJNumber}",RJNumber)
.replace("{work_name}",work_name)
.replace("{rjtype}",rjtype);
return name;
}
QString RJUtility::GetUrlByRJNumber(QString rjNumber)
{
QString base = UrlBase;
return base.replace("{RJNumber}",rjNumber);
}
QByteArray RJUtility::DownloadInfo(QString path)
{
QUrl url(path);
QNetworkAccessManager manager;
QEventLoop loop;
QNetworkReply *reply = manager.get(QNetworkRequest(url));
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QByteArray data = reply->readAll();
return data;
}
QStringList RJUtility::GetImageUrls(QString src)
{
QStringList Urls;
if(!src.isEmpty()){
QWebView *webView =new QWebView();
webView->setHtml(src);
QWebElement document = webView->page()->mainFrame()->documentElement();
QList<QWebElement> img_body = document.findAll(img_body_Selector).toList();
for(int i =0; i<img_body.length();i++){
Urls<<"http:"+img_body.at(i).attribute(img_attribute);
}
}
return Urls;
}