
图像/转换 图片压缩优化,保持长宽比,保证清晰度 图片压缩 / 图片优化 / 尺寸调整 图片压缩 / 图片处理

接口详情: https://www.gugudata.com/api/details/image-compress
接口地址: https://api.gugudata.com/ai/image-compress
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/ai/image-compress
数据预览: https://www.gugudata.com/preview/image-compress
接口测试: https://api.gugudata.com/ai/image-compress/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY ,可通过 Query 参数或 Form 字段 appkey 传递 |
| image_file | file | 否 | 上传的图片文件,支持 JPG / JPEG / PNG / GIF / WEBP / BMP ,与 image_url 二选一必填 | |
| image_url | string | 否 | 网络图片 URL ,与 image_file 二选一必填,需为可直接访问的 HTTP/HTTPS 链接 | |
| targetwidth | int | 否 | 目标宽度(像素),与 targetHeight 组合使用时按照最长边等比缩放;不传则不以此为约束 | |
| targetheight | int | 否 | 目标高度(像素),与 targetWidth 组合使用时按照最长边等比缩放;不传则不以此为约束 | |
| maxwidth | int | 否 | 最大宽度(像素),只限制不超过该宽度并保持长宽比;当未显式传递任何尺寸参数且图片特别大时,服务会自动使用 1920 作为默认上限 | |
| maxheight | int | 否 | 最大高度(像素),只限制不超过该高度并保持长宽比;当未显式传递任何尺寸参数且图片特别大时,服务会自动使用 1920 作为默认上限 | |
| quality | int | 否 | 85 | JPEG 压缩质量,取值范围 1-95 ,数值越低压缩越厉害,推荐在 60-90 之间; PNG 等无损格式将使用内部优化策略忽略该参数 |
| format | string | 否 | 输出图片格式,可选值:jpeg 、png 等;不传则保持原图格式(对于部分不常见格式会自动转换为 JPEG ) |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| HTTP Header.Content-Type | string | 返回图片的 MIME 类型,例如 image/jpeg 、image/png 等 |
| HTTP Header.Content-Disposition | string | 文件下载头,包含建议的下载文件名,默认会根据原始文件名和格式自动生成 |
| Body(Binary) | binary | 压缩后图片的二进制流内容,可直接保存为图片文件或在浏览器中显示 |
教育/高考 融合历年分数线与分段位次特征录取概率模型 AI 预测 / 高考志愿 / 录取概率 AI / 高考 / 高考录取 / 高等教育

接口详情: https://www.gugudata.com/api/details/admission-predict
接口地址: https://api.gugudata.com/ai/admission/predict?appkey={{appkey}}
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/ai/admission/predict?appkey={{appkey}}
数据预览: https://www.gugudata.com/preview/admission-predict
接口测试: https://api.gugudata.com/ai/admission/predict/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY ,可通过 Query (?appkey=) 提供 |
| province | string | 是 | N/A | 考生所在省份,与历年分数线数据保持一致 |
| subject_type | string | 是 | N/A | 科类/选科:理科、文科、物理类、历史类、综合等 |
| score | number | 是 | N/A | 考生裸分( 0-750 ) |
| rank | int | 否 | N/A | 考生全省位次,可为空(为空时结合分段位次推断) |
| batch | string | 否 | 本科批 | 报考批次,目前支持普通本科批次 |
| top_n | int | 否 | 50 | 返回院校数量上限,范围 1-200 |
| include_explanation | bool | 否 | true | 是否返回 SHAP 特征贡献解释 |
| prefer_local | bool | 否 | false | 是否在排序时优先本省院校 |
| college_provinces | array(string) | 否 | N/A | 按院校所在省份过滤,留空则不过滤; Query 方式可多次传值,格式 ["江苏", "上海"] |
| target_colleges | array(string) | 否 | N/A | 指定院校名单,仅对名单内院校预测 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口状态码,100 表示成功 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 返回时间 |
| DataStatus.DataTotalCount | int | 本次返回院校数量 |
| Data.predictions | array | 预测结果列表 |
| Data.predictions[].college_name | string | 院校名称 |
| Data.predictions[].admission_probability | float | 录取概率 (0-1) |
| Data.predictions[].recommendation | string | 梯度建议:录取概率高 / 需要注意梯度,但成功率较高 / 录取概率低 |
| Data.predictions[].evidence | object | 关键信息:recent_3y_min_score 、score_gap 、province_line_gap 、is_985 、is_211 、is_dual_class 、college_rank 等 |
| Data.predictions[].shap_explanation | object | SHAP 解释信息,含 base_probability 、predicted_probability 、top_features |
| Data.meta.total_colleges | int | 返回院校数量 |
| Data.meta.student_score | float | 考生分数 |
| Data.meta.student_province | string | 考生省份 |
| Data.meta.local_colleges | int | 结果中同省院校数量,无 is_local 字段时为 null |
| Data.meta.score_diff_min | float | 分差绝对值最小值 |
| Data.meta.score_diff_median | float | 分差绝对值中位数,用于梯度判断 |
| Data.meta.prefer_local | bool | 是否启用本省优先排序 |
| Data.meta.college_provinces | array(string) | 请求中用于过滤院校省份的列表 |
| Data.meta.model_version | string | 模型版本号 |
| Data.disclaimer | string | 免责声明 |

AI/模型 基于八字命理和五行相生相克理论 十年模型积累 / 三才五格数理 姓名 / 八字命理

