Сохранить smartsheet как.xls на сервере (curl / php)
Я хочу сохранить смарт-лист на моем сервере (как.xls). Но я всегда получаю.xls, заполненный JSON-кодом. Я получаю "file_put error", если я использую json_decode (..) и.xls полностью пуст. Если я делаю это с помощью curl на своем рабочем столе, я получаю нужные.xls, заполненные всем, что мне нужно.
$baseURL = "https://api.smartsheet.com/1.1";
$headers = array("Authorization: Bearer ".$inputToken);
.
.
array_push($headers,'"Accept: application/vnd.ms-excel" -o tmpfile.xls --insecure');
$curlSession = curl_init($sheetDetail_url);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);
$smartsheetData = curl_exec($curlSession);
if (curl_errno($curlSession))
{
echo "Oh No! Error: " . curl_error($curlSession);
}else{
// Assign response to PHP object
$sheetsObj = json_decode($smartsheetData);
// close curlSession
curl_close($curlSession);
}
$file1="tmpfile.xls";
if(!(file_put_contents($file1, $sheetsObj))){
echo "file_put error";
}
Я надеюсь, что вы можете мне помочь. Спасибо
1 ответ
Элементы, которые необходимо скорректировать в вашем примере, это заголовки и способ обработки ответа.
Во-первых, использование параметров командной строки curl в заголовках не будет работать. Вместо этого вам просто нужно указать, что файл XLS должен возвращаться с заголовками, как показано ниже:
$headers = array("Authorization: Bearer ".$inputToken,
"Accept: application/vnd.ms-excel");
Во-вторых, поскольку файл XLS будет возвращен, мы не захотим анализировать этот ответ как JSON. Вместо этого немедленно запишите ответ в файл.
Имея это в виду, следующий пример должен работать для вас и получить указанный лист в виде файла XLS. Не забудьте заменить YOUR_TOKEN
а также YOUR_SHEET_ID
с соответствующими значениями.
<?php
$inputToken = 'YOUR_TOKEN';
$baseURL = "https://api.smartsheet.com/1.1";
$sheetDetail_url = $baseURL.'/sheet/YOUR_SHEET_ID';
$headers = array("Authorization: Bearer ".$inputToken,
"Accept: application/vnd.ms-excel");
$curlSession = curl_init($sheetDetail_url);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);
$smartsheetData = curl_exec($curlSession);
// Check for error or save the file
if (curl_errno($curlSession))
{
echo "Oh No! Error: " . curl_error($curlSession);
}else{
curl_close($curlSession);
$file1="tmpfile.xls";
if(!(file_put_contents($file1, $smartsheetData))){
echo "file_put error";
}
}
?>