Latex 中的 API JSON

Latex 中的 API JSON

我想知道是否可以使用 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 代码的网络连接。我进行了以下测试:

  1. 编写了以下测试文件,该文件尝试连接到 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}
    

    在本地运行时,它可以运行并生成包含以下内容的文档:

    成功结果

  2. 将上述代码上传到 Sharelatex,并确保 lualatex 编译器正在使用(如下图所示)

    Sharelatex 设置

  3. 在 Sharelatex 中编译了此示例,但收到一份显示错误的文档:

    网络错误

因此,正如预期的那样,Sharelatex 不允许网络连接。

相关内容