基础介绍
接口文档
简历解析 简历画像 人岗匹配 职位解析 职位语义相似度 简历评估 人才推荐 人才搜索 简历查重

简历画像

ResumeSDK简历画像提供对输入的附件简历进行提取并进行人才画像的功能。ResumeSDK的服务基于http+json格式的接口方式提供服务,可以同时支持各种不同开发语言的客户端调用。


服务模式

ResumeSDK提供SaaS模式和独立部署两种形式的服务模式:

  1. SaaS模式:服务部署在我司服务器上,客户通过远程API调用的方式使用服务,按调用次数或者包年模式收费。可通过以下方式进行使用:
  2. 1)直接和我们购买:单价便宜,可以按次、包月或者包年。需要签合同,有起充额度要求;
    2)通过云市场购买;单价稍贵,可以按次购买。不需签合同,起充额度要求低,随购随用;(阿里云接口地址
  3. 独立部署:服务部署在客户自己的服务器上,客户自行运维和管控服务,无调用次数和期限的限制;

两种服务方式的接口仅涉及账户信息的地方有差异,简历结构化等其他字段信息均一致。以下以SaaS服务的接口格式做详细介绍。


注意事项

  1. 简历画像功能,需要先对简历进行解析,在解析结果的基础上进行画像。因此接口返回结果同时包含简历解析和简历画像的结果;
  2. 不定期新增字段:功能升级需要,我们可能会不定期在json结果中增加一些新的字段,因此在读取结果数据时,请注意对后续新增字段的兼容;

1、请求接口格式


请求ULR

  • SaaS接口请求url:http://www.resumesdk.com/api/parse_profile;
  • 独立部署请求url:http://ip:2015/api/ResumeProfiler;(ip换成实际部署的ip地址)
  • 阿里云接口请求url:http://aliprofile.market.alicloudapi.com/ResumeProfiler;

接口格式

  • 简历画像的输入为附件简历,其请求接口格式和简历解析完全一致,参考 简历解析请求接口
  • 调用时仅需将请求url替换成上面简历画像对应的接口url;

2、返回接口格式

总体字段

  • status:请求结果状态信息(简历解析对应字段);
  • account:账户状态信息(简历解析对应字段);
  • result:简历解析结果信息(简历解析对应字段);
  • profiler_result:简历画像结果信息(简历画像新增字段);

ResumeSDK以json格式返回上述信息,其中profiler_result为简历画像独有字段,其他字段和简历解析一致。

返回结构体示例:


    {
        "status": {
            "code": 200,
            "message": "OK"
        },
        "account": {
            "uid": 123456,
            "usage_limit": 62500,
            "usage_remaining": 50000
        },
        "result": {
            ...
        },
        "profiler_result": {
            ...
        },
    }
            


3、简历画像结构体

简历画像结果均放在profiler_result字段下。


技能信息标签

  • 字段说明:根据简历内容,提取工作技能、软素质技能、爱好、证书、奖项、语言等标签;
  • 字段名称:skills;
  • 字段类型:Dict类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 子字段 含义 类型 取值&描述
job_skills tag 技能名称 String 工作技能名称,比如java、机器学习等
type 技能类型 String 对应的类型,比如后端开发、前端开发等
weight 技能权重 int 百分制
soft_skills tag 软素质技能 String 软素质技能名称,比如团队合作精神、责任心强等
languages tag 语言名称 String 掌握的语言名称,比如俄语、粤语等
certificates tag 证书名称 String 所获证书名称,比如英语4级、pmp认证等
awards tag 奖励名称 String 所获奖项名称,比如三好学生、围棋比赛冠军等
hobbies tag 爱好名称 String 比如篮球、骑车等

样本示例:


"skills": {
    "job_skills": [
       {
          "tag": "需求收集",
          "type": "互联网产品经理",
          "weight": 69
       },
       {
          "tag": "迭代产品",
          "type": "互联网产品经理",
          "weight": 68
       },
    ],
    "soft_skills": [
       {
          "tag": "逻辑思维"
       },
       {
          "tag": "沟通协调能力"
       },
    ],
    "hobbies": [
       {
          "tag": "骑车"
       }
    ],
    "languages": [
       {
          "tag": "英语"
       }
    ],
    "certificates": [
       {
          "tag": "PMP项目管理认证"
       },
       {
          "tag": "大学英语4级"
       }
    ],
    "awards": [
       {
          "tag": "三好学生"
       }
    ]
}
            

基本信息标签

  • 字段说明:根据简历基本信息内容,提取年龄、性别、经验、城市、薪资等标签;
  • 字段名称:basic;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
tag 标签值 string 比如男、30~40岁等
type 标签类型 string 取值及含义:
- age:年龄;
- gender:性别;
- experience:工作经验;
- current_city: 所在城市;
- cv_salary: 当前薪资;
- expect_salary: 期望薪资;

样本示例:


"basic": [
    {
       "tag": "男",
       "type": "gender"
    },
    {
       "tag": "35-40岁",
       "type": "age"
    },
    {
       "tag": "10年以上经验",
       "type": "experience"
    }
    {
       "tag": "北京市",
       "type": "current_city"
    },
    {
       "tag": "10-20K",
       "type": "cv_salary"
    },
    {
       "tag": "期望10-20K",
       "type": "expect_salary"
    }
]
            

教育信息标签

  • 字段说明:根据简历教育经历内容,提取学历、专业、学校、学校等级、留学等标签;
  • 字段名称:education;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
tag 标签值 string 比如本科学历、计算机专业等
type 标签类型 string 取值及含义:
- degree:学历;
- major:专业;
- graduate:是否毕业;
- college: 学校;
- college_level: 学校类别;
- abroad_edu: 海外留学经历;
- abroad_country: 留学地区;

样本示例:


"education": [
    {
       "tag": "本科学历",
       "type": "degree"
    },
    {
       "tag": "计算机科学与技术专业",
       "type": "major"
    },
    {
       "tag": "应届生",
       "type": "graduate"
    },
    {
       "tag": "北京化工大学",
       "type": "college"
    },
    {
       "tag": "211院校",
       "type": "college_level"
    },
    {
       "tag": "海外留学经历",
       "type": "abroad_edu"
    },
    {
       "tag": "留学地区:美国",
       "type": "abroad_country"
    }
]
            

职业信息标签

  • 字段说明:根据简历工作经历内容,提取职位、智能、行业、公司类型等标签;
  • 字段名称:job_exp;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
tag 标签值 string 不同类型取值不一样
type 标签类型 string 取值及含义:
- position:职位名称;
- position_type:职位类型;
- industry:所处行业;
- company_level: 公司类型;

样本示例:


"job_exp": [
    {
       "tag": "薪酬福利主管",
       "type": "position"
    },
    {
       "tag": "办公室内勤",
       "type": "position"
    },
    {
       "tag": "人事/行政-行政/后勤-行政专员/助理",
       "type": "position_type"
    },
    {
       "tag": "人事/行政-人力资源-薪资福利经理/主管",
       "type": "position_type"
    },
    {
       "tag": "计算机/互联网/通信/电子-网络游戏",
       "type": "industry"
    }
]
            

职能类型分析

  • 字段说明:根据简历工作经历等内容,预测候选人所处的职能类型,给出topN结果;
  • 字段名称:predicted_pos_types;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
c1 一级职能 string 一级职能名称
c2 二级职能 string 二级职能名称
c3 三级职能 string 三级职能名称
weight 权重 string 百分制

样本示例:


"predicted_pos_types": [
    {
       "c1": "人事/行政",
       "c2": "行政/后勤",
       "c3": "行政专员/助理",
       "weight": 24
    },
    {
       "c1": "人事/行政",
       "c2": "人力资源",
       "c3": "薪资福利经理/主管",
       "weight": 11
    },
    {
       "c1": "人事/行政",
       "c2": "人力资源",
       "c3": "人事主管",
       "weight": 8
    },
    {
       "c1": "人事/行政",
       "c2": "人力资源",
       "c3": "薪资福利专员/助理",
       "weight": 7
    },
    {
       "c1": "人事/行政",
       "c2": "行政/后勤",
       "c3": "后勤",
       "weight": 6
    }
]
            

所属行业分析

  • 字段说明:根据简历信息预测候选人所处的行业信息,并给出每个一级行业(共11个)的隶属度;
  • 字段名称:predicted_industries_c1;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
c1 行业名称 string 所属行业名称,比如:计算机/互联网/通信/电子
weight 隶属度 int 百分制

样本示例:


"predicted_industries_c1": [
    {
       "c1": "计算机/互联网/通信/电子",
       "weight": 70
    },
    {
       "c1": "服务业",
       "weight": 20
    },
    {
       "c1": "政府/非营利组织/其他",
       "weight": 10
    },
    {
       "c1": "制药/医疗",
       "weight": 0
    },
    {
       "c1": "广告/媒体",
       "weight": 0
    },
    {
       "c1": "房地产/建筑",
       "weight": 0
    },
    {
       "c1": "物流/运输",
       "weight": 0
    },
    {
       "c1": "会计/金融/银行/保险",
       "weight": 0
    },
    {
       "c1": "专业服务/教育/培训",
       "weight": 0
    },
    {
       "c1": "能源/环保/化工",
       "weight": 0
    },
    {
       "c1": "贸易/消费/制造/营运",
       "weight": 0
    }
]
            

所属行业分析2

  • 字段说明:根据简历信息预测候选人所处的二行业信息,并给出隶属度最高的topN个二级行业。
  • 字段名称:predicted_industries_c2;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
c1 一级行业 string 一级行业名称,比如:计算机/互联网/通信/电子
c2 二级行业 string 二级行业名称,比如:网络游戏
weight 隶属度 int 百分制

样本示例:


"predicted_industries_c2": [
    {
       "c1": "服务业",
       "c2": "餐饮业",
       "weight": 18
    },
    {
       "c1": "计算机/互联网/通信/电子",
       "c2": "计算机软件",
       "weight": 14
    },
    {
       "c1": "贸易/消费/制造/营运",
       "c2": "快速消费品(食品、饮料、化妆品)",
       "weight": 7
    }
]
            

工作稳定性分析

  • 字段说明:根据简历工作经历,计算工作稳定性相关信息,并给出是否稳定判断。
  • 字段名称:stability;
  • 字段类型:Array类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
average_job_time 平均每段工作的时长 float 以月为单位
average_job_type_time 平均每段职能的时长 float 以月为单位
average_industry_time 平均每个行业的时长 float 以月为单位
long_job_time_num 长时间的工作经历数 int 段数
short_job_time_num 短时间的工作经历数 int 段数
job_stability 工作稳定性 string 稳定、不稳定(如果无值则为空)

样本示例:


"stability": {
  "average_job_time": 28.6,
  "average_job_type_time": 71.5,
  "average_industry_time": 71.5,
  "long_job_time_num": 3,
  "short_job_time_num": 1,
  "job_stability": "稳定"
}
            

薪资预测

  • 字段说明:根据简历信息预测候选人当前对应的薪资范围。
  • 字段名称:predicted_salary;
  • 字段类型:float类型;
  • 作为profiler_result结构体下的一级字段存在。包含的字段如下:
字段 含义 类型 取值&描述
predicted_salary 预测薪资 string 共7档:3K以下、3-5K、5-10K、10-20K、20-30K、30-50K、50K以上

样本示例:


"predicted_salary": "5-10K"
            

能力指数

能力指数capacity,作为profiler_result结构体下的一级字段存在。包含的字段如下:

字段 含义 类型 取值&描述
education 教育指数 int 百分制
honor 荣誉指数 int 百分制
language 语言能力指数 int 百分制
management 管理能力指数 int 百分制
job_exp 职业经历指数 int 百分制
social_exp 实践经历指数 int 百分制

样本示例:


"capacity": {
  "education": 90,
  "honor": 10,
  "language": 30,
  "management": 10,
  "job_exp": 30,
  "social_exp": 10
}
            

简历亮点分析

简历亮点分析highlights,Array类型。作为profiler_result结构体下的一级字段存在。包含的字段定义如下:

字段 含义 类型 取值&描述
title 亮点点名称 string 比如工作稳定、名企经历等
content 亮点内容 string 亮点的详细信息
type 亮点类型 string 亮点所属类型,比如job_exp、education等

样本示例:


"highlights": [
    {
       "title": "工作稳定",
       "content": "【工作稳定】:平均每段工作经历持续【43】个月,且存在【1】段工作经历2年以上",
       "type": "job_exp"
    },
    {
       "title": "",
       "content": "在【国内电商运营】职能领域和【美容/保健】行业里有【较丰富】工作经历",
       "type": "job_exp"
    },
    {
       "title": "211院校",
       "content": "【较不错】的教育背景:学士学历,毕业于【211院校】",
       "type": "education"
    }
]
            

简历风险点分析

简历风险点分析risks,Array类型。作为profiler_result结构体下的一级字段存在。包含的字段定义如下:

字段 含义 类型 取值&描述
title 风险点名称 string 比如工作不稳定、空档期等
content 风险点内容 string 风险点的详细信息
type 风险点类型 string 风险点所属类型,比如job_exp、education等

样本示例:


"risks": [
    {
       "title": "工作不稳定",
       "content": "【工作不稳定】:平均每段工作经历仅持续【10】个月,且存在【1】段工作经历1年以下",
       "type": "job_exp"
    },
    {
       "title": "空档期",
       "content": "【空档期】:候选人在 2014.06~2015.07 期间共存在【13个月】的职业空档期",
       "type": "job_exp"
    }
]
            

简历画像调用示例


ResumeSDK简历画像基于http+json格式的接口方式提供服务,可以同时支持各种不同开发语言的客户端调用。

使用说明

使用前需要先获取接口账号信息,ResumeSDK提供以下几种渠道的接口:

  1. 官网SaaS版接口:需联系官网客服获取测试接口账号,使用时填入uid和pwd信息;
  2. 官网独立部署版接口:需要先部署好服务;
  3. 阿里云接口:通过阿里云接口地址获取AppCode账号信息;

接口格式

  • 简历画像的输入为附件简历,其请求接口格式和简历解析完全一致,参考 简历解析请求接口
  • 调用时仅需将请求url替换成上面简历画像对应的接口url;
  • 返回时处理简历画像的返回接口字段profiler_result;

1、官网SaaS接口示例


Python

官网接口Python代码:需要安装pip install requests。此代码同时支持python2及python3。


#coding: utf-8

import sys
import base64
import requests
import json

def test_parser(url, fname, uid, pwd):
    """
    请求简历解析接口,请求字段:
    - uid:必填,用户id;
    - pwd:必填,用户密码;
    - file_name: 必填,简历文件名(请确保后缀正确);
    - file_cont: 必填,经based64编码的简历文件内容;
    - need_avatar: 可选,是否需要解析头像,0为不需要,1为需要,默认为0;
    - 其他可选字段可参考官网:https://www.resumesdk.com/docs/rs-profiler.html#reqType
    """

    # 读取文件内容,构造请求
    cont = open(fname, 'rb').read()
    base_cont = base64.b64encode(cont)
    base_cont = base_cont.decode('utf-8') if sys.version.startswith('3') else base_cont     #兼容python2与python3
    
    headers = {'uid': str(uid), 'pwd': pwd}

    data = {'file_name': fname,
            'file_cont': base_cont,
            'need_avatar': 0,
            }
    
    # 发送请求
    res = requests.post(url, data=json.dumps(data), headers=headers)
    
    # 解析结果
    http_code = res.status_code
    if http_code != 200:
        print("http status code:", res.status_code)
    else:
        res_js = json.loads(res.text)
        print('result:\n%s\n'%(json.dumps(res_js, indent=2, ensure_ascii=False)))
    
if __name__ == '__main__' :
    url = 'http://www.resumesdk.com/api/parse_profile'    # 接口地址,也可以用https
    fname = u'D:/resumeSDK/resume.docx'  # 替换为你的文件名
    uid = 123456   # 替换为你的用户名(int格式)
    pwd = '123abc'  # 替换为你的密码(str格式)
    res_js = test_parser(url, fname, uid, pwd)
            

Java

官网接口Java代码:需要安装apache-http, json, commons-io


import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.Consts;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class TestParseApi {
  /**
   * 请求接口格式:
   * - uid: 必填,用户id;
   * - pwd: 必填,用户密码;
   * - file_name: 必填,简历文件名(请确保后缀正确);
   * - file_cont: 必填,经based64编码的简历文件内容;
   * - need_avatar: 可选,是否需要解析头像,0为不需要,1为需要,默认为0;
   * - 其他可选字段可参考官网:https://www.resumesdk.com/docs/rs-profiler.html#reqType
   */
    public static void testResumeParser(String url, String fname, int uid, String pwd) throws Exception {
        HttpPost httpPost = new HttpPost(url);

      // 设置头字段
        httpPost.setHeader("uid", String.valueOf(uid));
        httpPost.setHeader("pwd", pwd);
        httpPost.addHeader("content-type", "application/json");
        
        // 读取简历内容
      byte[] bytes = FileUtils.readFileToByteArray(new File(fname));
      String data = new String(Base64.encodeBase64(bytes), Consts.UTF_8);
      
        // 设置请求接口信息
        JSONObject json = new JSONObject();
        json.put("file_name", fname); // 文件名
        json.put("file_cont", data);  // 经base64编码过的文件内容
        json.put("need_avatar", 0); 
        StringEntity params = new StringEntity(json.toString(), Consts.UTF_8);
        httpPost.setEntity(params);
        
        // 发送请求
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpResponse response = httpclient.execute(httpPost);
        
        // 处理返回结果
        int httpCode = response.getStatusLine().getStatusCode();
        System.out.println("http status code:" + httpCode);

        String resCont = EntityUtils.toString(response.getEntity(), Consts.UTF_8);
        JSONObject res = new JSONObject(resCont); 
        JSONObject status = res.getJSONObject("status");
        if(status.getInt("code") != 200) {
            System.out.println("request failed: code=<" + status.getInt("code") + ">, message=<" + status.getString("message") + ">");
        }
        else {
            JSONObject result = res.getJSONObject("profiler_result");  // 画像结果
            System.out.println("result:\n" + result.toString(4));
            System.out.println("request succeeded");
        }
    }
    
    public static void main(String[] args) throws Exception {
        String url = "http://www.resumesdk.com/api/parse_profile";    // 接口地址,也可以用https
        String fname = "D:/resumeSDK/resume.docx";  //替换为你的文件名
        int uid = 123456;   //替换为你的用户名(int格式)
        String pwd = "123abc";  //替换为你的密码(String格式)

        testResumeParser(url, fname, uid, pwd);
    }
}
            

JavaScript

官网接口JavaScript代码:此代码需要安装npm install request。


var request = require('request');
var fs = require('fs');

var url = 'http://www.resumesdk.com/api/parse_profile'; // 接口地址,也可以用https
var fname = 'D:/resumeSDK/resume.docx';        // 替换为你的文件名
var uid = 123456;       // 替换为你的用户名(int格式)
var pwd = '123abc';     // 替换为你的密码(str格式)

var options = {
    url: url,
    headers: {
        'uid': uid,
        'pwd': pwd,
    },
    json: {
        'file_cont': Buffer(fs.readFileSync(fname)).toString('base64'),
        'file_name': fname,
        'need_avatar': 0
    }
};

var result = request.post(options, function(err, resp, body) {
    console.log('http status code: ', resp.statusCode);
    if (err) {
        console.log(err);
        process.exit(1);
    } else {
        console.log(body);
        process.exit(0);
    }
});
            

PHP

官网接口PHP代码:基于cURL进行post请求的PHP代码。


<?php
    /*
      请求接口格式:
        - uid:必填,用户id;
        - pwd:必填,用户密码;
        - file_name: 必填,简历文件名(请确保后缀正确);
        - file_cont: 必填,经based64编码的简历文件内容;
        - need_avatar: 可选,是否需要解析头像,0为不需要,1为需要,默认为0;
        - 其他可选字段可参考官网:https://www.resumesdk.com/docs/rs-profiler.html#reqType
    */
    $url ="http://www.resumesdk.com/api/parse_profile";     // 接口地址,也可以用https

    $file_name = 'D:/resumeSDK/resume.docx';       // 替换为你的本地文件名
    $file_cont = base64_encode(file_get_contents($file_name));
    $data = array(
        'file_cont' => $file_cont,
        'file_name'=> $file_name,
        'need_avatar' => 0
    );
    $data_string = json_encode($data);

    $headers = array(
        'Content-Type: application/json',
        'uid: 123456',      //替换为您的uid
        'pwd: 123abc'       //替换为您的pwd   
    );

    $ch = curl_init();
    curl_setopt($ch , CURLOPT_URL , $url);
    curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch , CURLOPT_POST, 1);
    curl_setopt($ch , CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch , CURLOPT_HTTPHEADER, $headers);
    $output = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    echo 'HTTP status code: ' . $httpcode . "\n";
    print_r($output);
