如何在Scope中利用keyword来使自己的Scope在聚合Scope中展示自己

在前面的文章“Scopes 关键词 (keyword)及departments探讨(英文视频)”中,我们已经对Scope中的keyword做了一些基本的介绍。但是我们没有相应的教程。在这篇文章中,我们将通过youku Scope来介绍如何使用keyword从而使得一个Scope在不同的聚合Scope中来得到不同的呈现。


如果大家对如何开发Scope还不是很熟的话,请参阅我的教程“在Ubuntu OS上创建一个dianping Scope (Qt JSON)”。如果大家对创建Scope很熟的话,相信要不了一两个小时,你就可以创建一个和我相差不多的一个Scope来。


创建一个最基本的优酷视频Scope


只要大家按照我上面介绍的例程,我们就会很快地创建一个和如下相差不多的youku视频Scope:





整个项目的源码在: https://github.com/liu-xiao-guo/youku

简单吧,是一个非常简单的youku Scope。

在我们的代码中,我们也同时修改“src/data”目录下的“youku.ini.in”文件:

[ScopeConfig]
_DisplayName=Youku Scope
_Description=This is a Youku scope
Art=screenshot.png
Author=Firstname Lastname
Icon=icon.png
Keywords=video;videos

[Appearance]
PageHeader.Logo=logo.png

可以看出来在这里,我们使用了Keywords “ video”及“ videos”。表明我们的Scope可以被Video Scope所聚合,并呈现在Video聚合Scope中。当然如果我们的Scope也是和位置相关的,我们也可以加入“nearby”在我们的Scope中。更多的关键词keywords可以在网址 https://developer.ubuntu.com/en/scopes/tutorials/scope-keywords/中找到。我们在手机中打开Video聚合Scope,并打开它的设置:

  


记得在“ Display results from Youku Scope”选项上勾上。我们可以看出来,在Video聚合Scope中,我们可以看到我们的youku Scope里的内容,虽然只是其中的一部分。如果,我们点击上图的“ Youku Scope Features”,我们可以直接切换到我们的youku Scope中来:




这时如果我们返回的话,就会回到先前的画面中去。


对聚合时显示不同的UI


上面的设计,我们对代码没有做任何实质性的改变。我们只是对初始化文件加入了一些我们需要的关键词。那么我们如何来对聚合时显示不同的UI呢?另外对有些Scope来说,我们可能添加更多的不同种类的keyword,那么这样对不同的keyword我们可能希望有不同的展现,而不是都是一样的。

为了达到设计的目的,我们对我们的代码做了如下的修改:

query.cpp


void Query::run(sc::SearchReplyProxy const& reply) {
    auto metadata_ = search_metadata();

    if (metadata_.is_aggregated()) {
        auto keywords = metadata_.aggregated_keywords();

        if ( (keywords.find("videos") != keywords.end()) ||
             (keywords.find("video") != keywords.end()) ) {
            qDebug() << "it is a video scope";
            do_videos_search(reply);
        }

    } else {
        qDebug() << "it is a normal video scope";
        do_normal_search(reply);
    }
}


在这里,我们通过对keyword的解析,我们可以对为我们的Scope来进行不同的展示,甚至我们可以使用不同的API来得到不同的数据。为了说明问题的方便,我们特意在youku Scope在聚合时使用了一个不同的模版来展示数据:

const std::string VIDEOS_TEMPLATE = R"(
{
  "schema-version": 1,
  "template": {
    "category-layout": "grid",
    "card-size": "large",
    "overlay": true
  },
  "components": {
    "title": "title",
    "subtitle": "subtitle",
    "art" : {
      "field": "art",
      "aspect-ratio": 2.0
    }
  }
}
)";

这里显示的是一个超大的grid模版。

重新运行我们的Scope,当在没有聚合时,Scope的显示如下:




当我们的Scope在聚合时,显示如下:




显然在聚合时,显示的是和正常时不一样的模版。显示的是一个超大的图片。当然点击“ Youku Scope Features”时,就会进入到我们正常的Scope界面。