如何从公开Google表格获取简化XML数据(Arduino+SIM800场景)
精简Google Sheets XML返回的实用方案
嘿,刚好我之前在项目里也遇到过用低带宽模块(比如SIM800)拉取Google Sheets数据时冗余XML太大的问题,给你两个高效的解决办法:
1. 切换到basic Feed类型
Google Sheets的Data API提供了不同的Feed类型,把你链接里的full替换成basic就能直接得到更精简的输出——它会自动去掉<link>、<category>这些完全无用的元素,同时减少重复的<title>/<content>内容。
修改后的请求链接示例:
https://spreadsheets.google.com/feeds/cells/1uphj-Oq3Xt6ImHJdezAUEX4u41_w1NNMlZU4Flr6lc4/1/public/basic?range=a11:c12
这个方案优点是简单,不需要额外参数,返回的XML体积会比full版本小很多,适合快速上手。
2. 用fields参数精准过滤所需元素
如果basic版本还是有你不需要的内容(比如残留的重复文本),可以用Google API支持的fields参数精准指定只返回你需要的节点,这是最彻底的精简方式,能把传输量降到最低。
你需要的是<updated>和<gs:cell>,所以构造的fields参数应该是:fields=feed(updated,entry(gs:cell)),把它加到原链接末尾即可:
https://spreadsheets.google.com/feeds/cells/1uphj-Oq3Xt6ImHJdezAUEX4u41_w1NNMlZU4Flr6lc4/1/public/full?range=a11:c12&fields=feed(updated,entry(gs:cell))
这个请求返回的XML会只保留根节点<feed>下的<updated>时间,以及每个单元格对应的<gs:cell>节点,完全去掉所有冗余内容,示例返回大概是这样:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:gs="http://schemas.google.com/spreadsheets/2006"> <updated>2024-05-20T12:34:56Z</updated> <entry> <gs:cell row="11" col="1" inputValue="你的单元格数据1"/> </entry> <entry> <gs:cell row="11" col="2" inputValue="你的单元格数据2"/> </entry> <!-- 其他目标单元格的entry --> </feed>
小提示
如果SIM800发送请求时遇到参数解析问题,记得把fields里的特殊字符URL编码:
(→%28)→%29:→%3A
编码后的fields参数就是:fields=feed%28updated%2Centry%28gs%3Acell%29%29
内容的提问来源于stack exchange,提问作者Rodrigo Miranda
相关产品推荐
相关产品推荐

