[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdeplasma-addons/plasma/sreich/youtube-runner] runners/youtube: implement non functional json parse
From:       Shaun Reich <shaun.reich () kdemail ! net>
Date:       2012-02-26 15:26:58
Message-ID: 20120226152658.B97ACA60BE () git ! kde ! org
[Download RAW message or body]

Git commit b0a9667e0a262ececb720bab6a6100b942976006 by Shaun Reich.
Committed on 26/02/2012 at 16:14.
Pushed by sreich into branch 'plasma/sreich/youtube-runner'.

implement non functional json parser

M  +9    -2    runners/youtube/tubejob.cpp
M  +2    -0    runners/youtube/tubejob.h
M  +28   -72   runners/youtube/youtube.cpp
M  +1    -2    runners/youtube/youtube.h

http://commits.kde.org/kdeplasma-addons/b0a9667e0a262ececb720bab6a6100b942976006

diff --git a/runners/youtube/tubejob.cpp b/runners/youtube/tubejob.cpp
index 5470859..a28c4ef 100644
--- a/runners/youtube/tubejob.cpp
+++ b/runners/youtube/tubejob.cpp
@@ -40,9 +40,16 @@ TubeJob::TubeJob(const QString& term)
 
 void TubeJob::jobCompleted(QNetworkReply* reply)
 {
-    kDebug() << "JOBCOMPLETED, BYTE ARRAY: " << reply->readAll();
-//    kDebug() << "JOB FINISHED!!: " << m_job->data();
+    m_data = reply->readAll();
+    kDebug() << "JOBCOMPLETED, BYTE ARRAY: " << m_data;
+
     emit finished();
 }
 
+QByteArray TubeJob::data()
+{
+    return m_data;
+}
+
+
 #include "tubejob.moc"
diff --git a/runners/youtube/tubejob.h b/runners/youtube/tubejob.h
index 27214a0..1aac48a 100644
--- a/runners/youtube/tubejob.h
+++ b/runners/youtube/tubejob.h
@@ -35,6 +35,7 @@ public:
     TubeJob(const QString& term);
 
     void start();
+    QByteArray data();
 
 private Q_SLOTS:
     void jobCompleted(QNetworkReply *reply);
@@ -44,6 +45,7 @@ Q_SIGNALS:
 
 private:
     QNetworkAccessManager *m_manager;
+    QByteArray m_data;
 };
 
 #endif
diff --git a/runners/youtube/youtube.cpp b/runners/youtube/youtube.cpp
index b59e355..4dfbd75 100644
--- a/runners/youtube/youtube.cpp
+++ b/runners/youtube/youtube.cpp
@@ -24,8 +24,8 @@
 
 #include <QtCore/QTimer>
 #include <QtCore/QWaitCondition>
-#include <QtXml/QXmlStreamReader>
 #include <QtCore/QEventLoop>
+#include <qjson/parser.h>
 
 //TODO: I'd really *love* to be able to embed a video *inside* krunner. you know how \
sexy that'd be? answer: very much.  //but seeing as youtube doesn't fully support \
html5 (only for non-ad'ed videos), i guess i'll have to hold off on it? @@ -76,6 \
+76,8 @@ void YouTube::match(Plasma::RunnerContext &context)  TubeJob tubeJob(term);
     connect(&tubeJob, SIGNAL(finished()), &loop, SLOT(quit()));
     loop.exec();
+
+    parseJson(tubeJob.data());
 }
 
 void YouTube::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch \
&match) @@ -93,79 +95,33 @@ void YouTube::run(const Plasma::RunnerContext &context, \
const Plasma::QueryMatch  //    }
 }
 
