Overleaf API - 如何以编程方式上传图像?

问题描述 投票:0回答:3

我使用 overleaf 来编辑乳胶文档。背面平台具有上传图像文件的功能,然后可以引用该图像文件并将其包含在乳胶文档中。

我可以手动将图像上传到背面平台,并从我的乳胶文档中成功使用/引用它们,但我想知道是否有一种方法可以通过 API 以编程方式进行上传。

我想我可能需要使用https://github.com/overleaf/filestore但我不知道如何开始。

仅供参考:我的主要用例是通过 Python(特别是 Google Colab 笔记本)执行此操作。

latex sharelatex overleaf
3个回答
1
投票

不幸的是,Overleaf API目前不允许以编程方式上传到现有项目。它的唯一目的是提供可用于手动单击特制链接的用户启动new项目的链接。相反,您可能想查看 Overleaf 的同步选项之一。目前他们提供 Git/GitHub 和 Dropbox 选项。设置同步后,您可以将文件添加到这些源,以允许 Overleaf 将它们拉入。


1
投票

虽然 Overleaf 没有自己的上传 API,但 Dropbox 有。要使用它将文件放入 Overleaf,

  • 设置 Dropbox 同步。为此,您需要一个付费帐户。
  • 让自己成为具有“完全 Dropbox 访问权限”的 Dropbox 应用程序
  • 将“files.content”权限添加到您的应用程序。
  • 使用该 Web 控制台获取 OAuth2 令牌,您将在下面传递该令牌。

现在您可以上传文件了! HTTP API 有详细记录,但 Python 至少有一个不错的 SDK。所以对我来说,程序化上传的结果是

pip install dropbox
import dropbox
from pathlib import Path
from io import BytesIO
import matplotlib.pyplot as plt

def upload(ax, project, path):
    bs = BytesIO()
    format = path.split('.')[-1]
    ax.figure.savefig(bs, bbox_inches='tight', format=format)

    token = Path('token.txt').read_text()
    dbx = dropbox.Dropbox(token)

    # Will throw an UploadError if it fails
    dbx.files_upload(
        f=bs.getvalue(), 
        path=f'/Apps/Overleaf/{project}/{path}',
        mode=dropbox.files.WriteMode.overwrite)

if __name__ == '__main__':
    fig, ax = plt.subplots()

    upload(ax, 'project_name', 'images/test.png')

0
投票

背页有一个非官方的 Python API:https://github.com/jkulhanek/pyoverleaf

您可以通过运行以下命令来安装 CLI:

pip install 'pyoverleaf[cli]'

上传图像可以按如下方式完成:

cat image.jpg | pyoverleaf write project-name/image.jpg

或者,您可以从 Python 访问它:

import pyoverleaf
api = pyoverleaf.Api()
projects = api.get_projects()
project_id = projects[0].id
rootdir = api.project_get_files(project_id)
api.project_upload_file(project_id, rootdir.id, "image.jpg", open("image.jpg", "rb").read())
© www.soinside.com 2019 - 2024. All rights reserved.