1. 背景
周末花了两天写了一个爬取、并解析HMDB数据库的工具,为了能够根据需要修改关键搜索参数,我使用了配置文件的方式进行配置。配置文件当时为了快速省事,直接采用了json文件。
在程序启动时,读取配置文件中的参数,然后使用这部分参数从HMDB网站获取数据,也算是比较灵活方便了。
2. 实现
由于配置文件比较小,这里我直接读取了整个文件内容;然后将其解析成对应的结构体
type ReqParam struct {
SearchMode string `json:"ms_search_ion_mode"`
AdductType []string `json:"adduct_type"`
Tolerance string `json:"tolerance"`
ToleranceUnits string `json:"tolerance_units"`
CcsPredictors string `json:"ccs_predictors"`
CcsTolerance string `json:"ccs_tolerance"`
}
func ReadReqParamConfig(fileName string) string {
f, err := os.Open(fileName)
if err != nil {
fmt.Println(err)
return ""
}
r := io.Reader(f)
param := &ReqParam{}
if err = json.NewDecoder(r).Decode(param); err != nil {/********************/
panic(err)
}
return param.Trans2String()
}
func (rp ReqParam) Trans2String() string {//转换为http post载荷格式
str := make([]byte, 0, 1024)
{
ss := fmt.Sprintf("&ms_search_ion_mode=%s", rp.SearchMode)
str = append(str, []byte(ss)...)
}
{
for _, v := range rp.AdductType {
ss := "&adduct_type%5B%5D=" + v
str = append(str, []byte(ss)...)
}
}
{
ss := fmt.Sprintf("&tolerance=%s", rp.Tolerance)
str = append(str, []byte(ss)...)
}
{
ss := fmt.Sprintf("&tolerance_units=%s", rp.ToleranceUnits)
str = append(str, []byte(ss)...)
}
{
ss := fmt.Sprintf("&ccs_predictors=%s", rp.CcsPredictors)
str = append(str, []byte(ss)...)
}
{
ss := fmt.Sprintf("&ccs_tolerance=%s", rp.CcsTolerance)
str = append(str, []byte(ss)...)
}
{
ss := fmt.Sprintf("&commit=%s", "Search")
str = append(str, []byte(ss)...)
}
return strings.ReplaceAll(string(str), "+", "%2B")
}
3. HMDB爬虫工具效果
这里是最后的结果,上面介绍的只是其中一个很小的功能,虽然很简单,但是我还是百度出来的。正所谓:面向CSDN编程。为了以后能够更快,更准,更高效的面向CSDN编程,特将此小小功能记录下来。