Готови решения > 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] Списък на темите

Премини на пълна версия