接口详情: https://www.gugudata.com/api/details/name-generator
接口地址: https://api.gugudata.com/ai/name-generator?appkey={{appkey}}
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/ai/name-generator?appkey={{appkey}}
数据预览: https://www.gugudata.com/preview/name-generator
接口测试: https://api.gugudata.com/ai/name-generator/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| lastname | string | 是 | 姓氏 | |
| gender | string | 是 | 性别(男/女) | |
| birthdatetime | string | 是 | N/A | 公历出生年月日时,格式:YYYY 年 MM 月 DD 日 HH:MM |
| birthplace | string | 是 | N/A | 出生地点(省市),用于规避可能的谐音 |
| parentnames | string | 否 | 父母姓名(可选,用于亲子音韵搭配) | |
| avoidwords | string | 否 | 可选避用字(可选,多个字用逗号分隔) |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data | object | 接口返回的完整 JSON 数据,包含命盘分析、候选名字清单、最佳推荐、注意事项等所有字段,具体可查看 DEMO 接口 返回数据 |
{ "Data": { "命盘分析摘要": "王姓女婴,生于 2023 年 5 月 12 日 14:30 (癸卯年丁巳月庚午日癸未时)。八字:庚午(日主)、丁巳、癸卯、癸未。日主庚金生于巳月火旺之地,失令;地支巳午未三会火局,火势极旺克金;天干双癸水透出,但水弱难制火。全局火旺土燥,金弱无根,为身弱格局。五行分析:火极旺(官杀),土旺(印星),金弱(日主),水弱(食伤),木休(财星)。喜用神为首选水(调候降温、制火护金),次选土(化火生金)。忌神为火、木。", "候选名字清单": [ { "姓名全称": "王清涵", "汉语拼音": "Wáng Qīnghán", "五行补益分析": "补水(清、涵均属水),水能制火调候,并生助日主庚金", "三才五格分析": "天格 5(土)-人格 16(土)-地格 24(火)-总格 28(金)-外格 13(火)。三才配置:土土火。人格 16 为主运,厚重载德之吉数;总格 28 为磨铁成针之吉数,但地格 24 和外格 13 为火,需注意火旺压力。整体数理吉凶:吉多于凶(评分 92 )", "经典出处": "无特定典籍出处,但清涵取自清泉涵玉之意,符合水象雅韵", "现代寓意解读": "清:清澈高洁;涵:包容涵养。名字寓意女子冰清玉洁、胸怀宽广,音韵柔美流畅" }, { "姓名全称": "王沐瑶", "汉语拼音": "Wáng Mùyáo", "五行补益分析": "补水(沐属水)、补金(瑶属金,金生水助用神),水金相生强化调候", "三才五格分析": "天格 5(土)-人格 13(火)-地格 24(火)-总格 28(金)-外格 16(土)。三才配置:土火火。人格 13 为智略超群之吉数;总格 28 为吉数。但地格 24 火旺,需结合八字注意火势。整体数理吉凶:中吉(评分 91 )", "经典出处": "无", "现代寓意解读": "沐:润泽沐浴;瑶:美玉。名字寓意如沐春风、温润如玉,现代感强且女性化" }, { "姓名全称": "王雨宸", "汉语拼音": "Wáng Yǔchén", "五行补益分析": "补水(雨属水),水为第一用神,直接调候降温", "三才五格分析": "天格 5(土)-人格 13(火)-地格 18(金)-总格 22(木)-外格 11(木)。三才配置:土火金。人格 13 吉;地格 18 金吉,补益日主;总格 22 木为凶数(秋草逢霜),但八字忌木,需谨慎。整体数理吉凶:吉凶参半(评分 90 )", "经典出处": "无", "现代寓意解读": "雨:甘霖;宸:帝王居所。名字寓意天降福泽、尊贵大气,音韵抑扬顿挫" }, { "姓名全称": "王溪然", "汉语拼音": "Wáng Xīrán", "五行补益分析": "补水(溪属水),水制火调候,然字属火但为虚词影响小", "三才五格分析": "天格 5(土)-人格 18(金)-地格 20(水)-总格 24(火)-外格 13(火)。三才配置:土金水。人格 18 金吉,补益日主;地格 20 水吉,助用神;但总格 24 火为忌。整体数理吉凶:中吉(评分 91 )", "经典出处": "无", "现代寓意解读": "溪:溪流;然:自然之态。名字寓意恬静自然、清澈灵动,符合现代简约审美" }, { "姓名全称": "王沁怡", "汉语拼音": "Wáng Qìnyí", "五行补益分析": "补水(沁属水),水为用神;怡属土,土能化火生金,为次用神", "三才五格分析": "天格 5(土)-人格 13(火)-地格 17(金)-总格 21(木)-外格 10(水)。三才配置:土火金。人格 13 吉;地格 17 金吉,补日主;外格 10 水凶(万事终局),但水为用神可化解。整体数理吉凶:吉多于凶(评分 90 )", "经典出处": "无", "现代寓意解读": "沁:渗透滋润;怡:愉悦安然。名字寓意心旷神怡、温婉可人,音韵柔和" } ], "最佳推荐": [ { "姓名": "王清涵", "综合评分": 95, "推荐理由": "五行双水强补用神,数理人格 16 吉、总格 28 吉,音韵平仄协调(阳平-阴平-阳平),无方言不良谐音(检测吴语区:苏州话无歧音),寓意高雅且重名率低" }, { "姓名": "王沐瑶", "综合评分": 93, "推荐理由": "水金相生契合喜用,数理人格 13 智略吉,现代感强,音律优美(阳平-去声-阳平),避用字检查无误" } ], "注意事项": "1. 八字火旺,避免使用火、木属性字(如炎、琳、森等); 2. 地格数理 24 虽为吉数,但属火,需结合名字五行化解; 3. 出生在苏州(吴语区),已检测候选名字无当地方言不良谐音(如王沐瑶在苏州话中无歧义); 4. 所有用字均符合通用规范汉字表一级字库。" } } ]]>文件处理 / 图片处理,将 PPT 文件转换为图片序列。

接口详情: https://www.gugudata.com/api/details/ppt-to-images
接口地址: https://api.gugudata.com/imagerecognition/ppt-to-images?appkey=YOUR_APPKEY
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/imagerecognition/ppt-to-images?appkey=YOUR_APPKEY
数据预览: https://www.gugudata.com/preview/ppt-to-images
接口测试: https://api.gugudata.com/imagerecognition/ppt-to-images/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| file | file | 是 | PPT 文件,支持 .ppt 和 .pptx 格式 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.RequestParameter | string | 请求参数字符串 |
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 转换后的图片总数 |
| Data | array | 转换后的图片 URL 数组,支持永久存储 |
网站工具 将任意网页 URL 转换为 Markdown 格式文本 网页内容提取 / 网页解析 网站工具 / markdown

接口详情: https://www.gugudata.com/api/details/url2markdown
接口地址: https://api.gugudata.com/websitetools/url2markdown
返回格式: application/json; charset=utf-8
请求方式: GET
请求协议: HTTPS
请求示例: https://api.gugudata.com/websitetools/url2markdown?appkey=YOUR_APPKEY&url=https://www.example.com
数据预览: https://www.gugudata.com/preview/url2markdown
接口测试: https://api.gugudata.com/websitetools/url2markdown/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| url | string | 是 | https://www.example.com | 需要转换的网页 URL 地址,必须是有效的 HTTP 或 HTTPS 链接 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data | string | 网页转换后的 Markdown 格式内容 |
图像/转换 将 PPT 文件转换为 PDF 文档 文件转换 / 超高精度与还原度 文件转换 / PDF 。

