如何通过一个请求获取所有智能表附件
How can you get all the smartsheet attachments with one request
使用我当前的代码,我需要在 smartsheet 的每一行上发出单独的 curl 请求以获取附件 ID,然后使用该 ID 发送另一个请求以获取下载 url。
对于 smartsheet 的每一行都会发生这种情况,并且对于具有很多行的 sheets 来说效率非常低。
有没有一种方法可以通过一个请求从 sheet 中获取所有附件 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();
您可以使用 Get All Attachments 操作在指定 sheet 的单个请求中检索所有附件 (Id)。如文档所示,请求 URI 为:https://api.smartsheet.com/2.0/sheets/{sheetId}/attachments
。
请注意,附件可以存在于 Smartsheet 中的 3 个不同级别:Sheet、行、评论。 获取所有附件 响应将包含 sheet 中的 所有 个附件(在 any/all 级别:Sheet, Row, Comment) -- 所以如果您只对 Row 附件感兴趣,您将只想处理响应中 parentType 属性值为 [= 的项目25=].
一旦您有权访问 "Get All Attachments" 响应中的附件 ID,您仍需要随后对每个附件使用 Get Attachment 操作来一次检索一个 URL。 (目前无法批量获取这些。)
在 sheet 或行级别,我相信您现在可以添加 'include' 查询参数以强制包含位于 .sheet 的附件。和.row。水平,以确保.comment。级别附件,需要添加讨论到包含值:
https://api.smartsheet.com/2.0/sheets/{sheetId}?include=attachments,discussions
使用我当前的代码,我需要在 smartsheet 的每一行上发出单独的 curl 请求以获取附件 ID,然后使用该 ID 发送另一个请求以获取下载 url。 对于 smartsheet 的每一行都会发生这种情况,并且对于具有很多行的 sheets 来说效率非常低。 有没有一种方法可以通过一个请求从 sheet 中获取所有附件 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();
您可以使用 Get All Attachments 操作在指定 sheet 的单个请求中检索所有附件 (Id)。如文档所示,请求 URI 为:https://api.smartsheet.com/2.0/sheets/{sheetId}/attachments
。
请注意,附件可以存在于 Smartsheet 中的 3 个不同级别:Sheet、行、评论。 获取所有附件 响应将包含 sheet 中的 所有 个附件(在 any/all 级别:Sheet, Row, Comment) -- 所以如果您只对 Row 附件感兴趣,您将只想处理响应中 parentType 属性值为 [= 的项目25=].
一旦您有权访问 "Get All Attachments" 响应中的附件 ID,您仍需要随后对每个附件使用 Get Attachment 操作来一次检索一个 URL。 (目前无法批量获取这些。)
在 sheet 或行级别,我相信您现在可以添加 'include' 查询参数以强制包含位于 .sheet 的附件。和.row。水平,以确保.comment。级别附件,需要添加讨论到包含值:
https://api.smartsheet.com/2.0/sheets/{sheetId}?include=attachments,discussions