影刀RPA进阶教程:GraphQL API对接实战——新一代API的采集与写入

发布时间:2026/10/20 1:40:38

影刀RPA进阶教程:GraphQL API对接实战——新一代API的采集与写入 影刀RPA进阶教程GraphQL API对接实战——新一代API的采集与写入REST要调3个接口拿仓库的star/fork/提交GraphQL一次搞定。影刀的HTTP请求指令直接发GraphQL请求Body选raw贴查询语句不用额外封装。模块5网页自动化——影刀发GraphQL请求的正确姿势影刀指令面板搜HTTP请求URL填https://api.github.com/graphqlMethod选POST。Headers加两条Authorization: Bearer ghp_你的token注意Bearer后面有空格Content-Type: application/json。Body选raw贴GraphQL查询。格式是{query: { viewer { login } }}query是固定字段名后面跟GraphQL语句。发送后响应在response.content里是JSON字符串用Json转字典指令解析取data字段。踩坑Content-Type必须写application/json写text/plain会返回400GitHub不认。踩坑Bearer后面的空格不能省直接贴Bearertoken会返回401鉴权失败。模块3变量与数据类型——GraphQL响应的数据结构GraphQL响应固定两层data和errors。成功时errors为空data里是你要的数据。字段名拼错不报错返回null。比如把stargazerCount写成stargazerCounts响应里这个字段就是null不报字段不存在。分页用pageInfo { hasNextPage endCursor }endCursor是下一页的游标传给after参数。变量用variables传查询里用$org: String!声明请求体写成{query: query($org: String!) { ... }, variables: {org: facebook}}影刀里用字符串拼接指令组装请求体或者先在Python里用json.dumps()转好再贴进去。模块4流程控制——遍历组织下所有仓库先用一个HTTP请求拿组织下的仓库列表GraphQL查询{ organization(login: facebook) { repositories(first: 10) { nodes { name stargazerCount forkCount } pageInfo { hasNextPage endCursor } } } }判断hasNextPage是否为true是的话把endCursor拼到下一次请求的after参数里。用循环指令套起来终止条件是hasNextPage false。每次循环把nodes里的数据追加到Excel用写入Excel行指令追加模式。踩坑first最大值100要拿更多就得分页别想着一次拿完500个仓库。踩坑endCursor是字符串传的时候要加引号after: Y3Vyc29yOn...这样写。模块9平台实战——GitHub GraphQL API采集实战案例采集facebook组织下所有仓库的name/stargazerCount/forkCount/最新提交时间一次请求拿完。完整GraphQL查询含嵌套的defaultBranchRef.target.history{ organization(login: facebook) { repositories(first: 100, after: $cursor) { nodes { name stargazerCount forkCount defaultBranchRef { target { ... on Commit { history(first: 1) { nodes { committedDate author { name } } } } } } } pageInfo { hasNextPage endCursor } } } }... on Commit是类型断言因为target可能是Commit也可能是Tag不写会报错。响应解析后defaultBranchRef.target.history.nodes[0].committedDate是最新提交时间。用字典取值指令逐层取data.organization.repositories.nodes是个列表每个元素是一个仓库的数据。模块9平台实战——Shopify GraphQL采集商品Shopify的GraphQL端点是https://你的店铺.myshopify.com/admin/api/2024-01/graphql.json。请求Header加X-Shopify-Access-Token: 你的token不用Bearer。查询商品{ products(first: 10) { edges { node { id title handle variants(first: 5) { edges { node { price inventoryQuantity } } } } } } }Shopify的GraphQL用edges和node包裹数据和GitHub直接返回nodes不一样注意区分。分页用pageInfo { hasNextPage endCursor }传给after参数格式和GitHub一样。踩坑Shopify的id是gid://shopify/Product/12345这种格式不是纯数字存数据库时要转成自己的ID。模块6数据处理——GraphQL响应的清洗和存储GraphQL响应是嵌套字典用Json转字典解析后逐层取值。写个Python脚本封装清洗逻辑影刀用执行Python指令调用importjsondefclean_graphql_response(raw_json):datajson.loads(raw_json)iferrorsindataanddata[errors]:returnNone,data[errors]reposdata[data][organization][repositories][nodes]result[]forrinrepos:latest_committry:latest_commitr[defaultBranchRef][target][history][nodes][0][committedDate]except:passresult.append({name:r[name],stars:r[stargazerCount],forks:r[forkCount],latest_commit:latest_commit})returnresult,None返回的result是列表每个元素是字典用循环指令逐行写入Excel。踩坑defaultBranchRef可能是null空仓库直接取会报错用try-except兜底。模块8进阶技能——GraphQL的调试技巧GraphQL的报错信息很模糊errors里的message只说Syntax Error不说哪行错了。用GraphiQL在线调试工具先跑通查询再贴到影刀里。GitHub的GraphiQL地址是https://docs.github.com/en/graphql/overview/explorer。fields字段太多会触发超时GitHub限制单请求响应不超过100KB用select只查需要的字段。变量用$声明查询里用($org: String!, $cursor: String)请求体里variables传值。影刀里用Python指令组装带变量的请求体importjsondefbuild_graphql_body(query,variables):returnjson.dumps({query:query,variables:variables})模块10系统联动——GraphQL数据写入数据库清洗完的数据写入MySQL用执行SQL指令先建表CREATETABLErepo_data(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(255),starsINT,forksINT,latest_commitDATETIME);用循环指令遍历清洗后的数据列表每条执行一次INSERT。批量写入用executemany影刀的执行SQL指令支持批量参数传列表就行。踩坑GitHub的committedDate格式是2024-01-15T08:30:00ZMySQL的DATETIME不认T和Z用Python的datetime.strptime()转一下。模块11工程化与规范——GraphQL查询的封装和复用GraphQL查询语句很长直接贴影刀指令里不好维护存到配置文件.json里。用读取文件指令读配置文件取github_query字段传给HTTP请求的Body。不同平台的GraphQL查询格式不一样建一个queries.json{github_repos:query($org: String!, $cursor: String) { ... },shopify_products:query($first: Int!) { ... }}用Json转字典读进来按平台名取对应的查询语句。踩坑JSON里的字符串不能换行GraphQL查询要写在一行或者用Python的triple quote存多行字符串。模块2元素定位四合一——当GraphQL遇到网页鉴权有些GraphQL API需要先登录网页拿token用打开网页指令进登录页。用点击元素指令点登录按钮用填写输入框指令输账号密码用获取元素文本指令拿页面上的token。XPath定位//input[nameaccess_token]CSS选择器定位input[nameaccess_token]。拿到了token存到字符串变量后面HTTP请求的Header里用。踩坑token有有效期过期了要重新登录用条件判断指令检查响应状态码401就重新登录。模块7鼠标键盘图像自动化——GraphQL请求失败时的截图留痕HTTP请求返回非200时用截图指令截当前屏幕存到logs/目录文件名用时间戳。用执行Python指令调系统通知Windows用win10toastMac用plyer.notificationimportloggingfromdatetimeimportdatetimedeflog_error(response_text):timestampdatetime.now().strftime(%Y%m%d_%H%M%S)log_fileflogs/graphql_error_{timestamp}.txtwithopen(log_file,w)asf:f.write(response_text)logging.error(fGraphQL请求失败日志已保存到{log_file})失败超过3次用发送邮件指令告警收件人填你自己的邮箱。踩坑截图指令在头部运行模式下会截到黑屏用条件判断检查当前是否有活动窗口。模块12速查表/常见报错报错信息原因解决401 UnauthorizedBearer后面没加空格Bearer后面加空格400 Bad RequestContent-Type写错改成application/jsonfields返回null字段名拼错去GraphiQL里核对字段名Syntax Error查询语句格式错去GraphiQL里调试超时fields太多删掉不需要的字段GraphQL比REST省请求次数GitHub的REST API每小时限60次GraphQL算1次。分页用afterendCursor别用REST的page参数两个不一样。... on Commit是类型断言不写会报错因为接口返回的可能不是Commit类型。查询语句里的字符串用双引号单引号会报语法错。变量用$声明传值时在variables字段里给别直接拼到查询字符串里。home.linyan.cloud 有GraphQL实战相关的更多案例可以参考。内容标签影刀RPA GraphQL API对接 GitHub API采集 数据处理 网页自动化 变量与数据类型 流程控制 进阶技能 平台实战 系统联动 工程化与规范 常见报错作者林焱。到此为止
延伸阅读

更多相关文章

2026/10/20 1:40:38

MCP跨系统集成实践:当多个业务系统共享Agent能力时

干了几年AI应用落地,我最怕听到的一句话就是"让Agent处理就行"。Agent确实能处理,但当你的客服系统、CRM、工单平台、数据分析后台都开始接入Agent能力,事情就没那么单纯了。最近我正好在做一个某跨平台系统的改造,把原…

2026/10/20 2:55:42

TensorRT实战手册:GPU推理优化与INT8量化完整指南

要说GPU推理优化,TensorRT是绕不过去的那一个。框架跑训练、TensorRT做上线推理,这个分工在工业级落地里已经成了默认组合。简单讲,TensorRT是一个专攻推理阶段的高性能优化引擎,它把训练好的模型拿到手,通过层融合、精…

2026/10/20 2:55:42

Python工业相机实时画面获取实战:SDK配置到稳定出图

最近有个项目要在 Python 里把一台工业机器人相机的实时画面快速调出来。听起来真不算难:SDK 一装,OpenCV 一显示,不就成了吗?但真上手才发现,从设备枚举到图像格式转换,每一环都藏着能把人绊倒半天的细节。…

2026/10/20 2:55:42

Tomcat 9与Tomcat 11同机共存:端口、环境变量与配置实操

最近接手了一个交接过来的老项目,用的还是 Tomcat 9,而新起的服务又要求跑在 Tomcat 11 上。开发机就一台,来回卸了装、装了卸,折腾两天后我实在忍不了了——干脆研究了一下怎么让两个版本在同一台电脑上和平共处。这篇文章就是把…

2026/10/20 2:55:42

CNN-RNN-Attention时间序列预测实战:从数据处理到模型调参

前阵子有个朋友做某园区的能耗预测,单用 LSTM 效果一直卡在同一个台阶上,尖峰时刻总是慢半拍。我让他试试在 LSTM 前后分别加一层卷积和注意力,也就是标题里说的 CNN-RNN-Attention 结构,同一份数据上误差肉眼可见地往下走。时间序…

2026/10/20 2:55:42

MATLAB实现P-III型分布水文频率计算与适线法

简介:这份资源面向水文统计、工程计算与数据分析领域的学习者,提供在MATLAB中实现皮尔逊-III型(P3)分布的完整代码与示例数据,帮助完成数据建模、预测分析与不确定性评估。压缩包共2个文件,包含1个m脚本与1…

2026/10/20 2:50:42

别让向量检索背锅:GraphRAG与Agent调度器重塑RAG检索架构

做RAG项目的同学,最焦虑的时刻往往不是模型回答错了,而是检索回来的上下文看起来都对,模型却给出了一个完全编造的数字。最近我把一整套知识问答系统的检索层重构了一遍,核心思路就是标题里那句话:别让向量检索背上所有…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