首页 > Google, 技术贴 > 山寨货也是要更新的

山寨货也是要更新的

2010年8月20日

我的说的就是它->http://code.google.com/p/javatweet/

当初开始写的时候就是个山寨货,不过后来在几位参与者(@gythialy @sospartan @gowers)的帮助下,折腾的也算像点样子,用户也曾到过好几千,公开的GAE应用巅峰状态时候天天over quota。我自己的blog都没能有这么多的点击量,这个山寨货居然能如此受欢迎,真是灰常惊喜,真的,当时特别高兴。

后来一段时间,一直都在坚持消灭bug,想方设法添加新功能。比如那个匹配各种用户名,tag,链接,锻链接,图床的正则表达式就改了不知道多少遍,但是一直不完善,最后用的这个也就是比较靠谱而已;在客户端上直接修改头像,这个在我用过的客户端里,当时还没有;还有TwitpicProxy,就在直接发送图片的功能,这个是费了老大的劲,手工分析玩http报文后才搞定的。有那么几个月时间吧,一直在折腾这个东西,但是因为有用户,还是觉得很开心的。

然后就开学了。。。学习任务还是比较重的,实验室也有事情,因为程序也比较稳定了,所以就被搁置了。这一搁就是快一年了=。=||

今年暑假本来打算回来学车的,结果该死的宿舍搬家卡在一个前不前,后不后的位置,回来晚了,就考了个科目一,后面根本没法安排上车了。

Twitter早就宣布要取消BasicAuth了,程序也确实不得不进行修改了。虽然之前已经有@gythialy同学在原有基础上添加了OAuth功能,但是原来写程序的时候,为了方便,直接修改了Twitter4J库的代码,无法通过更新新版本的库添加新功能,所以很麻烦。。。

下了狠心,干脆重构。这次没有修改库的任何文件,方便以后升级库。

埋头闷了几天,在java,javascript,html,css直接来回折腾,搞的头那个大啊。。。

埋头敲代码的不良反映就是消化不良,脸上长痘。。。

好吧,下面是更新的功能:

  • 使用了目前最新版的Twitter4J库,并且保持了库的完整性,未做修改;
  • 支持了官方RT;
  • 全面支持OAuth,去除了对Basic OAuth的支持;
  • 闪动标题和声音提醒在设置中均可以单独设置;
  • 实现了在OAuth环境下更换头像的功能;
  • 添加了边栏个人资料的自动刷新和手工刷新;
  • 添加自动删除服务器端过期session的cron任务,避免造成GAE存储空间浪费;
  • 去掉了在OAuth环境下无法工作的功能,以及缩略图预览功能。

这里面其实大部分还是山寨的成分,但是可以更换头像的特色还是在努力和两天实现了。

其实更换头像实现起来还是比较容易的,特别是在php环境下其实特别容易,但是在java环境下还是需要灵活变通一下的。

java下分析上传文件时的http post的内容比较扯淡,其实根本不用分析,将修改头像的表单独立出来,并将该input元素的name属性设置成api需要的,然后直接转交报文载荷就行了,然后添加上OAuth的Header,就ok了。

HTTPRequest httpreq = new HTTPRequest(new URL("http://api.twitter.com/1/account/update_profile_image.json"), HTTPMethod.POST);
httpreq.addHeader(new HTTPHeader("Connection", "Keep-Alive"));
httpreq.addHeader(new HTTPHeader("Content-Type", req.getContentType()));
httpreq.addHeader(new HTTPHeader("Authorization", generateAuthorizationHeader()));

byte[] buf = new byte[req.getContentLength()];
req.getInputStream().read(buf);

httpreq.setPayload(buf);
HTTPResponse httpresp = urlFetch.fetch(httpreq);

今晚往SVN服务器上上传了新版代码。

好吧,下面发两个图来纪念下这一个多礼拜敲的6000多行代码。

jtweet

jtweet2

