4

使用 GAE 将 Google Latitude 地理位置同步到人人网

2010年7月21日

google-latitude-renren-status

感谢 @LucienLu 的投递和自爆。

非常奇怪人人网明知地理信息的重要价值,仍然没有从浏览器获取用户 geo 信息。geo 很有趣,于是自己先实现了用 GAE 将 Google Latitude 同步到 renren。

        感谢这位同学用 GAE 同步 twitter 到人人网状态的方法,很有用,让我没发几条垃圾状态。

需求:

  1. 手机安装 Google 地图并且开通谷歌纵横
  2. 申请一个 GAE 账户并安装 python 和 GAE 开发包,可以看 Google 官方的文档。然后创建一个 GAE 应用,我的是 latitude2renren
  3. 注册你的 GAE 应用,点击 Manage Your Domains 链接,注册的目的是获得 consumer key 和 consumer secret。

      在GAE开发包安装目录下新建一个文件夹,比如我的

X:\Program Files\Google\google_appengine\latitude2renren

        创建以下文件:

app.yaml

application: 你的app应用名字
version: 1
runtime: python
api_version: 1

handlers:
- url: /OAuth/.*
  script: OAuth/OAuthHandle.py
  secure: optional
  login: admin

cron.yaml

cron:
- description: sync
  url: /OAuth/FetchContent
  schedule: every 5 minutes

oauth.py Python 的 OAuth 库。这个文件直接从 OAuth 的官方代码弄的。

建立文件夹 OAuth,加入文件 OAuthHandle.py (下载)。

        打开这个文件,对前面的 setting area 进行修改,修改 OAuthConsumerKey,OAuthConsumerSecret,renren_usr,renren_passwd。然后搜索 latitude2renren,替换成你的appid。其他不需要改。

        还有一些其他特性可以在这里实现:

  1. 默认每5分钟检查一次位置,可以修改 cron.yaml
  2. 精度可以调节为最佳或者城市,OAuthHandle.py 修改 line 42 和 line 334,把 best 改成 city,但修改成 city 后同步的地标信息有误,建议自行修改 line 199 的正则规则
  3. 默认在人人网两次发状态的间隔大于8000000 millisecond,也就是两个多小时,修改 line368
    经纬度变化之和大于0.05度(回忆一下中学知识,纬度每变化1度大约是110公里)是更新的必要条件,修改line 367

        然后在X:\Program Files\Google\google_appengine\目录下运行

appcfy.py update ./你的文件夹

        上传GAE。

        最后一步是通过 OAuth 授权你的应用获得你的 Latitude 信息,访问 https://你的appid.appspot.com/OAuth/GetRequestToken,按提示操作即可。

        同步的效果是在条件满足时(默认为上次同步发生在8000秒前,经纬度变化之和超过0.05),五分钟之内更新一条人人网状态:I’m at 中国xxxxxx. http://maps.google.com/maps?ll=经度,纬度&z=12&t=m (Auto Sync from Google)

        我这里代码很省,比如 JSON 解析用的是正则;由于 Google Maps API Web Services 即将于本月推出,坐标转中文地标用的是 http://maps.google.com/maps?output=js&hl=zh-CN&oe=UTF-8&q=纬度+经度 这样的Google非正式API(更新,已经使用官方 The Google Geocoding API,有效解决部分地区无法找到地标的问题。原API的第三方文档见 mapki.com)。

原文地址:

http://www.lostriver.net/google-latitude-to-renren/

本站文章除注明转载外,均为本站原创编译
转载请注明:文章转载自:谷奥——探寻谷歌的奥秘 [http://www.guao.hk]
本文标题:使用 GAE 将 Google Latitude 地理位置同步到人人网
本文地址:http://www.guao.hk/posts/sync-google-latitude-geo-information-to-renren.html
本文短网址:http://guao.cc/egW
  1. fakezhu
    2010年8月25日02:01 | #1

    改用http授权通过,但是返回错误信息
    Traceback (most recent call last):
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 511, in __call__
    handler.get(*groups)
    File "/base/data/home/apps/autolatitude/1.344314468077324645/OAuth/OAuthHandle.py", line 344, in get
    lat = simplejson.loads(res)['data']['latitude']
    KeyError: 'data'

    Thumb up 0 Thumb down 0

  2. fakezhu
    2010年8月25日01:50 | #2

    请问做到最后一步
    “最后一步是通过OAuth授权你的应用获得你的Latitude信息,访问https://你的appid.appspot.com/OAuth/GetRequestToken,按提示操作即可。”
    的时候,无法访问,出现如下提示:
    此网页无法访问。

    网址为 https://autolatitude.appspot.com/OAuth/GetRequestToken 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。

    有关此错误的详情
    以下是原始错误讯息

    错误 101 (net::ERR_CONNECTION_RESET):未知错误。

    Thumb up 0 Thumb down 0

  3. PP
    2010年7月26日22:55 | #3

    能说得详细点不 非电工 不太明白啊

    Thumb up 0 Thumb down 0

  4. ~~
    2010年7月24日22:21 | #4

    iphone不行的 对不对……

    Thumb up 0 Thumb down 0

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
首次留言需审核,之后不会再审核。由于缓存机制您的留言可能不会立即显示出来,请稍后刷新本页面

您可以直接点击别人评论右侧的回复,这样您的回复评论将同时发到原作者信箱