?>
            

Golang

官网接口Go代码。


package main

import (
    "bytes"
    "fmt"
    "log"
    "net/http"
    "os"
    "encoding/base64"
    "encoding/json"
    "bufio"
    "io/ioutil"
)

type Input struct {
    File_name string `json:"file_name"`
    File_cont string `json:"file_cont"`
    Need_avatar int `json:"need_avatar"`
}

// Creates http request
func createRequest(url string, uid int, pwd string, fname string) (*http.Request, error) {
    file, err := os.Open(fname)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    // Read entire file into byte slice.
    reader := bufio.NewReader(file)
    content, _ := ioutil.ReadAll(reader)

    // Create Request
    file_cont := base64.StdEncoding.EncodeToString(content)
    input := Input{File_name: fname, File_cont: file_cont, Need_avatar: 0}
    jsonValue, _ := json.Marshal(input)
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonValue))

    // Set headers
    req.Header.Set("Content-Type", "application/json")
    uid_str := fmt.Sprintf("%d", uid)
    req.Header.Set("uid", uid_str)
    req.Header.Set("pwd", pwd)
    return req, err
}

func testParser(url string, uid int, pwd string, fname string) {
    request, err := createRequest(url, uid, pwd, fname)
    if err != nil {
        log.Fatal(err)
    }

    client := &http.Client{}
    resp, err := client.Do(request)
    fmt.Println("http status code: ", resp.StatusCode)
    if err != nil {
        log.Fatal(err)
    } else {
        body := &bytes.Buffer{}
        _, err := body.ReadFrom(resp.Body)
        if err != nil {
            log.Fatal(err)
        }
        resp.Body.Close()
        fmt.Println(body)
    }
}

