Как вы можете получить все вложения smartsheet одним запросом

Используя мой текущий код, мне нужно сделать отдельный запрос curl для каждой строки таблицы smartsheet, чтобы получить идентификатор вложения, а затем отправить другой запрос с этим идентификатором, чтобы получить URL-адрес загрузки.
Это будет происходить для каждой строки таблицы smartsheet и очень неэффективно для листов с большим количеством строк.
Есть ли способ получить все идентификаторы / 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();

0

Решение

Вы можете использовать Получить все вложения операция для извлечения всех вложений (идентификаторов) в одном запросе для указанного листа. Как видно из документации, URI запроса: https://api.smartsheet.com/2.0/sheets/{sheetId}/attachments,

Обратите внимание, что вложения могут существовать в Smartsheet на 3 разных уровнях: Sheet, Row, Comment. Получить все вложения ответ будет содержать все вложения на листе (на любом / всех уровнях: лист, строка, комментарий) — поэтому, если вас интересуют только вложения строки, вам нужно будет обрабатывать только элементы в ответе, где parentType Атрибут имеет значение «ROW».

Получив доступ к идентификаторам вложений в ответе «Получить все вложения», вам все равно придется впоследствии использовать Получить вложение операция для каждого вложения, чтобы получить URL-адреса по одному. (В настоящее время нет способа получить их оптом.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]