接口详情: https://www.gugudata.com/api/details/ppt-to-pdf
接口地址: https://api.gugudata.com/imagerecognition/ppt-to-pdf?appkey={{YOUR_APPKEY}}
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/imagerecognition/ppt-to-pdf?appkey={{YOUR_APPKEY}}
数据预览: https://www.gugudata.com/preview/ppt-to-pdf
接口测试: https://api.gugudata.com/imagerecognition/ppt-to-pdf/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| file | file | 是 | PPT 文件,支持 .ppt 和 .pptx 格式 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.RequestParameter | string | 请求参数字符串 |
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| Data | string | 转换后的 PDF 文件下载 URL ,支持永久存储 |
目前好用的邮箱服务,带短信通知的有哪些?收费和付费都可以。目前查到 139 邮箱可以,但是限制移动号码。
]]>
接口详情: https://www.gugudata.com/api/details/global-university-ranking
接口地址: https://api.gugudata.com/metadata/global-university-ranking
返回格式: application/json; charset=utf-8
请求方式: GET
请求协议: HTTPS
数据预览: https://www.gugudata.com/preview/global-university-ranking
接口测试: https://api.gugudata.com/metadata/global-university-ranking/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| name | string | 否 | 学校名称,支持模糊搜索,不传则返回所有数据 | |
| pageindex | int | 否 | 1 | 分页参数,第几页,默认值为 1 |
| pagesize | int | 否 | 10 | 分页参数,每页条数,取值范围在 1 ~ 20 之间(含) |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.RequestParameter | string | 请求参数字符串 |
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data.Id | string | 咕咕数据平台大学唯一标识 |
| Data.UniversityName | string | 大学名称 |
| Data.Region | string | 所在地区 |
| Data.Country | string | 所在国家 |
| Data.City | string | 所在城市 |
| Data.LogoUrl | string | 大学 Logo 图片地址 |
| Data.Rank | string | 综合排名 |
| Data.AcademicReputationRank | string | 学术声誉排名 |
| Data.AcademicReputationScore | string | 学术声誉得分 |
| Data.CitationsPerFacultyRank | string | 每名教师的引用率排名 |
| Data.CitationsPerFacultyScore | string | 每名教师的引用率得分 |
| Data.FacultyStudentRatioRank | string | 师生比例排名 |
| Data.FacultyStudentRatioScore | string | 师生比例得分 |
| Data.EmployerReputationRank | string | 雇主声誉排名 |
| Data.EmployerReputationScore | string | 雇主声誉得分 |
| Data.EmploymentOutcomesRank | string | 就业成果排名 |
| Data.EmploymentOutcomesScore | string | 就业成果得分 |
| Data.InternationalStudentRatioRank | string | 国际学生比例排名 |
| Data.InternationalStudentRatioScore | string | 国际学生比例得分 |
| Data.InternationalResearchNetworkRank | string | 国际研究网络排名 |
| Data.InternationalResearchNetworkScore | string | 国际研究网络得分 |
| Data.InternationalFacultyRatioRank | string | 国际教师比例排名 |
| Data.InternationalFacultyRatioScore | string | 国际教师比例得分 |
| Data.SustainabilityRank | string | 可持续发展排名 |
| Data.SustainabilityScore | string | 可持续发展得分 |
AI / 八字命理 基于八字命理分析 命理分析 / 八字运势。

接口详情: https://www.gugudata.com/api/details/bazi-fortune-teller
接口地址: https://api.gugudata.com/ai/bazi-fortune-teller?appkey={{appkey}}
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/ai/bazi-fortune-teller?appkey={{appkey}}
数据预览: https://www.gugudata.com/preview/bazi-fortune-teller
接口测试: https://api.gugudata.com/ai/bazi-fortune-teller/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | 付费后获取的 APPKEY | |
| userinfo | string | 是 | N/A | 用户输入的个人信息,包括性别、公历或者农历出生日期及出生时间 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.RequestParameter | string | 请求的参数 |
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| Data.八字 | string | 八字排盘结果 |
| Data.五行 | string | 五行属性分析 |
| Data.命宫 | string | 命宫信息 |
| Data.身宫 | string | 身宫信息 |
| Data.大运 | array | 每个阶段的大运信息,包括起始年份、终止年份和运势名称 |
| Data.运势分析 | object | 学业、婚姻、财运、健康、体貌特征及关键事件分析 |
| Data.综合评价 | string | 总体运势评价 |
网站工具 / 截图 高效生成网页截图 生成网页截图 / 图片输出。

接口详情: https://www.gugudata.com/api/details/url2image
接口地址: https://api.gugudata.com/websitetools/url2image
返回格式: application/json; charset=utf-8
请求方式: GET
请求协议: HTTPS
数据预览: https://www.gugudata.com/preview/url2image
接口测试: https://api.gugudata.com/websitetools/url2image/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| url | string | 是 | YOUR_VALUE | 需要截取的网页 URL 地址 |
| width | int | 否 | 250 | 输出截图的宽度,默认值为 250 |
| height | int | 否 | 250 | 输出截图的高度,默认值为 250 |
| viewportwidth | int | 否 | 1080 | 渲染视窗的宽度,默认值为 1080 |
| viewportheight | int | 否 | 1080 | 渲染视窗的高度,默认值为 1080 |
| forcereload | boolean | 否 | false | 强制重新加载缓存的图片,默认值为 false |
| ismobile | boolean | 否 | false | 是否以移动设备的 User Agent 渲染,默认值为 false |
| isfullpage | boolean | 否 | false | 是否截取整个页面而非视窗裁剪,默认值为 false |
| isdarkmode | boolean | 否 | false | 是否优先采用深色模式,默认值为 false |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data | string | 生成的截图图片流,可直接用于展示 |
网站工具 / HTML 高效转换 URL 到静态 HTML 生成静态 HTML 站点 / 永久存储。

支持非 SPA 网站内容转换; 超高的还原度与转换性能; 站点资源压缩到一个单一的文件; 输出 HTML 文件永久 CDN 存储地址; 输出可直接访问的 HTML 站点文件;
接口详情: https://www.gugudata.com/api/details/url2html
接口地址: https://api.gugudata.com/websitetools/url2html
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/websitetools/url2html
数据预览: https://www.gugudata.com/preview/url2html
接口测试: https://api.gugudata.com/websitetools/url2html/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| url | string | 是 | YOUR_VALUE | 需要转换的网页 URL 地址,注意 SPA 类站点可能有获取不到页面内容的情况 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data | string | 生成的 HTML 文件 CDN 地址 |
文件处理 / PDF 高效 PDF 转 HTML 工具 生成 HTML 站点 / 可永久存储。

接口详情: https://www.gugudata.com/api/details/pdf2html
接口地址: https://api.gugudata.com/imagerecognition/pdf2html?appkey={{appkey}}
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/imagerecognition/pdf2html?appkey={{appkey}}
数据预览: https://www.gugudata.com/preview/pdf2html
接口测试: https://api.gugudata.com/imagerecognition/pdf2html/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| file | file | 是 | YOUR_VALUE | formdata 文件流 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data | string | 生成的 HTML 文件 CDN 地址 |
比如输入 {"https://ooo.0x0.ooo/2024/10/28/OD3TzB.png", "发布按钮"}
返回 (517,880)
]]>支持网页转 PDF 。

API 详情地址: https://www.gugudata.com/api/details/html2pdf
接口请求地址: https://api.gugudata.com/imagerecognition/html2pdf
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/imagerecognition/html2pdf
数据预览: https://www.gugudata.com/preview/html2pdf
接口测试: https://api.gugudata.com/imagerecognition/html2pdf/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| type | string | 是 | YOUR_VALUE | 可选参数为 HTML 或 URL |
| content | string | 是 | YOUR_VALUE | 内容正文,如果 type=HTML ,那么传递 HTML 内容;如果 type=URL ,那么传递需要存储为 PDF 的站点 URL 即可 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data | string | 转换后的 PDF 永久链接 |
基于 AI 的相似度评估,专有 AI 模型,包含评估详情 。

接口详情: https://www.gugudata.com/api/details/exam-question-similarity
接口地址: https://api.gugudata.com/education/exam-question-similarity
返回格式: application/json; charset=utf-8
请求方式: POST
请求协议: HTTPS
请求示例: https://api.gugudata.com/education/exam-question-similarity
数据预览: https://www.gugudata.com/preview/exam-question-similarity
接口测试: https://api.gugudata.com/education/exam-question-similarity/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| exam1 | string | 是 | 第一个考试题目或段落的文本 | |
| exam2 | string | 是 | 第二个考试题目或段落的文本,用于与第一个进行相似度比较 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| Data.score | number | 两个考试题目或段落之间的相似度分数,范围为 0 - 10 ,精度为小数点后两位,如 0.85 ,10 为完全相同 |
| Data.analysis_result | string | 相似度分析结果描述 |
基础数据 / 高校招生,各高校历年招生计划数据,高校招生数据 / 历年计划。