分类: Google, 技术贴 标签: , ,
  1. 2010年8月20日21:55 | #1

    不知道上传过后还是不是500服务器错误。。。

  2. 2010年8月20日21:58 | #2

    @blambin 上传后需要等一段时间,GAE切换版本需要时间。而且我自己搭建的时候,没有出现过这个问题啊。可以尝试清空一下cookie,或者访问一下/logout。

  3. 2010年8月21日04:41 | #3

    準備升級了哈。剛剛發現博客是有IPV6地址的。2607:f2f8 哈/。

  4. 2010年8月22日23:15 | #4

    原来javatweet是你搞得……

  5. fieldmouse
    2010年8月23日14:18 | #5

    @YuLei666
    我也不行,两个方法我都试过了

  6. darkkgg
    2010年8月26日17:29 | #6

    哥们不行哦 oauth跟oauthproxy都无法登录…

  7. darkkgg
    2010年8月27日09:23 | #7

    可以了 但是不能发推 报401错误…

  8. 2010年8月29日14:09 | #8

    高手,有个疑问请教下:
    如果我想对表单提交的图片进行缩放后在上传
    byte[] buf = new byte[req.getContentLength()];
    req.getInputStream().read(buf);
    那这种写法就不能满足需求了吧,高手知道怎么处理吗

  9. 2010年8月30日18:31 | #9

    @msino
    那就需要从http报文中解析出文件,这个可以用GAE的Blob接口,然后调用GAE的Image接口进行图像处理,然后构造httppost报文将图像发出。

  10. 2010年8月30日19:43 | #10

    @YuLei666
    后面的构造httppost报文图像发出这个问题困惑好几天了,贴上代码请教
    HTTPRequest uploadRequest = new HTTPRequest(“http://localhost/upload”, HTTPMethod.POST);
    byte[] image = img.getImageData();
    StringBuffer sb = new StringBuffer(1024);
    Iterator keys = params.keys();// 请求参数
    while (keys.hasNext()) {
    String key = (String) keys.next();
    String value = params.getString(key);
    sb.append(key + “=” + value + “&”);
    }
    sb.append(“file=” + new String(image));
    uploadRequest.addHeader(new HTTPHeader(“Connection”, “Keep-Alive”));
    uploadRequest.addHeader(new HTTPHeader(“Content-Length”, String.valueOf(sb.length())));
    uploadRequest.setPayload(sb.toString().getBytes());
    HTTPResponse response = urlFetch.fetch(uploadRequest);
    System.out.println(“code :” + response.getResponseCode());

    我按上面的写,最后返回的response code 总是400

  11. 2010年8月30日20:39 | #11

    sb.append(“file=” + new String(image));
    这句有点疑惑,因为上传要求图片的数据保存在name为file传递,类似

  12. 2010年8月30日20:40 | #12

    【input type=”file” name=”file” /】

  13. 2010年8月30日21:14 | #13

    @msino
    这个。。。multipart/form-data格式上传文件的http报文结构不是这样的。。。。
    你可以看看这个 http://hi.baidu.com/pingfanren_lcs/blog/item/558ac4fc8da21c8eb801a00b.html 里面有个post报文格式的例子,你构造一下就行了。而且如果是上传头像的话,参数就那一个文件,没其他的参数了。

  14. 2010年9月1日13:45 | #14

    9月1号以后,不支持baseurl的api了,什么时候更新oauth的api?

  15. mickey
    2010年9月3日09:45 | #15

    jiechic :9月1号以后,不支持baseurl的api了,什么时候更新oauth的api?

    用GTAP 4.0 哈

  16. Kcry
    2010年10月14日19:33 | #16

    C:\Program Files\Java\jdk1.6.0_22
    D:\Program Files\Google\appengine-java-sdk-1.3.7

    AppCfgWrapper-0.2.2

    上传成功后 两种登录方式都500 错误。。

    怎样解决?

    Error: Server Error
    The server encountered an error and could not complete your request.
    If the problem persists, please report your problem and mention this error message and the query that caused it.

本文的评论功能被关闭了.