我想知道是否可以使用 api json 在 .tex 文档中获取网站数据
我想在没有 luatex 的情况下做到这一点,因为这个想法是使用 sharelatex 网站在线编译,而该网站不支持 luatex。
此致
答案1
我建议不要尝试从 REST/JSON API 直接将数据导入 LaTeX。这无论如何都需要外部工具,因为 LaTeX 无法打开网络连接。我建议使用 Python 或 Ruby 等语言来查询 API,并将 JSON 数据转换为更易于用 LaTeX 处理的数据。
转换 JSON 数据的一个好工具是杰奇- 我使用它将 JSON 数据精简为文档中所需的位,并结合 Curl 从 REST API 中检索数据。
以下是使用 Curl、jq 和上述 API 的代码。它发出
\geo{37.4220352}%
{-122.0841244}
通过创建命令,它可以很容易地在 LaTeX 中解析\geo
。
#! /bin/sh
URL="http://216.58.210.138/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false"
curl -s "$URL" | jq -r '"
\\geo{\(.results[0].geometry.location.lat)}%
{\(.results[0].geometry.location.lng)}
"'
答案2
正如我在评论中暗示的那样,即使 Sharelatex 允许使用 lualatex 作为文档的编译器,它也不允许来自 luatex 代码的网络连接。我进行了以下测试:
编写了以下测试文件,该文件尝试连接到 Google Geocoding API,以获取包含有关位置“1600 Amphitheatre Parkway, Mountain View, CA”的地理编码信息的 JSON。然后,它使用
lualibs
该 JSON 将该 JSON 转换为 lua 表,然后将地理位置组件的"lat"
和"lng"
打印在文档中。\documentclass{article} \usepackage{luacode} \begin{document} \begin{luacode} local http = require("socket.http") require("lualibs.lua") r, c, h = http.request ("http://216.58.210.138/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false") if r then local s = utilities.json.tolua(r) tex.print("Success! $\\to$ (") tex.print(tostring(s["results"][1]["geometry"]["location"]["lat"]), ", ") tex.print(tostring(s["results"][1]["geometry"]["location"]["lng"]), ")") else tex.print("ERROR: ") tex.print(c) end \end{luacode} \end{document}
在本地运行时,它可以运行并生成包含以下内容的文档:
将上述代码上传到 Sharelatex,并确保 lualatex 编译器正在使用(如下图所示)
在 Sharelatex 中编译了此示例,但收到一份显示错误的文档:
因此,正如预期的那样,Sharelatex 不允许网络连接。