接口详情: https://www.gugudata.com/api/details/collegeenrollmentplan
接口地址: https://api.gugudata.com/metadata/college-enrollment-plan
返回格式: application/json; charset=utf-8
请求方式: GET
请求协议: HTTPS
数据预览: https://www.gugudata.com/preview/collegeenrollmentplan
接口测试: https://api.gugudata.com/metadata/college-enrollment-plan/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| collegemajorname | string | 否 | 查询的高校专业名称,支持模糊查询 | |
| year | int | 否 | 查询的招生年份,如 2020 、2021 、2022 、2023 。参数默认值为 0:即获取所有年份的招生计划数据 | |
| pageindex | int | 是 | 1 | 分页参数,第几页 |
| pagesize | int | 是 | 10 | 分页参数,每页总条数,取值范围在 10 ~ 100 之间(含) |
| schoolname | string | 否 | 查询的高校名称,支持模糊查询 | |
| provincename | string | 否 | 查询的招生省份 | |
| classone | string | 否 | 查询的专业大类 | |
| classtwo | string | 否 | 查询的专业小类 | |
| batchname | string | 否 | 录取批次参数,可选枚举值请参考 Data.AdmissionBatch 返回值枚举 | |
| type | string | 否 | 传递的参数值可选为:理科|文科|综合|艺术类|体育类|体育理|蒙授理科|艺术文|体育文|汉授美术|蒙授文科|学考文|学考理|艺术理|汉授音乐|汉授体育|其他艺术|汉授编导|蒙授音乐|蒙授体育|蒙授美术|旅游类|计算机类|3+证书|蒙授其他艺术|农学类|财会类|牧医类|蒙牧医类|美工设计类|汽驾类|幼师类|建筑类|烹饪类 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data.InSchoolYears | string | 学制年限 |
| Data.ClassOne | string | 专业大类 |
| Data.ClassTwo | string | 专业小类 |
| Data.BatchName | string | 录取批次 |
| Data.Type | string | 文理综合类别 |
| Data.SchoolName | string | 高校名称 |
| Data.EnrollmentNumbers | int | 招生人数 |
| Data.SchoolUUID | string | 咕咕数据平台高校唯一 ID |
| Data.CourseSelectionRequirements | string | 选科要求 |
| Data.CollegeMajorName | string | 高校专业名称 |
| Data.Year | int | 招生年份 |
| Data.ProvinceName | string | 招生省份 |
但是 这时分发 jwt 的接口。怎么避免一直被搞?
想把异常请求直接拦截到外面,尽量不让异常请求落地到服务器上。
目前是套了腾讯云的 cdn 当反代用,不缓存每次都回源。cdn 上限制的单 ip qps (阿里云那边好像只能用 WAF 有点复杂..),还有别的办法不?
已登陆用户 的接口走了阿里云的函数计算,用的函数计算的 jwt 认证。 异常请求,直接在 redis 建了一个黑名单,再通知 jwt 分发接口禁止新发,等 jwt 失效就噶掉。
]]>各位大佬们,要是有知道提供 API 网站的麻烦告知一下小弟,付费和免费的都行,谢谢大佬们了。。。
]]>欢迎使用全国大学高校专业数据 API 接口!我们为您提供全面的大学专业基础数据,持续更新,覆盖各类专业属性。无论您是教育机构、学术研究者还是开发者,我们的 API 接口都能满足您的需求。

https://www.gugudata.com/api/details/ceemajor
https://api.gugudata.com/metadata/ceemajor
application/json; charset=utf-8
GET
HTTPS
https://www.gugudata.com/preview/ceemajor
以下是接口的请求参数及其说明:
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| keywords | string | 否 | YOUR_VALUE | 搜索关键字,可以模糊匹配专业名称、学科、专业介绍、开设课程。参数值为空则返回所有数据分页 |
| pagesize | int | 否 | 10 | 每页数据量,最大值为 20 |
| pageindex | int | 否 | 1 | 页码,从 1 开始计数 |
以下是接口的返回参数及其说明:
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data.EducationLevel | string | 学历层次 |
| Data.DisciplinaryCategory | string | 学科门类 |
| Data.DisciplinarySubCategory | string | 学科专业类 |
| Data.MajorCode | string | 专业代码 |
| Data.MajorName | string | 专业名称 |
| Data.MajorIntroduction | string | 专业介绍 |
| Data.Courses.CourseName | string | 开设课程名称 |
| Data.Courses.CourseDifficulty | string | 开设课程难度 |
| Data.GraduateScale | string | 全国普通高校毕业生规模(概略数据) |
| Data.MaleFemaleRatio | string | 男女比例(概略数据) |
| Data.RecommendSchools | string[] | 推荐院校列表 |
我想问下文本翻译 API 限频改了么?我在几秒内调用七八次就返回错误了? 叶子 ✨ ✨ ✨ 09:58:27 实名认证 呜喵 09:58:44 好吧,都没提醒说没实名限频 叶子 ✨ ✨ ✨ 10:01:46 你一注册时候不就有实名认证的提示嘛? 呜喵 10:02:00 没,可能我注册的比较早 叶子 ✨ ✨ ✨ 10:02:27 哦 那就认证下吧 你现在登录控制台肯定会有提示的 呜喵 10:02:30 还是限制了 叶子 ✨ ✨ ✨ 10:02:55 认证完成之后 还需要除体验金之外有余额的哈 呜喵 10:03:05 [表情] 呜喵 10:03:15 要多少余额 呜喵 10:04:21 余额充值有要求么?我看一分钱起充? 叶子 ✨ ✨ ✨ 10:06:09 你要让我说的话 那肯定是多多益善啊 哈哈哈 叶子 ✨ ✨ ✨ 10:06:28 根据你的需求啊 你需要量比较大 可以多充值点 量少可以少充值一些 呜喵 10:06:51 问题是,我充值了一分钱依然没解决,是不是有充值余额要求?能帮我问下么? 呜喵 10:07:06 " 叶子 ✨ ✨ ✨ 10:06:28 根据你的需求啊 你需要量比较大 可以多充值点 量少可以少充值一些 " @叶子 ✨ ✨ ✨ 我实际连体验金都用不完 呜喵 10:07:22 但是现在调用 api 频率实在是太低了 叶子 ✨ ✨ ✨ 10:12:25 你冲了一分钱没解决你还可以试试多充值点啊 叶子 ✨ ✨ ✨ 10:12:29 让我问啥 呜喵 10:12:51 …..你这话有点像无良奸商有没有 叶子 ✨ ✨ ✨ 10:13:09 呵呵 那就是吧 前两天还和朋友说有道 API 真良心,送的钱都用不完。实际上我目前是 Alfred 自用。我不介意充值 100 ,虽然可能这辈子都用不完。但是文档没说明,客服一副拽死的态度,我是觉得略微懵逼。
有解决过这个问题的老哥么?告诉我得冲多少?
]]>Authing 是国内首款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务。以「 API First 」作为产品基石,把身份领域所有常用功能都进行了模块化的封装,通过全场景编程语言 SDK 将所有能力 API 化提供给开发者。同时,用户可以灵活的使用 Authing 开放的 RESTful APIs 进行功能拓展,满足不同企业不同业务场景下的身份和权限管理需求。
Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 不仅支持插件动态变更和热插拔,而且拥有众多实用的插件。Apache APISIX 的 OpenID Connect 插件支持 OpenID Connect 协议,用户可以使用该插件让 Apache APISIX 对接 Authing 服务,作为集中式认证网关部署于企业中。
通过 Authing 权限管理 + APISIX 实现 API 的访问控制
本文所涉及到的代码已经上传到 Github
Python 插件: https://github.com/fehu-asia/authing-apisix-python-agent
Java Adapter: https://github.com/fehu-asia/authing-apisix-java-adapter
Java 插件: https://github.com/fehu-asia/authing-apisix-java-agent

系统整体包含了三大部分:Authing 服务集群、Authing 插件适配服务以及 APISIX 网关,本方案建立需要配置和开发的部分有四个部分,Authing API 权限结构配置、APISIX 插件和路由配置、APISIX 插件开发部署以及业务适配服务开发,其中业务适配服务包含了认证和授权的主要逻辑(使用单独服务承载),避免了插件的频繁更新和部署。
这里需要说明的是,之所以采用 Adapter 的方式来实现,是因为插件我们并不希望经常变动,但需求可能是无法避免的需要经常变动,所以我们将具体的鉴权逻辑放在 Adapter ,插件只实现请求转发和根据 Adapter 的返回结果决定是否放行,同时无状态的插件可以让我们实现更多的场景复用和能力扩展,例如进行鉴权结果的缓存实现,后续只需维护 Adapter 即可。
当然我们也可将具体的逻辑放在插件里。
注意,本教程只用于与 APISIX 和 Authing 进行集成,对于生产环境使用,您需要自行开发插件并保证其安全性及可用性等,本文档不承诺此插件可以用于生产环境。
git clone https://github.com/apache/apisix-docker.git cd apisix-docker/example docker-compose -p docker-apisix up -d 到这里可以使用 docker ps 查看 apisix docker 进程启动状态, 随后访问 localhost:9000 可以进入 dashboard 界面进行路由和插件的配置。 
登录 Authing 官网:www.authing.com ,进行以下操作:

配置 Token 签名算法为 RS256 及校验 AccessToken 的方式为 none 。

进入 Authing 控制台-用户管理-用户列表-点击创建用户后,可以根据不同方式(用户名、手机号、邮箱)创建测试用户,如下图所示:

进入 Authing 控制台-权限管理-创建资源,可以选择创建树数据类型的资源,如下图所示:

进入权限管理-数据资源权限-数据策略标签,可以点击创建策略来新建数据访问策略,如下图所示。策略包含了对应的权限空间中定义的数据以及操作,创建后能够基于此策略对不同对象(用户、角色、用户组等)进行授权管理。



APISIX 使用 unix sock 与插件进程通信,因此需要配置对应的 sock 端口:
需要将宿主机上的 sock 文件挂载到容器里,插件启动的时候会在宿主机上创建这个 sock 文件,此处需要注意的是,若 APISIX 是先于插件启动的,当插件启动后,则需要重启下 APISIX 容器,确保插件先于 APISIX 启动。
文件位置: /apisix-docker/example/docker-compose.yml apisix 部分
apisix: image: apache/apisix:latest restart: always volumes: - ./apisix_log:/usr/local/apisix/logs - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro - /tmp/runner.sock:/tmp/runner.sock X-API-KEY: /apisix/apisix-docker/example/apisix_conf/config.yaml

curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/*", "plugins": { "ext-plugin-pre-req": { "conf": [ { "name": "authing_agent", "value": "{\"url\": \"{适配服务的访问地址}\",\"user_pool_id\": \"{用户池 ID}\",\"user_pool_secret\": \"{用户池密钥}\"}" } ] } }, "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } } }' ext-plugin-pre-req 是需要启用的插件类型, 在配置 conf 中需要确定两个变量:
"name": 插件名称
"value": "{"url": "适配服务的访问地址","user_pool_id": "用户池 ID","user_pool_secret": "用户池密钥"}"
其中,访问地址格式为 {{domain}}:{{port}}/{{path}}
例如: "{"url": "http://192.168.1.123:8080/isAllow","user_pool_id": "124u2353h2t24he2u349382u152","user_pool_secret": "6435462313i5412njburh2u34"}"
git clone https://github.com/apache/apisix-python-plugin-runner.git 进入目录 make setup 进入目录 make install 进入目录并修改 apisix/plugins/rewrite.py 文件,将请求参数传递到 Authing
可使用其他语言实现例如 Java 、Go 、Lua
之所以采用 Python 的原因是因为环境初始化比较简单,可以让开发者快速了解 APISIX 的插件的开发机制。
https://apisix.apache.org/docs/apisix/external-plugin/
from typing import Any from apisix.runner.http.request import Request from apisix.runner.http.response import Response from apisix.runner.plugin.core import PluginBase import json import requests import json def isAllow(request,config): return requests.request("POST", config.get("url"), headers={ 'Content-Type': 'application/json' }, data=json.dumps({ "request": request, "pluginConfig": config })) class Rewrite(PluginBase): def name(self) -> str: return "authing_agent" def config(self, conf: Any) -> Any: return conf def filter(self, conf: Any, request: Request, response: Response): # 组装 Adapter 请求参数 authing_request = { "uri": request.get_uri(), "method": request.get_method(), "args":request.get_args(), "headers":request.get_headers(), "request_id":request.get_id(), "host":request.get_var("host"), "remote_addr": request.get_remote_addr(), "configs": request.get_configs() } # 接收 Adapter 响应判断是否放行 authing_respOnse= isAllow(authing_request,eval(conf)) if authing_response.text != "ok": response.set_status_code(authing_response.status_code) response.set_body(authing_response.text) nohup make dev & #后台运行 agent 程序 启动代理 Authing 服务(自行实现对应接口,以 springboot 为例,接口结构如下)

IsAllowController.java
package cn.authing.apisix.adapter.controller; import cn.authing.apisix.adapter.entity.APISIXRquestParams; import cn.authing.sdk.java.client.ManagementClient; import cn.authing.sdk.java.dto.CheckPermissionDto; import cn.authing.sdk.java.dto.CheckPermissionRespDto; import cn.authing.sdk.java.dto.CheckPermissionsRespDto; import cn.authing.sdk.java.model.ManagementClientOptions; import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpUtil; import com.google.gson.Gson; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.JWSObject; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.jwk.source.RemoteJWKSet; import com.nimbusds.jose.proc.BadJOSEException; import com.nimbusds.jose.proc.JWSKeySelector; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; import com.nimbusds.jwt.JWTClaimsSet; import com.nimbusds.jwt.proc.ConfigurableJWTProcessor; import com.nimbusds.jwt.proc.DefaultJWTProcessor; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StopWatch; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.net.MalformedURLException; import java.net.URL; import java.text.ParseException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Gao FeiHu * @version 1.0.0 * @date 2022.12.22 * @email gaofeihu@authing.cn */ @RestController @Slf4j public class IsAllowController { /** * 用户池 ID */ public static String ACCESS_KEY_ID = ""; /** * 用户池密钥 */ public static String ACCESS_KEY_SECRET = ""; /** * Authing SDK * See * https://docs.authing.cn/v3/reference/ */ ManagementClient managementClient; /** * 初始化 ManagementClient * * @param ak 用户池 ID * @param aks 用户池密钥 */ public void init(String ak, String aks) { log.info("init ManagementClient ......"); try { // 保存用户池 ID 和密钥 ACCESS_KEY_ID = ak; ACCESS_KEY_SECRET = aks; // 初始化 ManagementClientOptions optiOns= new ManagementClientOptions(); options.setAccessKeyId(ak); options.setAccessKeySecret(aks); managementClient = new ManagementClient(options); } catch (Exception e) { e.printStackTrace(); System.err.println("初始化 managementClient 失败,可能无法请求!"); } } /** * 是否放行 * * @param apisixRquestParams 请求 body ,包含了 APISIX 插件的配置以及请求上下文 * @param response HttpServletResponse * @return 200 OK 放行 * 403 forbidden 禁止访问 * 500 internal server error 请求错误 可根据实际需求放行或拒绝 */ @PostMapping("/isAllow") public Object isAllow(@RequestBody APISIXRquestParams apisixRquestParams, HttpServletResponse response) { // 请求计时器 StopWatch stopWatch = new StopWatch(); stopWatch.start(); // 请求 ID 与 APISIX 一致 String requestID = apisixRquestParams.getRequest().getRequest_id(); log.info("{} ==> 请求入参 : {} ", requestID, new Gson().toJson(apisixRquestParams)); try { // 0. 若插件为多实例用于实现不同业务逻辑,此处可对应修改为多实例模式 if (managementClient == null || !ACCESS_KEY_ID.equals(apisixRquestParams.getPluginConfig().get("user_pool_id"))) { init((String) apisixRquestParams.getPluginConfig().get("user_pool_id"), (String) apisixRquestParams.getPluginConfig().get("user_pool_secret")); } // 1. 拿到 accessToken String authorization = (String) apisixRquestParams.getRequest().getHeaders().get("authorization"); if (!StringUtils.hasLength(authorization)) { return result(response, stopWatch, requestID, HttpStatus.HTTP_UNAUTHORIZED, "HTTP_UNAUTHORIZED"); } String accessToken = authorization; if (authorization.startsWith("Bearer")) { accessToken = authorization.split(" ")[1].trim(); } log.info("{} ==> accessToken : {} ", requestID, accessToken); // 2. 解析 accessToken 拿到应用 ID 和用户 ID JWSObject parse = JWSObject.parse(accessToken); Map<String, Object> payload = parse.getPayload().toJSONObject(); String aud = (String) payload.get("aud"); String sub = (String) payload.get("sub"); // 3. 校验 accessToken // 在线校验 String result = onlineValidatorAccessToken(accessToken, aud); log.info("{} ==> accessToken 在线结果 : {} ", requestID, result); if (!result.contains("{\"active\":true")) { return result(response, stopWatch, requestID, HttpStatus.HTTP_UNAUTHORIZED, "HTTP_UNAUTHORIZED"); } // // 离线校验 // if (null == offlineValidatorAccessToken(accessToken, aud)) { // return result(response, stopWatch, requestID, HttpStatus.HTTP_UNAUTHORIZED, "HTTP_UNAUTHORIZED"); // } // 4. 获取到 APISIX 中的请求方法,对应 Authing 权限中的 action String action = apisixRquestParams.getRequest().getMethod(); // 5. 获取到 APISIX 中的请求路径 String resource = apisixRquestParams.getRequest().getUri(); // 6. 去 Authing 请求,判断是否有权限 // TODO 可在此添加 Redis 对校验结果进行缓存 CheckPermissionDto reqDto = new CheckPermissionDto(); reqDto.setUserId(sub); reqDto.setNamespaceCode(aud); reqDto.setResources(Arrays.asList(resource.substring(1, resource.length()))); reqDto.setAction(action); CheckPermissionRespDto checkPermissiOnRespDto= managementClient.checkPermission(reqDto); log.info(new Gson().toJson(checkPermissionRespDto)); // 7. 由于我们是单个 resource 校验,所以只需要判断第一个元素即可 List<CheckPermissionsRespDto> resultList = checkPermissionRespDto.getData().getCheckResultList(); if (resultList.isEmpty() || resultList.get(0).getEnabled() == false) { return result(response, stopWatch, requestID, HttpStatus.HTTP_FORBIDDEN, "HTTP_FORBIDDEN"); } return result(response, stopWatch, requestID, HttpStatus.HTTP_OK, "ok"); } catch (Exception e) { e.printStackTrace(); log.error("请求错误!", e); return result(response, stopWatch, requestID, HttpStatus.HTTP_INTERNAL_ERROR, e.getMessage()); } } public String result(HttpServletResponse response, StopWatch stopWatch, String requestID, int status, String msg) { stopWatch.stop(); log.info("{} ==> 请求耗时:{} , 请求出参 : http_status_code={},msg={} ", requestID, stopWatch.getTotalTimeMillis() + "ms", status, msg); response.setStatus(status); return msg; } public String onlineValidatorAccessToken(String accessToken, String aud) { HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("token", accessToken); paramMap.put("token_type_hint", "access_token"); paramMap.put("client_id", aud); return HttpUtil.post("https://api.authing.cn/" + aud + "/oidc/token/introspection", paramMap); } public JWTClaimsSet offlineValidatorAccessToken(String accessToken, String aud) { try { ConfigurableJWTProcessor<SecurityContext> jwtProcessor = new DefaultJWTProcessor<>(); JWKSource<SecurityContext> keySource = null; keySource = new RemoteJWKSet<>(new URL("https://api.authing.cn/" + aud + "/oidc/.well-known/jwks.json")); JWSAlgorithm expectedJWSAlg = JWSAlgorithm.RS256; JWSKeySelector<SecurityContext> keySelector = new JWSVerificationKeySelector<>(expectedJWSAlg, keySource); jwtProcessor.setJWSKeySelector(keySelector); return jwtProcessor.process(accessToken, null); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (BadJOSEException e) { e.printStackTrace(); } catch (JOSEException e) { e.printStackTrace(); } finally { return null; } } } APISIXRquestParams.java
package cn.authing.apisix.adapter.entity; import lombok.Data; import lombok.ToString; import java.util.Map; /** * APISIX 请求实体类 */ @Data @ToString public class APISIXRquestParams { /** * APISIX 请求上下文 */ APISIXRequest request; /** * 插件配置 */ Map<String, Object> pluginConfig; } APISIXRequest.java
package cn.authing.apisix.adapter.entity; import lombok.Data; import lombok.ToString; import java.util.Map; @Data @ToString public class APISIXRequest { private String uri; private String method; private String request_id; private String host; private String remote_addr; private Map<String, Object> args; private Map<String, Object> headers; private Map<String, Object> configs; } 


404 是因为上游服务没有这个接口,但认证和 API 鉴权已经通过
如果您需要对 API 进行细颗粒度的管理可以通过本方案来实现,我们可以在 Adapter 实现更加细粒度的 API 访问控制以及更加场景化的权限方案。
]]>Authing 是国内首款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务。以「 API First 」作为产品基石,把身份领域所有常用功能都进行了模块化的封装,通过全场景编程语言 SDK 将所有能力 API 化提供给开发者。同时,用户可以灵活的使用 Authing 开放的 RESTful APIs 进行功能拓展,满足不同企业不同业务场景下的身份和权限管理需求。
Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 不仅支持插件动态变更和热插拔,而且拥有众多实用的插件。Apache APISIX 的 OpenID Connect 插件支持 OpenID Connect 协议,用户可以使用该插件让 Apache APISIX 对接 Authing 服务,作为集中式认证网关部署于企业中。
通过 Authing 权限管理 + APISIX 实现 API 的访问控制。
案例:我们希望用户在 Authing 进行认证后访问到被授权的 API 。 ( https://console.authing.cn/api/v2/get_console_context )
注意,本教程只用于与 APISIX 和 Authing 进行集成测试。后续我们将发布《 Authing 结合 APISIX 实现统一可配置 API 权限网关(插件开发版)》。

需要自行提前安装,docker 和 docker-compose 。
wget https://raw.githubusercontent.com/fehu-asia/authing-apisix-docker-compose/main/apisix-authing.tgz --no-check-certificate tar -zxvf apisix-authing.tgz -C / && cd /apisix && docker-compose -p docker-apisix up -d 到这里可以使用 docker ps 查看 apisix docker 进程启动状态, 随后访问 {your server IP}:9000 可以进入 dashboard 界面进行路由和插件的配置。

Authing 官网:www.authing.com 。或点击文章底部阅读原文。

配置 Token 签名算法为 RS256 及校验 AccessToken 的方式为 none 。

进入 Authing 控制台-用户管理-用户列表-点击创建用户后,可以根据不同方式(用户名、手机号、邮箱)创建测试用户,如下图所示:

进入 Authing 控制台-权限管理-创建资源,可以选择创建树数据类型的资源,如下图所示:



添加相关操作,这里我们的操作对应 HTTP 的请求方法:

进入权限管理-数据资源权限-数据策略标签,可以点击创建策略来新建数据访问策略,如下图所示。策略包含了对应的权限空间中定义的数据以及操作,创建后能够基于此策略对不同对象(用户、角色、用户组等)进行授权管理。



在 APISIX 宿主机上执行。
注意,需要替换请求参数中的用户池 ID 以及密钥。
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/*", "name": "authing_router", "plugins": { "ext-plugin-pre-req": { "allow_degradation": false, "conf": [ { "name": "authing_agent", "value": "{\"url\": \"http://authing-adapter:18080/isAllow\",\"user_pool_id\": \"{用户池 ID}\",\"user_pool_secret\": \"{用户池密钥}\"}" } ], "disable": false } }, "upstream": { "nodes": [ { "host": "console.authing.cn", "port": 443, "weight": 1 } ], "timeout": { "connect": 6, "send": 6, "read": 6 }, "type": "roundrobin", "scheme": "https", "pass_host": "node", "keepalive_pool": { "idle_timeout": 60, "requests": 1000, "size": 320 } }, "status": 1 }' upstream 我们在这里使用的是 httpbin.org ,httpbin.org 是一个简单的在线提供 HTTP 服务的网站,您可以将其用于测试,您也可以将其修改为自己的实际 API 服务地址。
X-API-KEY 所在位置:/apisix/apisix_conf/config.yaml
若您修改了此字段则需要在 curl 请求中进行修改:

目标:当用户认证并携带有效的 AccessToken 且访问的 uri 是被授权的,方可正常调用 API 。
让我们先去 Authing 的应用进行认证,获取被授权用户的 accessToken 。


复制这个 access_token 接下来测试会用到。


curl --location --request GET 'http://{服务器 IP}:9080/xxxx' 
curl --location --request GET 'http://{服务器 IP}:9080/xxxx' \ --header 'Authorization: Bearer {accessToken}' 
curl --location --request GET 'http://{服务器 IP}:9080/api/v2/get_console_context' \ --header 'Authorization: Bearer {accessToken}' 在此方案基础上我们也可以实现统一的安全审计、用户行为轨迹分析、用户访问风险评估等,用以实现全链路 API 访问治理。
]]>因为 ERP 这边有要求不要直接对接其他系统,中间件需要做一些接口的数据转换加工工作,求推荐点技术思路。。
最好是 Java 或者 Python 的
]]>文档链接: https://api-ltc1.doc.coding.io/
有疑问或者问题可以发评论区
]]>提供全国大学高校基础信息。

API 详情地址: https://www.gugudata.com/api/details/college
接口请求地址: https://api.gugudata.com/location/college
返回格式: application/json; charset=utf-8
请求方式: GET
请求协议: HTTPS
接口测试: https://api.gugudata.com/location/college/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| keywords | string | 是 | YOUR_VALUE | 搜索关键字,模糊匹配高校名称、省市区、高校旧称、地址字段,参数值为空则返回所有数据 |
| pagesize | int | 否 | 10 | 每页数据量,参数最大值为 100 |
| pageindex | int | 否 | 1 | 页码,第几页数据 |
| keywordstrict | string | 否 | false | 控制 keyword 参数在查询时是否进行模糊查询,true 为精确匹配高校名称,默认值为 false 进行模糊查询 |
| collegecategory | string | 否 | 学院类别,参数默认值为空,不进行筛选。可选参数为:理工类|综合类|师范类|财经类|医药类|艺术类|农林类|军事类|政法类|语言类|体育类|民族类|其它 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| Data.SchoolUUID | string | 咕咕数据平台高校唯一 ID ,此唯一 ID 可与 历年高考高校录取分数线、历年高考专业录取分数线 接口中的 SchoolUUID 进行唯一匹配 |
| Data.CollegeName | string | 学院名称 |
| Data.Province | string | 学院所在省份 |
| Data.City | string | 学院所在城市 |
| Data.District | string | 学院所在区县 |
| Data.Coordinate | string | 学院地理坐标经纬度,格式为 [经度,纬度],地理坐标系为 GCJ-02 。需要转换坐标系请调用地理坐标系转换接口 |
| Data.CollegeType | string | 学院性质,值的枚举为: 普通本科|独立学院|专科(高职)|高职高专|中外合作办学|成人教育|HND 项目|远程教育学院|其它 |
| Data.Is985 | bool | 是否为 985 院校 |
| Data.Is211 | bool | 是否为 211 院校 |
| Data.IsDualClass | bool | 是否为双一流院校 |
| Data.CollegeCategory | string | 学院类别,值的枚举为: 综合类|理工类|师范类|财经类|医药类|艺术类|农林类|军事类|政法类|语言类|体育类|民族类|其它 |
| Data.CollegeTags | string[] | 学院标签 |
| Data.EduLevel | string | 学院学制,值的枚举为: 普通本科|本科|专科(高职)|专科|其它 |
| Data.CollegeProperty | string | 学院资质,值的枚举为: 公办|民办|中外合作办学 |
| Data.CollegeCode | string | 学院编号 |
| Data.Ranking | int | 全国排名,接口返回的数据结果默认按照此数值进行升序排列 |
| Data.RankingInCategory | string | 学院所在类别下排名 |
| Data.WebSite | string | 学院官网 |
| Data.CallNumber | string | 学院招生电话 |
| Data.Email | string | 学院招生邮箱 |
| Data.Address | string | 学院地址 |
| Data.CoverImage | string | 学院校徽 |
| Data.Intro | string | 学院简介 |
| Data.Expenses | string | 学院收费(仅供参考) |
| Data.OldName | string | 学院旧称 |
| Data.ShortName | string | 学院简称 |
| Data.MajorList.MajorTitle | string | 开设专业大类 |
| Data.MajorList.Majors | string[] | 此大类下开设的专业 |
| 状态码 | 状态码解释 | 备注 |
|---|---|---|
| 200 | 接口正常响应 | 业务状态码参见下方 接口自定义状态码 |
| 403 | 请求频率超限 | CDN 层通过 IP 请求频率智能判断,一般的高频请求不会触发此状态码 |
| 状态码 | 状态码解释 | 备注 |
|---|---|---|
| 100 | 正常返回 | 可通过判断此状态码断言接口正常返回 |
| -1 | 请求失败 | 请求处理请求失败 |
| 501 | 参数错误 | 请检查您传递的参数个数以及参数类型是否匹配 |
| 502 | 请求频率受限 | 一般建议每秒请求不超过 100 次 |
| 503 | APPKEY 权限超限 /订单到期 | 请至开发者中心检查您的 APPKEY 是否到期或是否权限超限 |
| 504 | APPKEY 错误 | 请检查传递的 APPKEY 是否为开发者中心获取到的值 |
| 505 | 请求的次数超出接口限制 | 请检查对应接口是否有请求次数限制以及您目前的接口请求剩余次数 |
| 900 | 接口内部响应错误 | 接口可用性为 99.999%,如获取到此状态码请邮件联系我们 |
示例代码包含的开发语言:C#, Go, Java, jQuery, Node.js, Objective-C, PHP, Python, Ruby, Swift 等,其他语言进行对应的 RESTful API 请求实现即可。

Q: 数据请求有缓存吗?
A: 所有的数据都是直接返回的,部分周期性数据在更新周期内数据是缓存的。
Q: 如何保证请求时 key 的安全性?
A: 一般建议将对我们 API 的请求放置在您应用的后端服务中发起,您应用的所有前端请求都应该指向您自己的后端服务,这样的架构也更加地纯粹且易维护。
Q: 接口可以用于哪些开发语言?
A: 可以使用于所有可以进行网络请求的开发语言,用于您项目快速地进行数据构建。
Q: 接口的性能可以保证吗?
A: 接口后台架构和我们给企业提供的商业项目架构一致,您可以通过访问测试接口查看接口相关返回性能与信息。
咕咕数据,专业的数据提供商,提供专业全面的数据接口、商业数据分析,让数据成为您的生产原料。

咕咕数据基于我们七年来为企业客户提供的千亿级数据存储与性能优化、相关海量基础数据支撑,将合规的部分通用数据、通用功能抽象成产品级数据 API ,大大满足了用户在产品开发过程中对基础数据的需求,同时降低了海量数据的存储与运维成本,以及复杂功能的技术门槛与人力开发成本。
除了我们已开放的分类数据与功能接口外,还有海量数据正在整理、清洗、整合、构建中,后期会开放更多的数据与云端功能接口 API 供用户使用。
图书 ISBN 查询,图书基础信息,永久图书封面。

接口详情: https://www.gugudata.com/api/details/isbn
接口地址: https://api.gugudata.com/text/isbn
返回格式: application/json; charset=utf-8
请求方式: GET
请求协议: HTTPS
请求示例: https://api.gugudata.com/text/isbn?appkey=YOUR_APPKEY&isbn=YOUR_VALUE
数据预览: https://www.gugudata.com/preview/isbn
接口测试: https://api.gugudata.com/text/isbn/demo
| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
|---|---|---|---|---|
| appkey | string | 是 | YOUR_APPKEY | 付费后获取的 APPKEY |
| isbn | string | 否 | YOUR_VALUE | 图书 ISBN ,如 9787020002320 |
| 参数名 | 参数类型 | 备注 |
|---|---|---|
| DataStatus.StatusCode | int | 接口返回状态码 |
| DataStatus.StatusDescription | string | 接口返回状态说明 |
| DataStatus.ResponseDateTime | string | 接口数据返回时间 |
| DataStatus.DataTotalCount | int | 此条件下的总数据量,一般用于分页计算 |
| DataStatus.RequestParameter | string | 请求参数,一般用于调试 |
| Data.Title | string | 图书名称 |
| Data.Author | string | 作者 |
| Data.Translator | string | 译者,没有译者时返回空字符串 |
| Data.ISBN | string | ISBN |
| Data.Publisher | string | 出版商 |
| Data.PublisherDateTime | string | 出版年月,格式 2022-3 |
| Data.PageNumber | string | 图书总页码 |
| Data.Binding | string | 图书包装类型,如平装、精装 |
| Data.BriefIntroduction | string | 图书简介 |
| Data.AuthorIntroduction | string | 作者简介 |
| Data.CoverImage | string | 图书封面图片永久地址 |
| 状态码 | 状态码解释 | 备注 |
|---|---|---|
| 100 | 正常返回 | 可通过判断此状态码断言接口正常返回 |
| -1 | 请求失败 | 请求处理请求失败 |
| 501 | 参数错误 | 请检查您传递的参数个数以及参数类型是否匹配 |
| 502 | 请求频率受限 | 一般建议每秒请求不超过 100 次 |
| 503 | APPKEY 权限超限 /订单到期 | 请至开发者中心检查您的 APPKEY 是否到期或是否权限超限 |
| 504 | APPKEY 错误 | 请检查传递的 APPKEY 是否为开发者中心获取到的值 |
| 505 | 请求的次数超出接口限制 | 请检查对应接口是否有请求次数限制以及您目前的接口请求剩余次数 |
| 900 | 接口内部响应错误 | 接口可用性为 99.999%,如获取到此状态码请邮件联系我们 |
示例代码包含的开发语言:C#, Go, Java, jQuery, Node.js, Objective-C, PHP, Python, Ruby, Swift 等,其他语言进行对应的 RESTful API 请求实现即可。

Q: 数据请求有缓存吗?
A: 所有的数据都是直接返回的,部分周期性数据在更新周期内数据是缓存的。
Q: 如何保证请求时 key 的安全性?
A: 一般建议将对我们 API 的请求放置在您应用的后端服务中发起,您应用的所有前端请求都应该指向您自己的后端服务,这样的架构也更加地纯粹且易维护。
Q: 接口可以用于哪些开发语言?
A: 可以使用于所有可以进行网络请求的开发语言,用于您项目快速地进行数据构建。
Q: 接口的性能可以保证吗?
A: 接口后台架构和我们给企业提供的商业项目架构一致,您可以通过访问测试接口查看接口相关返回性能与信息。
咕咕数据,专业的数据提供商,提供专业全面的数据接口、商业数据分析,让数据成为您的生产原料。

咕咕数据基于我们七年来为企业客户提供的千亿级数据存储与性能优化、相关海量基础数据支撑,将合规的部分通用数据、通用功能抽象成产品级数据 API ,大大满足了用户在产品开发过程中对基础数据的需求,同时降低了海量数据的存储与运维成本,以及复杂功能的技术门槛与人力开发成本。
除了我们已开放的分类数据与功能接口外,还有海量数据正在整理、清洗、整合、构建中,后期会开放更多的数据与云端功能接口 API 供用户使用。