func main() {
    url := "http://www.resumesdk.com/api/parse_profile"      // 接口地址,也可以用https
    uid := 123456    // 替换为你的用户名(int格式)
    pwd  := "123abc" // 替换为你的密码(str格式)
    fname := "D:/resumeSDK/resume.docx"  //替换为您的简历
    testParser(url, uid, pwd, fname) 
}

            

C#

官网接口C#代码。


using System;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

class TestParserApi {
  /*
    请求接口格式:
      - uid:必填,用户id;
      - pwd:必填,用户密码;
      - file_name: 必填,简历文件名(请确保后缀正确);
      - file_cont: 必填,经based64编码的简历文件内容;
      - need_avatar: 可选,是否需要解析头像,0为不需要,1为需要,默认为0;
  */
  static public void TestParser(string url, string fname, int uid, string pwd) {
    string json_string = string.Empty;
    
    // 构造请求头
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.ContentType = "application/json";
    request.Headers.Add("uid", uid.ToString());
    request.Headers.Add("pwd", pwd);

    // 读取文件内容,经过base64编码后发送
    Byte[] bytes = File.ReadAllBytes(fname);
    String base_cont = Convert.ToBase64String(bytes);
    
    using (var streamWriter = new StreamWriter(request.GetRequestStream())){
        string json = new JavaScriptSerializer().Serialize(new
                    {
                        file_cont = base_cont,  // 经base64编码的文件内容
                        file_name = fname,  // 文件名称
                        need_avatar = 0,
                    });

        streamWriter.Write(json);
    }

    // 获取请求结果:json格式
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Console.WriteLine("http status code: {0}", response.StatusCode);

    using (var streamReader = new StreamReader(response.GetResponseStream())){
      json_string = streamReader.ReadToEnd();
    }
    // Console.WriteLine(json_string);

    // 解析并打印json结果(此处用JavaScriptSerializer解析,也可用Newtonsoft.Json等)
    var serializer = new JavaScriptSerializer();
    dynamic js = serializer.DeserializeObject(json_string);
    Console.WriteLine("code:" + js["status"]["code"] + ", message: " + js["status"]["message"]);
    Console.WriteLine("name:" + js["result"]["name"]);
    Console.WriteLine("stability:" + js["profiler_result"]["stability"]["job_stability"]);
  }

