2015年8月

[开源] kaka 咔咔

项目地址:https://github.com/xiaozi/kaka
下载地址:https://github.com/xiaozi/kaka/releases

依赖

  1. nsq

  2. casperjs

  3. phantomjs

安装

  1. 将 .env.example 拷贝为 .env

  2. 修改 .env, 填写信息

  3. 运行

./kaka

用法

只需要将消息塞到 nsq 的 topic 中就可以了,topic 是你在 .env 文件里面设置的

消息使用 json 格式,结构如下:

{
    "url": "http://tool.lu/",
    "target": "/data/screenshots/WrTSV5zbkHPCqU6t.png",
    "path": "screenshots/WrTSV5zbkHPCqU6t.png",
    "device": "mac"
}

url: (必须) 需要截图的url

target: (必须) 截图在服务器上的保存的绝对路径

path: (可选) 上传到七牛云的路径,不填则不上传

device: (可选) 目前只支持 “mac" 这个值

FAQ

  1. 使用casperjs截出优雅的图片

  2. 多种网络环境的处理

在每台机器上都配置一个kaka,然后让他们从不同channel的订阅

  1. 不想上传到七牛云

消息中的path留空就好了

开发依赖

go get -u github.com/joho/godotenv
go get -u github.com/qiniu/api.v7
go get -u github.com/bitly/go-nsq

Spring RequestParam过于智能

POST到后端的数据是这样的

keywords[]: 关键词1,关键词2
keywords[]: 关键词3,关键词4
@RequestParam(value = "keywords[]") List<String> keywords;

然而经过Spring的RequestParam处理之后,却变成了 ["关键词1", "关键词2", "关键词3", "关键词4"];对于 Spring 这种过分聪明的行为我表示很呵呵~

防止这种解析的办法就是覆盖掉原有的converters;不使用英文逗号为分隔符。

<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="lu.tool.util.StringToArrayConverter" />
        </set>
    </property>
</bean>
package lu.tool.console.util;

import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;

/**
 * Created by xiaozi on 8/12/15.
 */
public class StringToArrayConverter implements Converter<String, List<String>>{
    @Override
    public List<String> convert(String source) {
        return Arrays.asList(StringUtils.delimitedListToStringArray(source, ";"));
    }
}

fastjson处理Map的 key 为 int 的bug

JSON 中的 MAP 是不支持 int 为 key 的;

Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
System.out.println(JSON.toJSONString(map));
// {1:"one",2:"two"}

标准的json规范中,要求对象的key必须为string