File indexing completed on 2024-05-19 04:48:27

0001 #include "htmlparser.h"
0002 
0003 htmlParser::htmlParser(QObject *parent)
0004     : QObject(parent)
0005 {
0006 }
0007 
0008 void htmlParser::setHtml(const QByteArray &array)
0009 {
0010     this->html = array;
0011 }
0012 
0013 QString htmlParser::extractProp(const QString &tag, const QString &prop)
0014 {
0015     //    qDebug()<<"extractProp"<<tag;
0016     auto list = tag.split(" ");
0017     auto result = list.filter(prop, Qt::CaseInsensitive);
0018     //    qDebug()<<result;
0019     auto url = result.first().replace(prop, "").replace('\"', "");
0020     //    qDebug()<<url;
0021     return url;
0022 }
0023 
0024 QStringList htmlParser::parseTag(const QString &tagRef, const QString &attribute)
0025 {
0026     QStringList results;
0027     QStringList html(QString(this->html).split(">"));
0028 
0029     for (auto i = 0; i < html.size(); i++) {
0030         QString tag = html.at(i);
0031         tag += ">";
0032 
0033         if (findTag(tag, "<" + tagRef + ">") && tag.contains(attribute)) {
0034             QString subResult;
0035             //            qDebug()<<subResult;
0036             while (!html.at(i).contains("</" + tagRef)) {
0037                 auto subTag = html.at(i);
0038                 subTag += ">";
0039                 subResult += subTag;
0040                 i++;
0041                 if (i > html.size())
0042                     break;
0043             }
0044 
0045             results << subResult.simplified();
0046             qDebug() << subResult;
0047         }
0048     }
0049 
0050     return results;
0051 }
0052 
0053 /*QStringList htmlParser::parseTag_old(const QString &tagRef)
0054 {
0055     QString html(this->html);
0056     QStringList tags;
0057     int i =0;
0058     while(html.size()>i)
0059     {
0060         if(html.at(i)=="<")
0061         {
0062             QString tag;
0063 
0064             while(html.at(i)!=">")
0065             {
0066                 tag+=html.at(i);
0067                 i++;
0068                 if(i>html.size()) break;
0069             }
0070             tag+=">";
0071 
0072 
0073             if(findTag(tag,tagRef))
0074             {
0075                 tags<<tag;
0076                 qDebug()<<tag;
0077             }
0078 
0079         }
0080 
0081         i++;
0082         if(i>html.size()) break;
0083     }
0084 
0085     return tags;
0086 }*/
0087 
0088 bool htmlParser::findTag(const QString &txt, const QString &tagRef)
0089 {
0090     //    qDebug()<<"size of tag<<"<<txt.size();
0091     int i = 0;
0092     QString subTag;
0093     while (i < txt.size()) {
0094         if (txt.at(i).toLatin1() == '<') {
0095             while (!txt.at(i).isSpace() && txt.at(i).toLatin1() != '>') {
0096                 subTag += txt.at(i);
0097                 i++;
0098                 if (i > txt.size())
0099                     break;
0100             }
0101             subTag += ">";
0102         }
0103 
0104         i++;
0105         if (i > txt.size())
0106             break;
0107     }
0108 
0109     if (tagRef == subTag)
0110         return true;
0111     else
0112         return false;
0113 }