Готови решения > C/C++/Qt/etc
Qt 4.7.4 C++ Бот за сваляне на линкове
(1/1)
haccac:
Кода, който помествам е с учебна цел и не поемам отговорност за какво ще бъде използуван, моля не злоупотребявайте!
Забележка: 1 Кода може да се дообработи оставям го на вас целта ми е да покажа как може да стане не да доизкусурявам.
2 Надявам се знаете защо използвам QHttp а не решението което предлага библиотеката webkit т.е QWebElementCollection :) .
--- Код: C++ (QT) ---#------------------------LinkDownloader.pro----------------------- #-------------------------------------------------## Project created by QtCreator 2011-09-02T21:41:48##------------------------------------------------- QT += coreQT += network QT -= gui TARGET = LinkDownloaderCONFIG += consoleCONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp \ getsouce.cpp HEADERS += \ getsouce.h #----------------------------------getsouce.h------------------------ #ifndef GETSOUCE_H#define GETSOUCE_H #include <QObject>#include <QHttp>#include <QFile>#include <QDir>#include <QTextStream>#include <QStringList>#include <QByteArray>#include <QString>#include <QDebug>#include <QRegExp>#include <QUrl>#include <QTimer> class GetSouce : public QObject{ Q_OBJECTpublic: explicit GetSouce(QObject *parent = 0); void GetCode(QString domain ,QString path); QByteArray b_html; QString s_html; QStringList html_list; QStringList link_list; QStringList dom_list; QStringList path_list; QStringList get_dom_ls; QStringList get_path_ls; QTimer *timer; QUrl dom; int br; void GetDomain(); signals: public slots: void requestFinished(int id, bool error); void Process();private: QHttp *http; }; #endif // GETSOUCE_H #-------------------------------------getsouce.cpp-------------------------------- #include "getsouce.h" GetSouce::GetSouce(QObject *parent) : QObject(parent){ br = 0; timer = new QTimer(this); // Рестартира Process() през определения интервал timer->start(9000);. connect(timer,SIGNAL(timeout()),this,SLOT(Process())); timer->start(9000);} void GetSouce::GetCode(QString domain ,QString path){ http = new QHttp(this); connect(http,SIGNAL(requestFinished(int,bool)), this,SLOT(requestFinished(int,bool))); if(!domain.isEmpty()) { http->setHost(domain); http->get(path); }} void GetSouce::requestFinished(int id, bool error){ if(error) { qDebug() << "Error!"; } else { b_html = http->readAll(); // записва кода в QByteArray s_html = b_html; // Преобразува в QString html_list = s_html.split("<a href=\""); // Разделя стринга и записва в масив for(int i = 0; i < html_list.size(); i++) { if(html_list.at(i).contains(QRegExp("^(http://)?[a-zA-Z0-9_-]+[_-./]*[a-zA-Z0-9_-/?]*"))) // Проверява дали е линк { link_list.append(html_list.at(i).section("\"",0,0)); // унищожава всичко след "\" и прехвърля в друг масив } } for(int n = 0; n < link_list.size(); n++) { dom.setUrl(link_list.at(n)); // Преобразува QString в QUrl if(!dom.host().isEmpty()) { dom_list.append(dom.host()); // Извличча хост path_list.append(dom.path()); // Извлича път до страницата } } QString filename1 = QDir::currentPath().append("/domain.txt"); if( !filename1.isNull() ) { QFile mFile(filename1); if(!mFile.open(QFile::Append | QFile::Text)) { qDebug() << "(W) Error in opening file."; return; } QTextStream out(&mFile); QString op_text = dom_list.join("\n"); out << op_text; mFile.flush(); mFile.close(); } QString filename2 = QDir::currentPath().append("/path.txt"); if( !filename2.isNull() ) { QFile mFile(filename2); if(!mFile.open(QFile::Append | QFile::Text)) { qDebug() << "(W) Error in opening file."; return; } QTextStream out(&mFile); QString op_text = path_list.join("\n"); out << op_text; mFile.flush(); mFile.close(); } }} void GetSouce::GetDomain(){ get_dom_ls.clear(); // Изчистваме get_dom_ls и get_path_ls преди всяко записване. get_path_ls.clear(); QString filename1 = QDir::currentPath().append("/domain.txt"); if( !filename1.isNull() ) { QFile mFile(filename1); if(!mFile.open(QFile::ReadOnly | QFile::Text)) { qDebug() << "(R) Error in opening file."; return; } QTextStream in(&mFile); get_dom_ls = in.readAll().split("\n"); } QString filename2 = QDir::currentPath().append("/path.txt"); if( !filename2.isNull() ) { QFile mFile(filename2); if(!mFile.open(QFile::ReadOnly | QFile::Text)) { qDebug() << "(R) Error in opening file."; return; } QTextStream in(&mFile); get_path_ls = in.readAll().split("\n"); }} void GetSouce::Process(){ GetDomain(); b_html.clear(); s_html.clear(); html_list.clear(); link_list.clear(); dom_list.clear(); path_list.clear(); GetCode(get_dom_ls.at(br) ,get_path_ls.at(br)); br++; // Помни позицията, от която четем. GetDomain(); qDebug() << "new Searching"; } #-------------------------------main.cpp------------------------ #include <QtCore/QCoreApplication>#include "getsouce.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); GetSouce gs ; qDebug() << "Izchakajte"; gs.GetCode("katalozi.free.bg","/"); return a.exec();}
не забравяйте да сложите path.txt и domain.txt
Навигация
[0] Списък на темите
Премини на пълна версия