如何在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:

整个项目的源码在:git clone https://gitcafe.com/ubuntu/youku.git

简单吧,是一个非常简单的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界面。

整个项目的源码在:git clone https://gitcafe.com/ubuntu/youku_keywords.git

时间: 2024-08-03 13:26:51

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

.NET中利用反射来实现自动映射两个对象中的数据成员

在以前的项目开发之中,经常会遇到这样一个问题:比如在外面项目的架构设计之中,我们采用MVC和EntityFramework来构建一个Web应用程序.比如我们采用常用的多层架构,例如有Presentation层.BusinessLogic层.DataAccess层等,各层之间是相对独立并且职责分明的.比如我们在Presentation层中会定义ViewModel,在DataAccess层中的DbContext部分又会由EntityFramework来自动生成StorageModel,或者叫做Dat

Hadoop 中利用 mapreduce 读写 mysql 数据

Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP 的需求,我们需要 mapreduce 与 mysql 进行数据的交互,而这些特性正是 hbase 或者 hive 目前亟待改进的地方. 好了言归正传,简单的说说背景.原理以及需要注意的地方: 1.为了方便 MapReduce 直接访问关系型数据库(Mysql,Oracle),Hadoop提供了DBInp

如何在Javascript中利用封装这个特性

对于熟悉C#和Java的兄弟们,面向对象的三大思想(封装,继承,多态)肯定是了解的,那么如何在Javascript中利用封装这个特性呢? 我们会把现实中的一些事物抽象成一个Class并且把事物的属性(名词)作为Class的Property把事物的动作(动词)作为Class的methods.在面向对象的语言中(C#等)都会有一些关键字来修饰类或者属性(Private,public,protect),这些关键词描述了访问的权限,不多做解释.泗阳县民用航空局 我们来看看Javascript的易变的特性

如何在android中利用Theme设置application 的所有listview的style?~

今天看VLC的源代码,发现一个很神奇的东西 所有listview的点击效果背景色都是橘黄色 花了点时间找了一下看看怎么实现的. 首先,定义一个<selector> like this: <selector> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/

JSP中利用Properties读写配置文件

JSP中利用Properties读写配置文件 java 代码: package com.reason.test; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.Outp

jsp中利用MySQL实现分页技术

分页是很常用的一种技术,而mysql中对于分页的操作也很简单,今天就说说如何在jsp页面中利用标签来最简化的实现分页: 链接:MySQL分页技术详解http://blog.csdn.net/u011637069/article/details/49928513 step1:编写DAO中代码: [java] view plain copy public List<Employee> findAll2(int page, int perPageRows) throws Exception { Li

如何在WinXP下利用IIS架构Web服务器

看到很多知名企业家靠做网站发家,想必现在很多网络爱好者都想要尝试,在自己的电脑上架构网站,架构网站需要选择一个好用的系统,WinXP系统是目前比较流行的一个,由于它的系统占用资源少,没有太多繁杂的功能,操作简单,因此收到普遍欢迎.下面就由小编来告诉大家如何在WinXP下利用IIS架构Web服务器. 推荐:最新WinXP系统 利用Windows XP的组件就可以满足建站的要求,而且安全性能不错. 安装IIS 在Windows XP 专业版中,IIS并不是默认安装的,而是作为可选的组件,现在我们要建

C#中利用正则表达式实现字符串搜索

摘要:本文给出了在C#下利用正则表达式实现字符串搜索功能的方法,通过对.NET框架下的正则表达式的研究及实例分析,总结了正则表达式的元字符.规则.选项等.1.正则表达式简介正则表达式提供了功能强大.灵活而又高效的方法来处理文本.正则表达式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提? ⒈嗉⑻婊换蛏境谋咀幼址?或将提取的字符串添加到集合以生成报告.对于处理字符串(例?HTML 处理.日志文件分析和 HTTP 标头分析)的许多应用程序而言,正则表达式是不可缺少的工具..

企业区块链:公司如何在2019年利用私有区块链

区块链趋势技术自推出以来就进入了科技市场.在很短的时间内,它分别成为报纸和新闻频道的头条和突发新闻.这样说,区块链发展吸引了许多企业家,这没有错.专家们宣称,在未来几年,这个技术世界将成为一个区块链世界,每个公司都将充分利用它.这种现代技术可以在每个业务领域找到,它使工作变得简单,更轻松.最苛刻的区块链技术已成为工业领域的主要部分.这是一个独特的概念,迫使我们认为区块链开发人员,熟练的设计师如何以高度功能的方法开发这项技术.需求日益增加,新的行业也受到吸引. 什么是区块链? 区块链基本上是一个分