0

使用我当前的代码,我需要对智能表的每一行发出单独的 curl 请求以获取附件 id,然后使用该 id 发送另一个请求以获取下载 url。这将发生在 smartsheet 的每一行,并且对于有很多行的工作表来说效率非常低。有没有办法通过一个请求从一张表中获取所有附件 id/url?

class Sheet_request{
    private $urlMain = "https://api.smartsheet.com/2.0/users/me";
    private $url_food_sheet = "https://api.smartsheet.com/2.0/sheets/3650210866XXXX/?include=attachments";
    private $url_food_main= "https://api.smartsheet.com/2.0/sheets/36502108669XXX";


    private function curl($url) {
        $ch = curl_init($url);
        $request_headers = array();
        $request_headers[] = "Authorization: Bearer XXXXXXXXXXXXXXXX";
        $request_headers[] = "Content-Type: application/json";
        curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        if ($response === false) {
            die(curl_error($ch));
        }
        curl_close($ch);
        return $response;
    }

    function get_attachments() {
        $response = $this -> curl($this -> url_food_sheet);
        $sheetObj = json_decode($response);
        foreach ($sheetObj->rows as $row) {
            if (isset($row->attachments)){
                $rowAttachmentsURL = $this -> url_food_main . "/rows/" . number_format($row -> id, 0, "", "") . "/attachments";
                $getAttachmentsResponse = $this->curl($rowAttachmentsURL);
                $attachment = json_decode($getAttachmentsResponse);
                $attachmentURL = $this->url_food_main . "/attachments/".number_format($attachment->data[0]->id, 0, "", "");
                $attachmentInfo = $this->curl($attachmentURL);
                $attachmentInfo = json_decode($attachmentInfo);
                file_put_contents("pictures/".$attachmentInfo->name, file_get_contents($attachmentInfo->url));
            }
        }

    }



}




$foo = new Sheet_request();

$foo->get_attachments();
4

2 回答 2

1

您可以使用Get All Attachments操作在单个请求中检索指定工作表的所有附件 (Id)。如文档所示,请求 URI 是: https://api.smartsheet.com/2.0/sheets/{sheetId}/attachments.

请注意,附件可以存在于 Smartsheet 中的 3 个不同级别:工作表、行、注释。Get All Attachments响应将包含工作表中的所有附件(在任何/所有级别:Sheet、Row、Comment)——因此,如果您只对 Row 附件感兴趣,您将只想处理响应中的项目其中parentType属性的值为“ROW”。

在“获取所有附件”响应中访问附件 ID 后,您仍需要随后对每个附件使用获取附件操作来一次检索一个 URL。(目前没有办法批量获得这些。)

于 2015-09-17T16:26:04.220 回答
0

在工作表或行级别,我相信您现在可以添加“包含”查询参数以强制在 .sheet 中包含附件。和.row。水平,以确保.comment。级别附件,需要在include值中添加讨论:

https://api.smartsheet.com/2.0/sheets/{sheetId}?include=attachments,discussions
于 2020-08-06T01:20:27.343 回答