闭门造轮子

造轮子工程师的代码笔记

Picasa翻墙之路(2)

2013-03-04 posted in [问题即经验]

忍无可忍之后,开始尝试自己开发一个web应用来解决Picasa的翻墙问题。基本思路是类似GoAgent一个部署在云服务器上的代理程序,通过Google API从服务端获取数据和图片文件,再代理给真正的用户访问。

由于PHP版本实在看不下去,所以转向node,之前使用Heroku来部署node应用已经很简单,那么最主要的问题就是在node中调用Google API。但不巧的是Google没有提供node的开发包,于是在GitHub上找到这几个看似有用的仓库:

  • node-gdata

    用这个包始终没有成功,即使我深入源码以及更深被引用的oauth源码进行调试,并且参考Google官方Picasa API的PHP文档来构造连接,但为什么验证完账号后无法获取数据的原因。

    不过有趣的是,另一个该仓库的fork版本node-gdata-oauth2作者演进了分支,并且在npm上注册了gdata的名字发布。当然,我也使用了这个版本。

  • google-oauth

    这个仓库作者(berryboy)还写了一个基于google-oauth日历的例子:google-calendar

    使用这个仓库的OAuth验证基本成功,按照标准来说不同写法的access_token结果上应该是通用的。使用这个库的前提是你要去Google API控制台申请一个APPID(免费)。

但到这里还不算完,虽然通过了Google的OAuth验证,但还是拿不到数据,本地测试由于加代理太麻烦返回总是超时,于是还是一次一次提交到heroku上测试,但返回却是403 Forbidden。找了半天才发现原来现在调用Google Data API需要申请开通,并且免费版本是有每天的数量限制的。详细的应用列表在Google API控制台中选Services菜单查看,这里面看Google大部分应用都统一API化了,这才是一个云平台最为牛逼的一点。

之后还找到Google自家的OAuth试验场,这里模拟了几乎大部分Google可以通过OAuth调用的应用接口,是非常好的Demo学习场所。

可是API控制台里找了半天却没有Picasa的,Group里的讨论查到原来Picasa还没升级到最新的接口,仍可以依据老的接口文档进行开发。

最后在我结合了前面两个仓库的调用之后,终于整合通过成功调用出了我的相册列表。但到这我又才发现,原来保存在*.ggpht.com域名下的所有Picasa照片又不用翻墙就可以访问了!而被墙的是picasaweb.google.com这个域名以及之上服务端的API!这尼玛兜了一大个圈子过来居然又没有必要继续了,和墙做斗争真是极度的纠结和痛苦!

于是我设计的Pixus翻墙应用被我半途而废的抛弃了,以后要是Google再被抽风墙掉的话,我再回来继续开发吧。

-EOF-

日新月异(2013-02)

2013-02-28 posted in [日新月异]

Picasa翻墙之路

2013-02-13 posted in [非专业吐槽]

折腾Android刷机的痛苦

2013-02-01 posted in []

日新月异(2013-01)

2013-01-31 posted in [日新月异]

日新月异(2012-12)

2012-12-31 posted in [日新月异]

恶心的CoffeeScript

2012-12-16 posted in [非专业吐槽]

日新月异(2012-11)

2012-11-30 posted in [日新月异]

发布npm包Rainbow

2012-11-10 posted in [闭门思考]

Just for Fun

2012-11-09 posted in [闭门思考]

HTTP状态码401

2012-11-07 posted in [问题即经验]

node模板引擎简单比较

2012-11-01 posted in [闭门思考]

日新月异(2012-10)

2012-10-31 posted in [日新月异]

转入Mac阵营

2012-10-12 posted in [闭门思考]

里程碑项目与iframe有关问题的排查

2012-09-23 posted in [问题即经验]

window.open返回值为null

2012-09-22 posted in [问题即经验]

FF和Chrome等现代浏览器支持字符串变量的中括号取值计算

2012-09-19 posted in [问题即经验]

IE8(包括以下)for..in无法遍历出对象上自定义的toString属性

2012-09-17 posted in [问题即经验]

IE8下window.postMessage的参数类型差异

2012-09-17 posted in [问题即经验]

Chrome下对空src的iframe刷新问题

2012-09-17 posted in [问题即经验]

整理几篇以前的技术文章

2012-09-09 posted in [闭门思考]

有依赖关系的数组排序

2012-08-15 posted in [问题即经验]

一个分号引发的血案

2012-07-30 posted in [问题即经验]

发布jekyll站点主题:SimpleGray

2012-07-25 posted in [闭门思考]

Git使用规范建议

2012-07-22 posted in [闭门思考]

并行加载多个Ajax请求问题

2012-07-17 posted in [问题即经验]

Iframe高度自适应的缺陷

2012-07-11 posted in [问题即经验]

Shell脚本笔记

2012-06-18 posted in []

记下最近碰到的几个数组问题

2012-06-06 posted in []

写了两个jekyll插件,算是Ruby初体验

2012-05-20 posted in []

解决jslib-builder中波浪号文件名排序问题

2012-05-15 posted in [问题即经验]

DOM元素所有样式属性表

2012-03-27 posted in []

雅黑字体文字显示异常问题

2012-03-26 posted in [问题即经验]

Firebug监控正则结果一直在反转

2012-03-21 posted in [问题即经验]

Cookie获取深层路径值错误

2012-03-10 posted in [问题即经验]

IE崩溃,CPU占用100%

2012-03-09 posted in [问题即经验]

像黑客一样写自己的技术博客

2012-03-04 posted in [闭门思考]

动态加载脚本方案调研

2009-06-25 posted in []

基于链式UI流程的业务模块设计

2009-04-02 posted in [闭门思考]

让Web也拥有华丽的手势操作

2008-11-23 posted in [闭门思考]

推荐近期的几篇css的文章

2008-01-18 posted in []

患上程序员的强迫症加妄想症

2008-01-15 posted in [闭门思考]

CSS选择器优先级的数位计算法

2007-12-21 posted in []

How Many HTML Elements Can You Name in 5 Minutes?

2007-12-03 posted in []

网易无敌的浮动层解决方案揭密

2007-12-02 posted in []

让HTML标签回归本位

2007-11-08 posted in [闭门思考]