Skip to content

Commit

Permalink
feat: 增加哔哩哔哩的数据获取功能, 尚不完善
Browse files Browse the repository at this point in the history
  • Loading branch information
mhduiy committed Jul 13, 2023
1 parent 4a81381 commit b87798e
Show file tree
Hide file tree
Showing 13 changed files with 283 additions and 18 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ set(CMAKE_AUTOUIC ON)

set(Qt5_DIR C:\\Qt\\Qt5.14.2\\5.14.2\\mingw73_64\\lib\\cmake\\Qt5)

include_directories(C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.8_3.8.2800.0_x64__qbz5n2kfra8p0\\include)

find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt5 COMPONENTS Gui REQUIRED)
find_package(Qt5 COMPONENTS Core REQUIRED)
Expand Down
Binary file added img/img2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/img3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 7 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
## simply工具箱

一个简单易用的跨平台工具箱,基于Qt开发
## V1.0 准备实现的功能

![img](img/img.png)

![img.png](img/img2.png)

![img_1.png](img/img3.png)
## V1.0 准备实现的功能

- [x] 集成简单翻译
- [x] 屏幕截图和取色器
- [ ] B站实时数据
- [x] B站实时数据
- [ ] 还有些许bug
## License

See the [LICENSE](LICENSE) file for license rights and limitations (MIT).
86 changes: 86 additions & 0 deletions src/bilibiliData/BiliBiliDataTool.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
//
// Created by mhduiy on 2023/7/13.
//

#include "BiliBiliDataTool.h"
#include <QDebug>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QPixmap>

const QString sessdata = "af2f29c8%2C1704762516%2Cad7cf%2A71qWs1EFcs2cskQdRym9fATqazZDQRLVb5DWQR6mbx7U0DNonWhfd0yG6O2FAXcYEC_7xqigAAJgA";
const QString bili_jct = "0a036ea1780e61be41b010e2fb7085ac";

BiliBiliDataTool::BiliBiliDataTool(QObject *parent) : QObject(parent) {
jsonFilePath = qApp->applicationDirPath() + "/bilibili.json";
manager = new QNetworkAccessManager;
}

QMap<int, QString> BiliBiliDataTool::getData() {
QMap<int, QString> result;
QString command = QString("python3") +
" D:\\code\\simplyTools\\src\\customComponents\\res\\getBiliBiliData.py"
+ " " + sessdata + " " + bili_jct + " " + jsonFilePath;
int ret = system(command.toLocal8Bit());

// 读取json数据文件
QFile file(jsonFilePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
emit readError("JSON file opening failed");
return result;
}
QByteArray jsonData = file.readAll();
QJsonDocument document = QJsonDocument::fromJson(jsonData);
if (document.isNull()) {
emit readError("json document is null");
return result;
}
QJsonObject jsonObject = document.object();
for(int i = 0; i < BL_TOTAL; i++) {
if(jsonObject.contains(jsonKey.value(i))) {
if(i == BL_iconUrl || i == BL_userName) {
result.insert(i, jsonObject[jsonKey.value(i)].toString());
}
else if(i == BL_coinCount) {
result.insert(i, QString::number(jsonObject[jsonKey.value(i)].toDouble()));
}
else {
result.insert(i, QString::number(jsonObject[jsonKey.value(i)].toInt()));
}
}
}
emit readFinish(result); // 发送成功读取的消息
return result;
}

void BiliBiliDataTool::getImageFromUrl(const QString &url) {
// 设置要获取的图片链接
QUrl imageUrl(url);

// 发送网络请求获取图片
QNetworkReply *reply = manager->get(QNetworkRequest(imageUrl));

// 连接信号和槽,当请求完成时触发
QObject::connect(reply, &QNetworkReply::finished, [=]() {
if (reply->error() == QNetworkReply::NoError) {
// 读取图片数据
QByteArray imageData = reply->readAll();

// 将图片数据加载到 QPixmap
QPixmap pixmap;
pixmap.loadFromData(imageData);
readUserImageFinish(pixmap);
} else {
// 处理请求错误
qDebug() << "请求错误: " << reply->errorString();
}

// 清理资源
reply->deleteLater();
});
}
61 changes: 61 additions & 0 deletions src/bilibiliData/BiliBiliDataTool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
//
// Created by mhduiy on 2023/7/13.
//

#ifndef SIMPLYTOOLS_BILIBILIDATATOOL_H
#define SIMPLYTOOLS_BILIBILIDATATOOL_H

#include <QObject>
#include <QMap>
#include <QGuiApplication>
#include <QNetworkAccessManager>

const QString pythonFileName = ":/getBiliBiliData.py";

