使用 Pitney Bowes 定位服务构建一个简单的图片定位应用程序

2014 年 6 月 12 日
 

Jay Allen

软件工程师

Jay Allen 是一名开发人员和架构师,在开发大型企业系统方面拥有多年的经验。他是新兴开发语言、云技术及许多开源框架和库的爱好者。他和妻子、3 个十几岁的孩子和多只小猫一起居住在明尼苏达州罗契斯特市。

Rachel Reinitz

IBM 杰出工程师;CTO,IBM BlueMix Garage

@rreinitz

Srikant Varadarajan

会员,集成架构师, Pitney Bowes

@IManageAPIs

Robert Vila

项目主管兼高级技术人员,IBM WebSphere 策略部门

@robertvila

IBM Bluemix™ 提供了将您的伟大思想变成一个应用程序或服务所需的所有平台功能。Bluemix 还为您提供了对各种各样 API 的访问,通过将这些 API 与第三方提供的功能混合使用,您可以使用它们来增强您的应用程序。

Pitney Bowes 提供了功能强大的 API 来实现地理编码、地址查询等功能。本文使用了一个简单而又有趣的示例应用程序,该应用程序在 Instagram 中将任意美国街道地址的经纬度与媒体搜索相结合,通过这个示例,我们将向您展示如何在您的 Bluemix 应用程序中使用 Pitney Bowes API。

入门的前提条件

 

Pitney Bowes 定位服务快速指南

 

使用 Bluemix 平台的开发人员可以使用的四项 Pitney Bowes 定位服务:

  • 地理编码:将地址转换成地址经纬度位置。
  • 反向地理编码:将一个经纬度位置(比如一个 GPS 信号)转换成一个可读地址。
  • 验证地址:正确的、标准化的、有效的地址,确保地址数据符合邮政管理局设立的质量标准,以便提高邮件和包裹的送达率。
  • 旅行边界服务:根据平均驾驶距离或平均驾驶时间来确定某个地址的边界,从而增加根据地理信息制定决策的信心。

步骤 1. 注册 Pitney Bowes 服务

 
  1. 通过 注册 在 Pitney Bowes 开发人员门户上获得一个开发人员帐户。当您完成电子邮件确认步骤时,您将获得一个具有 API 特权的账号。
  2. 登录并注册一个应用程序。返回的应用程序 ID 需要能够对 Pitney Bowes 进行 API 调用。(还提供了密钥,Pitney Bowes API 目前不需要它。)
  3. 默认情况下,您无权进行 API 调用。在 Entitlements 页面上,单击 Select Entitlement 并选择 free 级别(每天 2,000 个调用),这是自动认可的级别:
    图 1.
    Pitney Bowes 定位 API 的两个权利选项的屏幕截图

    点击查看大图

    图 1.

    Pitney Bowes 定位 API 的两个权利选项的屏幕截图

现在,您已经为在 Bluemix 中使用应用程序 ID 和 Pitney Bowes services 服务做好了准备。

步骤 2. 在 Bluemix 中创建一个 Pitney Bowes 服务实例

 
  1. 登录到 Bluemix
  2. 在目录中,选择 Pitney Bowes 地理编码服务:
    图 2.
    Bluemix 中的 Pitney Bowes 地理编码条目的屏幕截图
  3. 选择 Do not associate。(您将在步骤 3 中向应用程序添加服务实例。)为服务实例选择一个名称并输入您的 Pitney Bowes 应用程序 ID。

步骤 3. 克隆 Node.js 寻像器应用程序代码

 

从 IBM jStart DevOps 存储库克隆 Node 寻像器应用程序:

 git clone https://hub.jazz.net/git/jstart/Picture.Finder.(Node)

所有应用程序逻辑都在 app.js 中,包括一些使得 Web 应用程序开发变得更容易的 Node 模块:

  • Express Web 开发框架
  • 针对 Express 的 Hogan 模板引擎
  • 用来调用 Pitney Bowes 的 REST 客户端
  • 一个 Instagram API 包装器库
  • 执行日期格式化的时间
  • 针对 JSON 操作的 pinch

“post to /location” 命令将会对 Pitney Bowes 地理编码服务执行一个 GET 调用。然后,返回的经纬度被传递给 Instagram(记得将代码中的 instagramID 和 instagramSecret 替换为那您自己的 Instagram 开发人员帐号和密钥),以便检索描述指定地址一公里范围以内的所有图片的 JSON。

