1 #include "yt3listparser.h"
5 YT3ListParser::YT3ListParser(const QByteArray &bytes) {
8 QScriptValue json = engine.evaluate("(" + QString::fromUtf8(bytes) + ")");
10 nextPageToken = json.property("nextPageToken").toString();
12 QScriptValue items = json.property("items");
13 videos.reserve(items.property("length").toInt32() - 1);
14 if (items.isArray()) {
15 QScriptValueIterator it(items);
16 while (it.hasNext()) {
18 QScriptValue item = it.value();
19 // For some reason the array has an additional element containing its size.
20 if (item.isObject()) parseItem(item);
27 void YT3ListParser::parseItem(const QScriptValue &item) {
28 Video *video = new Video();
30 QScriptValue id = item.property("id");
31 if (id.isString()) video->setId(id.toString());
33 QString videoId = id.property("videoId").toString();
34 video->setId(videoId);
37 QScriptValue snippet = item.property("snippet");
39 bool isLiveBroadcastContent = snippet.property("liveBroadcastContent").toString() != QLatin1String("none");
40 if (isLiveBroadcastContent) {
45 QString publishedAt = snippet.property("publishedAt").toString();
46 QDateTime publishedDateTime = QDateTime::fromString(publishedAt, Qt::ISODate);
47 video->setPublished(publishedDateTime);
49 video->setChannelId(snippet.property("channelId").toString());
51 video->setTitle(snippet.property("title").toString());
52 video->setDescription(snippet.property("description").toString());
54 QScriptValue thumbnails = snippet.property("thumbnails");
55 video->setThumbnailUrl(thumbnails.property("medium").property("url").toString());
56 video->setMediumThumbnailUrl(thumbnails.property("high").property("url").toString());
58 video->setChannelTitle(snippet.property("channelTitle").toString());
60 // These are only for "videos" requests
62 QScriptValue contentDetails = item.property("contentDetails");
63 if (contentDetails.isObject()) {
64 QString isoPeriod = contentDetails.property("duration").toString();
65 int duration = DataUtils::parseIsoPeriod(isoPeriod);
66 video->setDuration(duration);
69 QScriptValue statistics = item.property("statistics");
70 if (statistics.isObject()) {
71 uint viewCount = statistics.property("viewCount").toUInt32();
72 video->setViewCount(viewCount);