  static public void Main(){
    string url = "http://www.resumesdk.com/api/parse_profile";  // 接口地址,也可以用https
    string fname = "./resume.docx"; // 替换为你的简历文件
    int uid = 123456;      // 替换为你的uid
    string pwd = "123abc";   // 替换为你的pwd
    TestParser(url, fname, uid, pwd);
  }
}
            


2、官网独立部署接口示例


独立部署版不需进行用户验证,其接口官网SaaS版接口差不多。具体使用说明如下:

  1. 服务部署好之后获得服务的ip和port信息;
  2. 参考前面官网SaaS版接口对应语言的代码进行修改:
    • 请求url:改为http://ip:port/api/ResumeProfiler(替换为实际的ip和port),比如http://localhost:2015/api/ResumeProfiler;
    • 请求接口:
      • headers字段:去掉headers中的uid和pwd字段;
      • ocr_type字段:根据配置的OCR服务进行选择
        • ocr_type=0:百度OCR;
        • ocr_type=1:腾讯OCR;
        • ocr_type=2:阿里读光OCR;
        • ocr_type=5:自定义OCR;
    • 返回接口:返回接口中无account字段信息,其他字段均一致;

3、阿里云接口示例


阿里云接口AppCode验证方式和官网接口差不多,使用Authorization替换headers中的uid和pwd即可。具体说明如下:

  1. 通过阿里云接口地址购买账号;
  2. 进入阿里云控制台 / 云市场 / 已购买的服务,找到对应的AppCode信息;
  3. 参考前面官网SaaS版接口对应语言的代码进行修改:
    • 请求url:https://aliprofile.market.alicloudapi.com/ResumeProfiler
    • 请求接口:将headers中的uid和pwd字段换成Authorization字段:key="Authorization",value="APPCODE " + 你的AppCode;
    • 返回接口:返回接口中无account字段信息,其他字段均一致;