请注意,在对地理编码服务的调用中,使用了从地理编码服务凭据中获得的 Pitney Bowes URL 和应用程序 ID。

点击查看代码清单

 var Client = rest.Client; client = new Client(); if (!address && !city && !state) res.render('index.html'); // direct way client.get(url + "?address=" + address + "&city=" + city + "&stateProvince=" + state + "&country=USA&fallbackToPostal=Y& fallbackToStreet=Y&fallbackToGeographic=Y& closeMatchesOnly=Y&appId =" + appId, function(data, response){ // data in callback contains the json returned from pitney bowes if (data.httpCode != "500") { lat = data.Output.Geometry.Pos.Y; lng = data.Output.Geometry.Pos.X; instagram.media.search({ lat: lat, lng: lng, complete: function(data){ // pinch converts all unix timestamps to a friendly date pinch(data, /created_time/, function(path, key, value) { return moment(value*1000).format("MMMM Do YYYY, h:mm a"); }); res.render('index.html', {data: data, address: address, city: city, state: state}); }, // end complete });// end search }// end httpCode check else { msg = "Can't find any pictures near this address"; res.render('index.html', {msg: msg, address: address, city: city, state: state}); } }); // end PB call

Hogan 模板语言和超净(ultra-clean)Mustache 模板语言将结果显示在 index.html 视图中。它们显示了从 Instagram 返回的 JSON 直接返回的结果(对创建时间进行了更改,利用服务器端的 pinch 库,将该时间从 UNIX 时间戳改为一个友好的日期格式):

点击查看代码清单

 <div> <ul> {{#data}} <li style="display: inline-block; padding: 25px"><a href="{{link}}"> <img src="{{#images}}{{#thumbnail}} {{url}} {{/thumbnail}}{{/images}}"></a> <br/> By: <em> {{#user}} {{username}} {{/user}}</em> <br/> {{created_time}} <br/> {{#comments}} {{count}} {{/comments}} comment(s) {{#likes}} {{count}} {{/likes}} likes. </li> {{/data}} </ul> </div>

步骤 4. 将应用程序推入 Bluemix

 
  1. 转到应用程序的 app 目录。使用以下命令从命令行登录 Bluemix:
     cf login -a api.ng.bluemix.net

    提供您的用户名、密码和组织,并在系统提示您时按下空格键。
  2. 一个 manifest.yml 文件包含在应用程序中,用于流线化该流程。它将设置应用程序名称、内存、实例数量和您在 步骤 2 中创建的 Pitney Bowes 地理编码服务名称。

    编辑 manifest.yml 文件,以便更改那些对您的应用程序必须惟一的值。主机名必须是不同于 picturefinder 的名称,这样您获得的 URL 路由就不会与演示 URL (http://picturefinder.ng.bluemix.net) 发生冲突。

    点击查看代码清单

     --- applications: #Reference http://docs.cloudfoundry.com/docs/using/deploying-apps/manifest.html - name: PictureFinder #Application Name. Unique to the user's Space memory: 256M #The maximum memory to allocate to each application instance instances: 1 #The number of instances of the application to start host: my-unique-ehostname #Hostname for app routing. Unique to domain ng.bluemix.net. Change. path: . #Path to the application to be pushed command: node app.js #The command to use to start the application services: - Geocoding-demo #the already created geocode service
  3. 从包含 app.js 和 manifest.yml 文件的 app 目录推入您的应用程序:
     cf push

当应用程序运行时,转到 http://my-unique-hostname.ng.bluemix.net(其中的 my-unique-hostname 是您在 manifest 文件中使用的主机名)。输入您的地址,并查看哪些 Instagram 用户正在您的附近发帖子。

结束语

 

当在主要社交媒体平台上签入或使用位置共享特性时,全世界超过十二亿的人都在使用 Pitney Bowes 位置智能解决方案。通过精心定制用户对当前位置的体验,这些服务可帮助您,让您的应用程序更多地参与其中。

添加评论

注意:评论中不支持 HTML 语法


剩余 1000 字符

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Web development
ArticleID=973657
ArticleTitle=使用 Pitney Bowes 定位服务构建一个简单的图片定位应用程序
publish-date=06122014