-void YouTube::parseXML(QByteArray data)
+void YouTube::parseJson(const QByteArray& data)
 {
-    QXmlStreamReader xml(data);
-
-    if (xml.hasError()) {
-        kError() << "YouTube Runner xml parse failure";
-        return;
-    }
-
-    while (!xml.atEnd()) {
-        QXmlStreamReader::TokenType token = xml.readNext();
-
-        if (token == QXmlStreamReader::StartDocument) {
-            continue;
+    kDebug() << "JSON PARSER ONLINE";
+    QJson::Parser parser;
+    const QVariantMap resultsMap = parser.parse(data).toMap();
+
+    const QString& match = "duckduckgo";
+
+    if (match == "define") {
+        //dictionary mode
+        kDebug() << "Heading:" << resultsMap.value("Heading");
+        kDebug() << "AbstractSource:" << resultsMap.value("AbstractSource");
+        kDebug() << "Abstract:" << resultsMap.value("Abstract");
+        kDebug() << "AbstractURL:" << resultsMap.value("AbstractURL");
+    } else if (match == "wolfram") {
+        //wolfram mode (simple redirection, because web search providers are \
assholes) +        kDebug() << "Redirect:" << resultsMap.value("Redirect");
+    } else if (match == "duckduckgo") {
+        QList<QVariant> related = resultsMap.value("RelatedTopics").toList();
+
+        foreach (const QVariant& variant, related) {
+            QVariantMap submap = variant.toMap();
+
+            kDebug() << "FirstURL:" << submap.value("FirstURL");
+            kDebug() << "Text:" << submap.value("Text");
+            kDebug() << "Icon:" << submap.value("Icon").toMap().value("URL");
         }
-
-        if (token == QXmlStreamReader::StartElement) {
-            if (xml.name() == "group") {
-                parseVideo(xml);
-            }
-        }
-    }
-}
-
-void YouTube::parseVideo(QXmlStreamReader& xml)
-{
-    QStringRef name = xml.name();
-    QString currentElement;
-
-    QStringList videoTitles;
-    QStringList videoLinks;
-
-    kDebug() << "NAME: " << name;
-
-    QXmlStreamAttributes attributes = xml.attributes();
-    while (!xml.atEnd() && xml.tokenType() != QXmlStreamReader::EndDocument) {
-        kDebug() << "WHILE LOOP(((((((((((((((((()))))))))))))))))), name: " << \
                xml.name();
-
-
-        kDebug() << "CURRENTELEMENT: " << currentElement;
-
-        if (xml.name() == "title") {
-            kDebug() << attributes.value("plain").toString();
-        }
-
-        if (xml.name() == "thumbnail") {
-            QStringRef attribute = attributes.value("url");
-            kDebug() << "ATTRIBUTE: " << attribute;
-        }
-//            if (name == "title") {
-//                kDebug() << "GOT TITLE: " << name;
-//                videoTitles.append(xml.readElementText());
-//
-//            } else if (name == "link") {
-//
-//                if (xml.attributes().value("rel").toString() == "alternate") {
-//                    kDebug() << "ATTRIBUTES: " << xml.attributes().value("href");
-//                    const QString& link = \
                xml.attributes().value("href").toString();
-//                    if (link != "http://www.youtube.com") {
-//                        videoLinks.append(link);
-//                    }
-//                }
-//            }
-
-        xml.readNext();
-        attributes = xml.attributes();
-        currentElement = xml.readElementText();
-        kDebug() << currentElement;
-    }
-
-    if (!videoTitles.isEmpty() && !videoLinks.isEmpty()) {
-        kDebug() << "TITLE WAS: " << videoTitles;
-        kDebug() << "LINK WAS: " << videoLinks;
     }
 }
 
diff --git a/runners/youtube/youtube.h b/runners/youtube/youtube.h
index 57bce0e..4a6a592 100644
--- a/runners/youtube/youtube.h
+++ b/runners/youtube/youtube.h
@@ -44,8 +44,7 @@ Q_SIGNALS:
     void matchMade(Plasma::RunnerContext *context);
 
 private:
-    void parseXML(QByteArray);
-    void parseVideo(QXmlStreamReader& xml);
+    void parseJson(const QByteArray& data);
 };
 
 K_EXPORT_PLASMA_RUNNER(youtube, YouTube)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic