0

現在のコードを使用して、smartsheet の各行に対して個別の curl リクエストを作成して添付ファイル ID を取得し、その ID を使用して別のリクエストを送信してダウンロード URL を取得する必要があります。これは、smartsheet の行ごとに発生し、行数が多いシートでは非常に非効率的です。1 回のリクエストでシートからすべての添付ファイル 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操作を使用して、指定したシートの 1 回のリクエストですべての添付ファイル (ID) を取得できます。ドキュメントが示すように、リクエスト URI は次のとおり https://api.smartsheet.com/2.0/sheets/{sheetId}/attachmentsです。

添付ファイルは、シート、行、コメントの 3 つの異なるレベルで Smartsheet に存在できることに注意してください。Get All Attachments応答には、シート内のすべての添付ファイルが含まれます(任意/すべてのレベル: シート、行、コメント)。したがって、行の添付ファイルだけに関心がある場合は、応答内のアイテムのみを処理する必要があります。ここで、parentType属性の値は「ROW」です。

「すべての添付ファイルを取得」応答で添付ファイル ID にアクセスできるようになった後も、引き続き、添付ファイルごとにGet Attachmentオペレーションを使用して、一度に 1 つずつ URL を取得する必要があります。(現在、これらをまとめて取得する方法はありません。)

于 2015-09-17T16:26:04.220 に答える