感谢 @LucienLu 的投递和自爆。
非常奇怪人人网明知地理信息的重要价值,仍然没有从浏览器获取用户 geo 信息。geo 很有趣,于是自己先实现了用 GAE 将 Google Latitude 同步到 renren。
感谢这位同学用 GAE 同步 twitter 到人人网状态的方法,很有用,让我没发几条垃圾状态。
需求:
- 手机安装 Google 地图并且开通谷歌纵横
- 申请一个 GAE 账户并安装 python 和 GAE 开发包,可以看 Google 官方的文档。然后创建一个 GAE 应用,我的是 latitude2renren
- 注册你的 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: 1handlers:
- 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。其他不需要改。
还有一些其他特性可以在这里实现:
- 默认每5分钟检查一次位置,可以修改 cron.yaml
- 精度可以调节为最佳或者城市,OAuthHandle.py 修改 line 42 和 line 334,把 best 改成 city,但修改成 city 后同步的地标信息有误,建议自行修改 line 199 的正则规则
- 默认在人人网两次发状态的间隔大于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






改用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'
请问做到最后一步
“最后一步是通过OAuth授权你的应用获得你的Latitude信息,访问https://你的appid.appspot.com/OAuth/GetRequestToken,按提示操作即可。”
的时候,无法访问,出现如下提示:
此网页无法访问。
网址为 https://autolatitude.appspot.com/OAuth/GetRequestToken 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。
有关此错误的详情
以下是原始错误讯息
错误 101 (net::ERR_CONNECTION_RESET):未知错误。
能说得详细点不 非电工 不太明白啊
iphone不行的 对不对……