enum bilibiliDataEnum {
BL_iconUrl = 0,
BL_userName,
BL_uid,
BL_level,
BL_coinCount,
BL_followCount,
BL_fansCount,
BL_likeCount,
BL_playCount,
BL_readCount,
BL_TOTAL
};

const QStringList jsonKey {
"iconUrl",
"userName",
"uid",
"level",
"coinCount",
"followCount",
"fansCount",
"likeCount",
"playCount",
"readCount"
};

class BiliBiliDataTool : public QObject{
Q_OBJECT
public:
explicit BiliBiliDataTool(QObject *parent = nullptr);
QMap<int, QString> getData();
void getImageFromUrl(const QString &url);

signals:

void readFinish(const QMap<int, QString>& map);
void readError(const QString& errorInfo);
void readUserImageFinish(const QPixmap &pixmap);

private:
QString jsonFilePath;
QNetworkAccessManager *manager = nullptr;
};


#endif //SIMPLYTOOLS_BILIBILIDATATOOL_H
50 changes: 44 additions & 6 deletions src/bilibiliData/bilibiliDataWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
#include "bilibiliDataWidget.h"
#include <QLayout>
#include <QPixmap>
#include <QDebug>

BilibiliDataWidget::BilibiliDataWidget(QWidget *parent) : QWidget(parent){
initUI();
initData();
}

