我将告诉您如何通过镜子在公共
KudaGo API上接收和显示信息。 当然,这不是简单的而是“智能”镜像。
什么是智能镜?
最有可能的是,许多人听说过
MagicMirror²模块化平台,该平台允许您在Raspberry Pi上部署应用程序,该应用程序可以将门厅或浴室的镜子变成您的个人助手。 您可以使用所谓的“双向镜”,监视器,直臂和上述微型计算机来实现此目的。
MagicMirror中的Magic仅是名称。 如果我理解正确,那么所有这些都是在
Electron上开发的,这意味着与此相关的是Node.js.。 “应用程序”创建一个html页面,该页面在启动时会在浏览器窗口中打开,并且已经在其中显示了所谓的模块,这些模块既已预先安装(时钟,日历,当前天气,天气预报,新闻订阅源),又
由社区开发 。 并且有足够的有趣(既有用又
顽固的异常),例如,以下是一百多个模块中的几个:
有用的
花式的
背景知识
关于我如何收集镜子,我将不作详细绘画。 如果有人感兴趣
,可以在这里阅读 。 如果您想放在一起,那么简单的Google搜索将返回数十个示例\指南\手册。 我想展示如何为这样的镜子制作模块。
我非常喜欢参加圣彼得堡的各种音乐会和活动。 但是有时会发生这样的事情(即使考虑到上下文广告,垃圾邮件和海报的大量存在),我在即将到来的前一两天也了解到一些事件。 因此,我一直在寻找一种优化筛选有关它们的信息流的方法。 具有类似功能的智能手机上的应用程序长时间没有徘徊(更确切地说,我忘记了它们)。 所有张贴者都需要时间并不断通过任务“选择10个过滤器,并猜测哪个是正确的”。 社交媒体订阅源通常变成了广告垃圾邮件。 然后,提出一个实现“解析器”的想法,该解析器将根据自己的标准定期选择信息并将其显示在某个地方。
开发模块
如果有人立即想要查看结果,或者将模块安装在“镜像”上,那么这里是
到存储库的
链接 。 也有安装说明。
作为信息来源,
kudago服务被证明是最合适的。 无需注册。 Sane方法。 答案中的简明数据。 覆盖范围并不奇怪,它不仅包括“城市路边”和“非橡胶”,而且还包括俄罗斯的9个主要城市。
我们开发的模块应存储在
modules / modulename文件夹中 。 要创建一个简单的模块(如我的模块),我们需要在此文件夹中创建两个文件:
- modulename / modulename.js是主模块的脚本。
- modulename / node_helper.js是脚本将加载的“可选帮助程序”。 辅助程序和模块脚本可以使用集成的套接字系统相互通信。
在修改
了MagicMirror开发人员的
指南以及其他人的解决方案之后,我上传了一个脚本,以使用XMLHttpRequest从kudago API中获取条目。 并遇到了跨域查询的问题。 我根本不是JavaScript专家(甚至也不是开发人员)。 我所能理解的只是发送一个请求“在浏览器中运行脚本”并获得kudago的回复,我无法成功。 这是
learn.javascript向
我解释的内容
跨域请求经过特殊的安全控制,其目的是防止恶意黑客占领互联网。
说真的 该标准的开发者提供了所有的障碍,以使“邪恶的黑客”无法使用新标准来做与他以前可以做的根本不同的事情,从而“破坏”一些运行旧标准的服务器并没有期待任何根本的新事物。
好吧,不是我真正想要的。 我不想了解JavaScript问题。 毕竟,手头是熟悉且可预测的Python。 我将仅从
请求库中获取信息,并将结果写入json。 剩下的只是解决如何从js执行Python代码的问题。
事实证明,node_helper.js对我有用! 启动模块时,可以使用
python-shell的功能。 只需指定Python解释器的路径,脚本的路径,参数及其值即可。 以这种形式,kudago很好地给了我一个成功的答案。
Python脚本调用代码kudagoGetData: function () {
此外,只有node_helper.js才能从json文件中读取信息(默认情况下,该文件位于
kudago / events.json路径中),其中包含从kudago下载的数据。 我们在其中实现了对文件的相同读取。
正如我已经写过的,在MagicMirror中,所有模块都通过套接字系统进行通信,因此为了使我们的Python脚本在启动时运行,请将适当的代码添加到node_helper.js
在启动时启动模块的代码 socketNotificationReceived: function (notification, payload) { if (notification === "START") { this.config = payload; this.kudagoGetData(); setInterval(() => { this.kudagoGetData(); }, this.config.updateInterval); } }
从
this.config获取的所有参数要么是主模块文件中的预定义变量,要么是在config.js中指定的那些参数-所有MagicMirror模块的常规配置文件。
创建的模块的示例配置 { module: 'MMM-KudaGo', disabled: false, position: 'bottom_bar', config: { location: "spb", categories: "concert", tags: " --,", days: 7 } }
好吧,在我们的
MMM-KudaGo.js模块的主文件中,
有默认参数,用于处理事件数据的功能(从json文件中获取),用于绘制板的标志(很可能知道的人会从中流血,但我在储罐中,对我来说主要的是工作)。 由于我在python文件中使用了API,因此.js文件不会被代码(与大多数其他模块不同),嵌套(或在这里称为“什么”),函数,循环和其他面条所覆盖。
结果
事实证明,可以实现对一个或多个事件类别的搜索,按标签搜索,按给定的天数间隔搜索,并按指定的间隔进行更新(有关类别和标签的更详细列表,请参见
readme )。 并以可读的形式将其全部显示在屏幕上,指示地点,名称,日期和价格,而不会浪费时间进行独立搜索。
当然,您需要仔细观察小程序返回到那里的次数,以了解您需要放置什么标签,以便它不显示音乐会或剧院表演,而是例如您所在城市的瑜伽课程或免费节日。 但就我个人而言,我的需求已得到完全满足!
我希望您也想出并创建一个对社区有用的模块,您可以在项目的特殊页面上与他人共享该模块。 顺便说一句,如果您有好主意或需要某些东西,请在评论中写下。 也许将某人推向创意!