[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