#------------------------LinkDownloader.pro-----------------------
#-------------------------------------------------
#
# Project created by QtCreator 2011-09-02T21:41:48
#
#-------------------------------------------------
QT += core
QT += network
QT -= gui
TARGET = LinkDownloader
CONFIG += console
CONFIG -= 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>
{
Q_OBJECT
public:
explicit GetSouce
(QObject *parent
= 0);
int br;
void GetDomain();
signals:
public slots:
void requestFinished(int id, bool error);
void Process();
private:
};
#endif // GETSOUCE_H
#-------------------------------------getsouce.cpp--------------------------------
#include "getsouce.h"
GetSouce
::GetSouce(QObject *parent
) :{
br = 0;
timer
= new QTimer(this); // Рестартира Process() през определения интервал timer->start(9000);. connect(timer,SIGNAL(timeout()),this,SLOT(Process()));
timer->start(9000);
}
{
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() )
{
{
qDebug() << "(W) Error in opening file.";
return;
}
QString op_text
= dom_list.
join("\n"); out << op_text;
mFile.flush();
mFile.close();
}
QString filename2
= QDir::currentPath().
append("/path.txt"); if( !filename2.isNull() )
{
{
qDebug() << "(W) Error in opening file.";
return;
}
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() )
{
{
qDebug() << "(R) Error in opening file.";
return;
}
get_dom_ls = in.readAll().split("\n");
}
QString filename2
= QDir::currentPath().
append("/path.txt"); if( !filename2.isNull() )
{
{
qDebug() << "(R) Error in opening file.";
return;
}
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[])
{
GetSouce gs ;
qDebug() << "Izchakajte";
gs.GetCode("katalozi.free.bg","/");
return a.exec();
}