void BilibiliDataWidget::initUI() {
Expand Down Expand Up @@ -58,10 +58,10 @@ void BilibiliDataWidget::initUI() {
operatorBtnLayout->addWidget(setInfoBtn);
operatorBtnLayout->addWidget(updateBtn);

headLayout->addWidget(headImageLabel, 3);
headLayout->addLayout(userInfoLayout, 3);
headLayout->addWidget(headImageLabel, 5);
headLayout->addLayout(userInfoLayout, 5);
headLayout->addStretch(1);
headLayout->addLayout(operatorBtnLayout, 3);
headLayout->addLayout(operatorBtnLayout, 5);

displayLayout->addWidget(coinCountLabel, 0, 0);
displayLayout->addWidget(followCountLabel, 0, 1);
Expand All @@ -80,6 +80,10 @@ void BilibiliDataWidget::initUI() {
void BilibiliDataWidget::initData() {
connect(setInfoBtn, &MButton::clicked, this, &BilibiliDataWidget::setInfoBtnClicked);
connect(updateBtn, &MButton::clicked, this, &BilibiliDataWidget::updateBtnClicked);
connect(updateBtn, &MButton::clicked, biliBiliDataTool, &BiliBiliDataTool::getData);
connect(biliBiliDataTool, &BiliBiliDataTool::readUserImageFinish, [this](const QPixmap& pixmap){
headImageLabel->setPixmap(pixmap);
});
}


Expand All @@ -88,13 +92,47 @@ void BilibiliDataWidget::showEvent(QShowEvent *event) {
if(mNotificationBox == nullptr) {
mNotificationBox = new MNotificationBox(this);
}
if(biliBiliDataTool == nullptr) {
biliBiliDataTool = new BiliBiliDataTool();
connect(biliBiliDataTool, &BiliBiliDataTool::readFinish, this, &BilibiliDataWidget::showData);
connect(biliBiliDataTool, &BiliBiliDataTool::readError, this, [this](const QString& str){
this->mNotificationBox->sendMsg("读取失败: " + str, MSG_Error);
});
}
if(getBiliBiliDataThread == nullptr) {
getBiliBiliDataThread = new QThread();
biliBiliDataTool->moveToThread(getBiliBiliDataThread);
getBiliBiliDataThread->start();
}

if(isFirstShow) {
initData();
isFirstShow = false;
}
}

void BilibiliDataWidget::updateBtnClicked() {
mNotificationBox->sendMsg("功能还在建设中...", MSG_Success);
mNotificationBox->sendMsg("正在获取数据", MSG_Warning);
// biliBiliDataTool->getData();
}

void BilibiliDataWidget::setInfoBtnClicked() {
mNotificationBox->sendMsg("功能还在建设中...", MSG_Success);
}
}

void BilibiliDataWidget::showData(const QMap<int, QString>& info) {
userNameLabel->setText("用户名: " + info.value(BL_userName, "*读取失败*"));
uidLabel->setText("UID: " + info.value(BL_uid, "*读取失败*"));
levelLabel->setText("等级: LV." + info.value(BL_level, "*读取失败*"));

coinCountLabel->setText(info.value(BL_coinCount, "*读取失败*"));
followCountLabel->setText(info.value(BL_followCount, "*读取失败*"));
fanCountLabel->setText(info.value(BL_fansCount, "*读取失败*"));
likeCountLabel->setText(info.value(BL_likeCount, "*读取失败*"));
playCountLabel->setText(info.value(BL_playCount, "*读取失败*"));
readCountLabel->setText(info.value(BL_readCount, "*读取失败*"));

mNotificationBox->sendMsg("刷新成功", MSG_Warning);

biliBiliDataTool->getImageFromUrl(info.value(BL_iconUrl));
}
9 changes: 9 additions & 0 deletions src/bilibiliData/bilibiliDataWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include "customComponents/MIcon.h"
#include "customComponents/MButton.h"
#include "customComponents/MNotificationBox.h"
#include "BiliBiliDataTool.h"
#include <QThread>

class BilibiliDataWidget : public QWidget{
Q_OBJECT
Expand All @@ -24,6 +26,8 @@ class BilibiliDataWidget : public QWidget{
void updateBtnClicked();
void setInfoBtnClicked();

void showData(const QMap<int, QString>&);

private:
QLabel *headImageLabel = nullptr;

Expand All @@ -42,6 +46,11 @@ class BilibiliDataWidget : public QWidget{
MIcon *readCountLabel = nullptr;

MNotificationBox *mNotificationBox = nullptr;
BiliBiliDataTool *biliBiliDataTool = nullptr;

QThread *getBiliBiliDataThread = nullptr;

bool isFirstShow = true;
};


Expand Down
2 changes: 1 addition & 1 deletion src/customComponents/MIcon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,5 @@ void MIcon::setTitle(const QString &title) {
}

void MIcon::setText(const QString &text) {
titleLabel->setText(text);
textLabel->setText(text);
}
15 changes: 6 additions & 9 deletions src/customComponents/MNotificationBox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,14 @@ MNotificationBox::MNotificationBox(QWidget *cutWidget){
msgWidget = new MNotificationWidget(mainWindow);

m_animation->setTargetObject(msgWidget);
m_animation->setEasingCurve(QEasingCurve::OutBack);
m_animation->setDuration(600);
m_animation->setEasingCurve(QEasingCurve::OutQuint);
m_animation->setDuration(500);
m_animation->setPropertyName("pos");

m_opacityAnimation = new QPropertyAnimation();
m_opacityAnimation->setTargetObject(msgWidget);
m_opacityAnimation->setEasingCurve(QEasingCurve::OutBack);
m_opacityAnimation->setDuration(600);
m_opacityAnimation->setEasingCurve(QEasingCurve::OutQuint);
m_opacityAnimation->setDuration(500);
m_opacityAnimation->setPropertyName("windowOpacity");

msgWidget->setVisible(false);
Expand All @@ -91,9 +91,9 @@ MNotificationBox::MNotificationBox(QWidget *cutWidget){
connect(msgWidget, &MNotificationWidget::closeBtnClicked, this, &MNotificationBox::closeMsgWidget);
}

void MNotificationBox::sendMsg(const QString &content, const QIcon &icon, int duration) {
void MNotificationBox::sendMsg(const QString &content, const QIcon &icon, int _duration) {
msgWidget->setContent(content, icon);
this->duration = duration;
this->duration = _duration;
openMsgWidget();
}

Expand All @@ -106,7 +106,6 @@ void MNotificationBox::closeMsgWidget() {

qreal cutOpacity = msgWidget->windowOpacity();
qreal tarOpacity = 0;
qDebug() << cutOpacity << " " <<tarOpacity;
m_opacityAnimation->setStartValue(cutOpacity);
m_opacityAnimation->setEndValue(tarOpacity);
m_opacityAnimation->start();
Expand All @@ -131,7 +130,6 @@ void MNotificationBox::openMsgWidget() {
qreal cutOpacity = msgWidget->windowOpacity();
qreal tarOpacity = 1;

qDebug() << cutOpacity << " " <<tarOpacity;
m_opacityAnimation->setStartValue(cutOpacity);
m_opacityAnimation->setEndValue(tarOpacity);
m_opacityAnimation->start();
Expand All @@ -143,7 +141,6 @@ QWidget *MNotificationBox::findMainWindow(QObject *obj) {
if(obj == nullptr) {
return nullptr;
}
qDebug() << obj->metaObject()->className();
if(strcmp(obj->metaObject()->className(), "MainWindow") == 0) {
return qobject_cast<QWidget*>(obj);
}
Expand Down
1 change: 1 addition & 0 deletions src/customComponents/res/button.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
<file>successIcon.png</file>
<file>errorIcon.png</file>
<file>warningIcon.png</file>
<file>getBiliBiliData.py</file>
</qresource>
</RCC>
Loading

0 comments on commit b87798e

Please sign in to comment.