安全软件亚搏在线博客
作者:
马克爱尔兰

谷歌
获取博客时事通讯

FeedBurner

关于FME|10月24日2017|由马克爱尔兰

推特上的警笛:一部基于fme的惊悚片

2017年夏天是一段有趣的时光。

首先,我开始读埃尔勒·斯坦利·加德纳的老小说,特别是佩里梅森侦探小说。这些都是很好的书——尽管他不是雷蒙德·钱德勒(Raymond Chandler)——这给了我一个为这篇文章想出有趣标题的机会。

另一个夏天的事件与基拉尼镇有关,马尼托巴省,我生活和工作的地方。镇上的警笛很响,位于市中心,这是每天中午12点发出的警报,提醒每个人注意时间。它等于爱丁堡温哥华大炮。

但今年早些时候,我注意到这不是警告(这是一个词吗?)像往常一样。除了紧急警报,它似乎已经被关闭了!好吧,就我而言,我错过了每天中午轰鸣的声音,所以我决定用FME制作我自己的版本……

计划twitter的情况

我自己并不想成为噪音污染制造者,所以显而易见的是创建一个Twitter账户来宣布中午的时间。很多 无生命的 对象 一个 推特账户,至少这一次是有目的的。于是我跳到Twitter上,创建了一个名为KillarneySiren

在FME基金然后我创建了一个工作区。它是这样的:

好吧,这当然不是很多变形金刚。事实上,它非常简单。创建一个特性并触发tweet。这个特征有坐标集,所以塞壬的推文精确地定位在地理位置上(以防有人在意)。由于FME中的web服务功能,Twitter帐户经过身份验证并存储在本地,以便在任何工作区中重用。

我现在需要做的就是让它每天中午运行。这对于FME服务器/云设置来说已经足够简单了,但在Windows中使用计划任务也同样容易:

在Twitter上的结果是:

我们到了,就这么简单。全部完成。

哦!你想要更多吗?没关系,所以我…

天气预报和HTTPCaller的情况

正如我上面提到的,除了在中午发出信号外,基拉尼的警报器还会提醒市民注意恶劣天气等紧急情况。所以扩展我的工作区来做类似的事情是有意义的,比如去拿天气预报。

我用一个在线API查找天气服务,并最终确定了许多服务OpenWeatherMap因为很容易和方便。我的网址是:

http://api.openweathermap.org/data/2.5/forecast?q=killarney,mb&units=metric&appid=xyz

如你所见,对它们的API的调用包括我的位置(killarney,mb)和我希望返回的数据单位(公制)。我还附加了我的个人api密钥。所有这些都可以直接应用到FME HTTPCaller transformer中,我甚至可以为id使用一个已发布的参数:

响应是一个地理参考点特性,其中包含一些JSON天气预报,一小段是这样的:

{“天气”:[{" id ": 800年,“主要”:“明确”、“描述”:“天空”、“图标”:“01 d "}),“云”:{“所有”:0},“风”:{“速度”:12.11,“度”:280.505},“sys”: {“pod”:“d”},“dt_txt”:“2017-10-18 21:00:00”}

这是工作空间(点击放大):

创建者转换器启动进程,HTTPCaller将我的查询发送到API。注意这里有一些重复,因为我注意到服务有时会因为500个代码而失败。测试人员测试服务器的响应(存储在属性_http_status_code中),如果没有成功,则等待5分钟(减速器)并再次尝试。如果再次失败,那么电邮者会联系我。是的,我本可以创建一个循环自定义转换器,每五分钟尝试一次,直到成功,但现在还好。如果,在未来,两次尝试都失败,然后我将实现循环。

嵌套JSON的情况

json扁平化器只是将JSON内容扁平化为一个列表属性。它是一个列表属性,因为服务不只是给我发送一个特定时间的预测,它给了我40个预测;未来五天每三小时预报一次!

这是工作区:

注意,这里有两个list爆炸式。第一种方法是根据预测将数据分割成单独的特征。第二部分将这些预测分成了几部分。这是因为似乎可以对任何特定的日期时间进行多次预测。我认为没有必要,但是因为FME返回一个列表,所以我必须假设可能存在。

JSON是嵌套的(也许我应该用XML,更容易阅读!)进入多层,是这样的:

{“预报”:{“日期时间”:{“预报”:[{“天气”:“下雨”],{“天气”:“多云”}]}}

不管怎么说,现在我已经将JSON分解为各个预测,只需要选择要保留哪个。我通过格式化datetime字符串并将其与今天的日期进行比较来做到这一点:

我应该更新一下。在2017.1我应该使用DateTimeConverter,DateTimeStamper,并计算与DateTimeCalculator的差异。然后测试差异在哪里为零。我保证很快就会更新工作区。

但是我们现在已经在回家的路上了…

该服务提供了一个与天气匹配的图标,我用HTTPCaller来取回,创建/发送我的tweet。Tweeter特别允许我上传一个图像文件,因此我将图标保存在本地,并将Tweeter指向该文件。

结果是这样的:

好哇!我们做完了。我刚刚安排了另一项任务,所以每天早上8点我都会在推特上发布当天的天气情况。

重新发明的轮子的例子

虽然工作区有10多个变压器,好在没有什么是复杂的。其中一些有趣的部分是:

  • HTTP响应代码实际上是有意义的!不要忽视它。
  • 减速变压器是一种非常简单的方法,可以在稍后重试之前暂停工作区。
  • FME web服务使共享工作空间变得很容易,但是将我的Twitter和Gmail身份验证细节保留为私有。
    • 但因为我没有将OpenWeatherMap添加为web服务,我的api密钥不安全。
  • FME运行得很快。如果你不偶尔停下来看看什么是新的,你可能会错过新的日期时间变形金刚!
  • 您不需要FME云/服务器来安排任务
    • 但我必须让我的电脑24/7开着,以确保计划的任务工作
    • 如果停电了,计划的任务就会停止,直到我再次打开电脑

而且我总能学到新东西。我认为json扁平化和list爆炸性是处理嵌套JSON的好方法,但是我现在想到JSONFragmenter可能会自己完成这项工作!我来试试。

最后一课…一定要检查FME中心。如果我那样做了,我会找到德米特里的OpenWeatherMap变压器!虽然我没有花很多时间在这个工作空间上,我确实花了大约一半的时间“重新发明轮子”。

用户自己尝试的情况

如果你想看看我的工作空间,用它作为你的邻居警报器的模板,你可以找到基本的推特在这里还有天气预报在这里。我希望看到世界各地的FME用户都能设置一些自动的tweet。我已经知道@DailySatPic@FMEBetaBuilder(尽管我们不太擅长让它保持最新)。或者我们可以建立一个全球的fme警报网络!

我想要KillarneySiren更进一步,将实时天气警报整合到图片中。如果我只想使用桌面,但如果我想合并FME服务器,这很简单。我希望这个项目保持在一个你可以使用的水平FME家庭使用许可证,所以我必须更多地考虑实时。

我也在想我也应该上Facebook,因为我只有4个塞壬追随者,其中一个就是我!我住的地方的人更喜欢Facebook而不是Twitter。

哦,我忘了说你需要至少有FME2017.1.1才能运行Twitter transformer。Twitter的身份验证方法发生了变化,必须更新FME以匹配。如果你还没有升级,你可以从我们的网站下载