一个开源的基于PHP/SAE的微博开放平台趣味测试应用DEMO

似乎毕业以来就没有时间再做拿得出手的个人开发作品,上次的 Social TV Demo 还停留在丑陋的技术演示程序阶段(尽管如此也帮助我认识了不少看好 Social TV 未来发展方向的朋友和创业团队,呵呵)。最近几周又抽空做了个小玩意儿。其实这个东西简单到完全只需要几个小时就能搞定的,但因为工作实在太忙,所以断断续续始终没能弄好。最后还是在旁听某个无料的分享会的时候顺手给搞定了。

这是一款基于 PHP 语言、Sina App Engine(SAE)部署、连接微博开放平台的趣味测试应用DEMO。最重要的是,它是开源的。也就是说,任何人都可以直接拿来改改(几乎无需修改任何代码,只需要改改测试结果的字段名和替换对应目录下的图片就可以了),就发布一个自己的微博测试。

由于我是日本特摄尤其是奥特曼系列的爱好者,因此测试的名字就是“测测你是哪个奥特曼”,主要玩法就是连接微博账号之后,根据用户昵称判断(用的是 MD5 加密后取头两位)自己对应的奥特曼身份。幼稚也好,脑残也罢,终归是奥迷向从小陪伴成长的英雄们的致敬。

体验地址:http://ultramantest.sinaapp.com

Continue reading “一个开源的基于PHP/SAE的微博开放平台趣味测试应用DEMO”

一个 SocialTV demo

LBS 的 Check-in 概念逐渐开始烂大街,作为一个 TV potato + Mobile addicted + 分享爱好者,很自然想到将正在看的电视节目通过“签到”方式转发到微博,分享给朋友们,也即是所谓的SocialTV。实际上,此种模式国内外已有类似尝试(这两天  Techcrunch Disrupt 2011 上也有这么一家渔玩,不过专家们似乎普遍对市场前景不太看好)。

前两周用周末时间,使用 PHP + Sina App Engine + 微博开放平台做了个网页版的 SocialTV。主要功能就是通过连接微博账号,选择当前频道,系统自动给出当前时间档在播的节目,并可发布一则微博。目前仅是功能演示版,没有任何界面可言(不过针对 iPhone 屏幕还是做了个仿原生的 CSS 效果)。

试玩地址:http://socialtv.sinaapp.com

目前提供的频道除 CCTV 系外,都是我常看的各种地方卫视台。节目信息是从国内某电视节目预告网站抓取来的,做得比较粗略,可能偶尔有时候有部分节目读不出来,显示空白,还需优化。

原本打算再完善下放出来让大家玩的,现在看来工作繁忙,怕是没时间慢慢调整了,就先把功能演示 demo 丢出来了。代码比较简单,有兴趣的我可以分享出来或者丢到 Google Code 上。

顺便说一句,SAE 和微博开放平台提供的官方帮助和演示代码,真 TMD 渣。

InnerHTML 实现伪 AJax 效果

最近在折腾毕设,希望给开发中的项目增加 Ajax 效果,通过异步加载和视觉反馈,以增强用户体验。

在了解了 Ajax 的原理(果然了解一件事物最好的方式是去了解其运作原理,最好是自己复刻一遍)之后,联想到此前玩 GreaseMonkey 时了解到的 InnerHTML 的用法,自作聪明地琢磨了一个用 InnerHTML 实现 Ajax 效果的简单伪办法

事情是这样的。使用 Ajax,需要掌握 Javascript 编写技能,理解 XMLHttpRequest 对象,并且在与服务器的连接和响应确认上来回折腾。其实从功能实现层面来看,使用 Ajax 的目的无非在于:1)前台动态改变页面内容,以响应用户操作;2)后台处理数据,例如将某个值传递到数据库。

通过 InnerHTML ,稍加转换思路,完全可以另辟蹊径,通过以下淫荡技巧实现:

1)前台动态改变页面内容。这个对于 InnerHTML 而言再简单不过了。tablerowObject.innerHTML=$str 语句就是用来改变页面中某个元素的内部代码。如 document.getElementById(“div1″).innerHTML=”<strong>Hello World</strong>” 就是一个典型的实例。

2)后台处理数据。用 InnerHTML 同样可以实现,办法是 —— iframe!没错,用 InnerHTML 为页面新开一个 iframe(当然长宽调成0可使其隐藏而不显示在页面内),直接 src 到一个负责处理数据的带参数的页面,例如 do.php?action=add&message=aloha 。这个 do.php 负责接收参数并完成处理,比如将 aloha 这个字符串写进数据库。

编写一个简易版 Facebook 的 Like 按钮举例。通过上述方法,编写的思路是:

  • 1)前台用 InnerHTML 将 X people like 中的 X 加 1 (此处 X 可能需事先从数据库读取);
  • 2)InnerHTML 开个 iframe (地址形如 do.php?statue=12345&action=likeadd);
  • 3)编写 do.php,获取参数,最终将数据库中编号为 12345 的这条状态的 like 数量 +1 。

此方法的适用场合:系统架构不复杂,传递的参数不多,对安全性和稳定性的要求不高,以及懒得写 Ajax(比如糊弄毕设这档子事儿) …