如何通过IBM i上的开源技术,云服务和您的数据轻松快速地创建业务价值? 通过使用开放源码技术,Node-RED和Node.js结合IBM®Db2®for i进行原型制作,使您的想法变为现实!
在本文中,我们实现了(几乎没有代码行,并且在几分钟之内)了一个简单的社交媒体仪表板,其中包括情感分析,自然语言处理(NLP)和业务数据充实。 停止说话,干脆就做!
图1.使用Node-RED,IBM Watson和Db2 for i的社交媒体仪表板
社交倾听是监视在线对话和在线提及您的品牌的过程,对于所有组织,营销团队,客户支持团队,业务发展和竞争调查都很有价值,尤其是与业务数据结合使用时。
通过此过程,您可以在许多用例中获得实时见解。 下面列出了其中一些。
- 在社交媒体上如何提及您的品牌
- 如何根据展示次数和参与度等指标调整营销活动
- 如何获得有关客户细分的更多信息
- 如何实时应对客户投诉
这里的目标是突出IBM i(与Db2 for i集成)上可用的开源技术的功能,并说明如何轻松地开始使用数字转换,认知计算,API和混合云。
Node-RED是IBM Emerging Technology带来的来自物联网(IoT)的基于开源流的编码工具,提出了来自node-red.org社区的大量节点。 除了物联网,它还是构建基于微服务的架构解决方案,原型设计,创建和使用没有代码行的云或本地API的理想选择。
需要有关IBM i上Node-RED以及如何开始的更多信息?
请参阅IBM developerWorks文章, 在IBM i上运行Node-RED:安装和第一流程 。
本文介绍了如何对特定主题标签实施实时情绪分析并将此信息写入Db2数据库中,涉及一个Twitter节点,可选的IBM Watson™Language Translation节点,一个情绪分析节点和一个Db2 for i节点,以丰富信息业务数据。 它还描述了如何可视化存储在Db2 for i中的数据,以及如何使用仪表板节点和Db2 for i节点创建一个简单的社交媒体仪表板Web应用程序。
可选的Watson Language Translation节点将在情感分析之前识别语言并即时翻译英语推文。
你需要什么
要编写此社交媒体仪表板,您需要满足以下最低要求:
- 5733OPS选项10,即Node.js v6,已安装Node-RED和Web浏览器。 请参阅“ 在IBM i上运行Node-RED:安装和第一流程 ”一文,以查看所有详细的先决条件。
- 一个连接到IBM i 7.2和更低版本系统的Db2 for i SQL编辑器。 您可以使用IBM i Access Client解决方案和嵌入式SQL编辑器。
- 一个Twitter帐户,以及从IBM i到Internet的连接。 (可选)您可以使用本文提供的测试数据来模拟推文。
- 可选:用于使用IBM Watson和Watson Language Translation节点的IBM Cloud(以前的IBMBluemix®)帐户。
您可以注册一个免费试用或免费帐户,或者如果已经拥有一个帐户,则登录到IBM Cloud 。
启动Node-RED
如果您想了解有关Node-RED以及如何开始使用IBM i的更多信息,请参考本文 。
例如,启动Node-RED并使用缺省URL连接到它:http:// <IBMI-IP>:1880,其中<IBM-IP>是IBM i系统的IP地址。
将身份验证凭据设置为您的Node-RED并从HTTP切换到HTTPS是一个好习惯。
在Db2中为i创建一个基本的tweets表并导入示例数据
让我们考虑一个示例,在该示例中,我们仅存储传入推文中包含的信息的子集,但是很高兴地注意到,Twitter API在每个推文的JSON对象中返回了更多的属性,如Twitter Developer Platform网站上所述。
还要注意,Node-RED Twitter节点以JSON返回所有这些信息,为简单起见,我们将解析然后将这些数据存储在标准Db2表中。 但是,最好将Db2用于i,以便将传入的推文直接存储在JSON的CLOB列中。
然后,您可以使用Db2 for i上可用的强大JSON_TABLE函数来检索有关推文的信息。
- 创建一个简单的Tweets表来存储我们的Twitter活动。 为此,请打开一个SQL编辑器(例如IBM i Access Client Solutions),然后运行以下SQL语句来创建情感库, Tweets表和该表的简单触发器。
CREATE collection SENTIMENT; CREATE OR REPLACE TABLE SENTIMENT.TWEETS ( id SMALLINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 CYCLE), TWEET VARCHAR(5000), SCREEN_NAME VARCHAR(255), LOCATION VARCHAR(255), SENTIMENT_SCORE INT, SENTIMENT_GROUP VARCHAR(255), TIMESTP TIMESTAMP, TIMESTAMP_MS VARCHAR(255), primary key (id) ); CREATE OR REPLACE TRIGGER SENTIMENT.Tweets_sentiment BEFORE INSERT OR UPDATE ON SENTIMENT.Tweets REFERENCING NEW AS n OLD AS o FOR EACH ROW MODE Db2ROW BEGIN SET n.SENTIMENT_GROUP = CASE WHEN n.SENTIMENT_SCORE > 0 THEN 'positive' WHEN n.SENTIMENT_SCORE = 0 THEN 'neutral' WHEN n.SENTIMENT_SCORE < 0 THEN 'negative' END; END;
如果要使用系统上的现有库,只需复制上面的
CREATE TABLE
和CREATE TRIGGER
部分,然后开始记录Tweets表。Tweets_sentiment
触发器将仅根据SENTIMENT_SCORE
值使用SENTIMENT_GROUP
(正,负,中性)更新插入或更新的记录。 - 让我们用示例数据(带有12条公共tweet)填充该表。 在本文的后面,我们的Twitter节点将为我们填充Tweets表。
INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('What an impressive panel at our ask the experts during our conference! #ibmi #cshk2017 https://t.co/StgAsBPFXv','MBuurRasmussen','nolocation',3,CURRENT TIMESTAMP,1508850681582); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('Thanks, @chris_lalevee for this bodacious article about Node-RED on #IBMi! #IBMiOSS https://t.co/yursu7d2GJ','IBMJesseG','Rochester, MI',2,CURRENT TIMESTAMP,1508850903650); INSERT INTO SENTIMENT.TWEETS (TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES ('RT @IBMi: Thank you, for teaching us all a valuable lesson, https://t.co/idje2J3','IBMiFan','United States of America',6,CURRENT TIMESTAMP, 1508851116842); INSERT INTO SENTIMENT.TWEETS (TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('RT #IBMi Opensource tools https://t.co/s8sjeu','ClubCEO','Texas, USA',0, CURRENT TIMESTAMP,1508851142085); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('Excellent article about #ibmi & Db2 here https://t.co/s8sjeu!!','MariaMe6452','Dublin, Ireland',3,CURRENT TIMESTAMP, 1508851159475); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('Meet the next generation of #IBMi and #IBMAIX with these #IBMFreshFaces featured in @IBMPowerMag: https://t.co/PbpnGpypnE','IBMPowerSystems','Sugarland, TX',3,CURRENT TIMESTAMP, 1508851165417); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('RT @ibm: Our Enterprise #IBMi Modernization White Paper helps you understand how #Nodejs can attract new development talent! ','3E8TestBot','Lost in Space',5,CURRENT TIMESTAMP, 1508851192995); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('RT @kadler_ibm: Good news, everyone! Come see me at @zendcon and we can talk all things #IBMiOSS and #PHP on #IBMi. I might even ha ','phpc','Freenode IRC',5,CURRENT TIMESTAMP, 1508851202542); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('RT @HelpSystemsMN: What are #IBMi special authorities & who should have them? Security expert @DaljitSingh explains > ','J_Buck51','Kenosha, WI',0,CURRENT TIMESTAMP,1508851319619); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('RT @chris_lalevee: Install @NodeRED on #IBMi (https://t.co/DHlifEAEuo) and test Db2 for i Node !! https://t.co/KKu5Ji5ihW','MarolleauBenoit','Montpellier, France',0, CURRENT TIMESTAMP,1508851419619); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('Looking forward to meeting #IBMi customers next week at the Jack Henry Conference in Nashville. Stop by booth 208 https://t.co/gZs4MXNsO8','petem59','Connecticut, USA',0,CURRENT TIMESTAMP,1508851544257); INSERT INTO SENTIMENT.TWEETS(TWEET,SCREEN_NAME,LOCATION,SENTIMENT_SCORE,TIMESTP,TIMESTAMP_MS) VALUES('RT #IBMi #db2 #XML Des soucis de gestion dates/heures avec XMLTABLE ? Allez plus loin avec les fonctions XQuery/XPath ','PhBourgeoisIBM','Paris, France',0,CURRENT TIMESTAMP,1508851704005);
安装Db2 for i节点
首先,我们需要在Node-RED面板中安装Db2 for i节点。 您可以按照Db2 for i节点主页上的说明使用命令行,或者使用如下所示的Node-RED图形界面来完成此操作。
- 在Node-RED中,单击右上角的按钮,然后单击管理调色板 。
图2.将节点添加到Node-RED面板
- 在“ 安装”选项卡上,搜索db2 ,然后搜索node-red-contrib-db2-for-i ,然后单击“ 安装” 。 等待安装确认对话框显示,然后重新启动Node-RED。
图3.将i“ node-red-contrib-db2-for-i”节点的Db2添加到Node-RED面板
- 浏览左侧的节点选项板,并注意“ 存储”类别中的“ Db2 for i”节点可用。
图4. Node-RED上i节点的Db2
使用Db2 for i节点测试您的第一个流程
让我们用一个简单的查询来测试节点。 将Db2 for i节点拖到新流程,如下图所示。 然后,将SQL Query添加为注入节点,并将msg.payload添加为调试节点。
图5.简单的Node-RED流程:输入注入节点– i节点的Db2 –输出调试节点
- 如下图所示,使用设置和SQL查询配置Inject节点。
图6.使用SQL查询注入节点设置
- 如下图所示, 为i节点配置Db2 。
图7. Db2 for i节点设置-添加Db2连接
- 如果您不想使用运行Node-RED的当前用户配置文件,并且想要指定用于连接数据库的特定用户配置文件,则可以通过指定连接名称和(可选)用户名/密码来设置配置节点。 然后单击“ 添加并完成” 。
图8.使用可选凭据配置“ Db2 for i Config”节点
- 单击“ 部署” ,然后单击流程左侧的“ 注入”节点按钮,以测试此简单流程,如下图所示。
图9.第一个Node-RED流将一个SQL查询注入到i数据库的Db2中
在“ 调试”面板中查看SQL查询的结果(行的JSON数组)。
图10. Node-RED调试面板中的Db2 for i JSON结果集
在此步骤中,如果看不到结果,并且确定表存在并且不为空,请检查所使用的用户概要文件是否具有读取访问权限(具有适当SQL授予或IBM i权限)。
您已经使用Db2 for i编写了您的第一个Node-RED流!
调用Twitter API并通过推文提供Db2 for i数据库
这样做的目的是使您的IBM i能够在将推特插入到Db2 for i数据库中之前侦听推特并动态分析情绪。
为此,您只需要在Node-RED流编辑器中手动拖动并配置四个节点即可。
要快速执行此操作,请将现有流导入到当前的Node-RED流中:
- 单击右上角的菜单,然后单击导入 -> 剪贴板 。
图11.从Node-RED中的剪贴板导入流
- 从1_ibmi_twitter_listening.zip文件中提取.json文件(也可在“可下载资源”部分中找到),然后从.json文件中复制流,然后单击current flow 。 然后,点击导入 。
您应该得到以下结果。
图12.第一个Twitter侦听的Node-RED流,带有情感分析并在Db2中插入
- 配置您的节点。
- Twitter节点 :指定您的Twitter用户帐户和标签以执行搜索。 如果您没有Twitter帐户,请创建一个帐户或跳过此步骤。
- Db2 for i 节点 :如上一步中所述指定连接信息。
- 函数节点(
PrepareForInsert
):双击该节点,控制模式和表名在您的环境中反映在JavaScript代码中,并在必要时修改JavaScript函数。
- 单击部署并等待Twitter活动。 您可以选择在流中添加一个Debug节点,以在Debug视图中查看Twitter活动。
- 通过偶尔从您喜欢SQL编辑器或Node-RED流中查询您的表来验证是否正在填充Tweets表。
可选:使用IBM Watson服务进行即时鸣叫翻译
例如,我们可以使用IBM Watson服务丰富传入的推文,以便在执行情感分析之前将传入的推文即时转换为英语。 这部分是可选的,因此您可以直接转到仪表板创建部分。
- 从IBM Cloud目录实例化Watson Language Translator服务,并获取生成的凭证(用户名,密码和端点)。 在Node-RED中配置关联节点时,将需要它们。
图13. IBM Cloud目录中的IBM Watson Language Translator服务
图14. IBM Watson Language Translator服务凭证
- 将样本流复制到现有的Twitter流,并使用凭据配置节点。
- 从2_ibmi_watson_translator_subflow.zip文件中提取.json文件(也可在“可下载资源”部分中找到),并将流从.json文件复制到剪贴板。
在继续下一步之前,您需要在Node-RED面板中安装IBM Watson节点。 如果不是这种情况,请使用“ 为i节点安装Db2”部分中描述的过程安装node-red-node-watson节点。 要在调色板中安装的软件包的名称为node-red-node-watson 。 - 在右上角菜单中的Node-RED编辑器中,单击Import- > Clipboard 。 粘贴代码,然后单击“ 新建流程” ,然后单击“ 导入” 。
这将导入Node-RED子流。 现在,在编辑器左侧的面板中添加一个附加节点,如下图所示。
当您想要使一部分流可重用于其他流而不必重复时,Node-RED子流是合适的。 单击部署以保存导入的子流并将其部署到您的Node-RED工作空间。图15.在Node-RED中创建基于IBM Watson的子流
- 双击“ Watson Translation to English”以编辑新创建的子流,包括IBM Watson节点。
图16.用于语言识别和翻译的基于IBM Watson的子流的详细信息
该子流首先标识输入消息中使用的语言,然后使用IBM Watson服务和API进行翻译(如果与英语不同)。
- 配置两个Watson节点(通过指定用户名,密码和端点(如果需要)),每个节点都指向您刚在IBM Cloud上实例化的同一IBM Watson服务,但是每个节点都使用不同的API函数(语言标识和语言翻译) 。
- 如下图所示,使用测试流来测试子流,例如,使用手动注入节点。
图17.在IBM i上测试您的第一个IBM Watson Language Translator Node-RED流
感谢IBM Watson,您的IBM i现在可以将法语,西班牙语和许多其他语言翻译成英语!
- 从2_ibmi_watson_translator_subflow.zip文件中提取.json文件(也可在“可下载资源”部分中找到),并将流从.json文件复制到剪贴板。
- 通过图形化方式将其集成到您现有的Twitter流中,如下图所示。
图18.端到端Node-RED流与社交媒体侦听,IBM Watson翻译和i的Db2
- 通过注入输入测试有效负载(使用注入节点)或等待新的传入推文来测试结果。
您的IBM i现在正在使用IBM Watson快速进行社交媒体侦听和翻译社交媒体数据,然后再将其插入Db2 for i数据库!
使用简单的仪表板可视化Db2 for i和社交媒体数据
在本节中,我们无需编写代码即可创建社交媒体仪表板,将您在Db2 for i上的业务数据与来自IBM Cloud和IoT的数据混合在一起。
- 安装仪表板节点。
存在许多用于生成UI和图形的Node-RED。 node-red-dashboard是我的最爱之一。
在Node-RED编辑器的右上菜单中,单击Manage Palette ,然后搜索node-red-dashboard 。 然后,单击安装并重新启动Node-RED。图19.在Node-RED中安装“ node-red-dashboard”
- 从3_ibmi_simple_dashboard.zip文件中提取.json文件(也可在“可下载资源”部分中找到),并将代码从.json文件导入到已创建的Node-RED流中。
- 请注意,将显示如下图所示的新流程。
图20.具有i的Twitter和Db2的简单仪表板节点
- 使用您的连接信息配置每个Db2节点。
- 部署和访问仪表板。 刚导入的代码中的刷新率设置为10分钟。 因此,如果您不想等待,请转到流程编辑器,并通过单击流程左侧的每个注入节点来强制刷新仪表板。 仪表板URL位于仪表板面板的右侧。
图21. Node-RED仪表板布局面板和URL
您刚刚创建了一个简单的社交媒体仪表板,其中一些图形填充了Db2 for i数据库中的数据!
图22. IBM i上的社交媒体仪表板,具有Node-RED,Twitter API和i的Db2
摘要
“快速失败,更快成功”
IBM i本身就是一个私有云,当与开源技术以及Db2 for i结合使用时,您可以快速执行出色的工作并为您的业务带来创新。
在本文中,我们演示了IBM i上的Node-RED和Node.js可以成为API集成和原型开发的真正加速器,使您可以通过简单的拖放操作就可以玩节点并为整个世界编程! 我们还概述了IBM Watson及其认知计算API的功能,以增强我们在IBM i上的所有解决方案。
翻译自: https://www.ibm.com/developerworks/ibmi/library/i-social-media-dashboard/index.html