Опубликовать CSV в папке Документов Google - PullRequest
0 голосов
/ 15 июля 2010

Работа над сценарием PHP для существенного вывода результатов запроса в CSV-файл и последующей загрузки в определенную папку в наших корпоративных Документах Google.

Файл создан и отправлен в Документы просто отлично. Тем не менее, он не помещается в соответствующий каталог.

Это функция, которую я использую, где $file, $folder и $newtoken - строки типа 'dump.csv', '0B0rVKeOmIwGXMGU2MzYyN2EtZWV...', [auth token from Google].

function insert($file, $folder, $newtoken){
    $mime = "Media multipart posting\n--END_OF_PART\n";
    $mime .= "Content-Type: application/atom+xml\n\n";
    $xml="<?xml version='1.0' encoding='UTF-8'?>
    <entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:docs=\"http://schemas.google.com/docs/2007\">
        <category scheme=\"http://schemas.google.com/g/2005#kind\"
      term=\"http://schemas.google.com/docs/2007#document\"/>
        <title>example document</title>
        <docs:writersCanInvite value=\"true\" />
    </entry>
    ";
    $mime.=$xml."\n--END_OF_PART\n";

    $document = "Content-Type: text/plain\n\n";
    $handle = fopen($file, "r");
    $contents = fread($handle, filesize($filename));
    fclose($handle);
    $document.=$contents;
    $itemURL = "https://docs.google.com/feeds/default/private/full";
    $mime .= $document."\n--END_OF_PART--\n";

    $headers = array();
    $headers[] = "POST /feeds/default/private/full/folder%3A".$folder."/contents HTTP/1.1";
    $headers[] = "Host: docs.google.com";
    $headers[] = "GData-Version: 3.0";
    $headers[] = "Authorization: GoogleLogin auth=".$newtoken."";
    $headers[] = "Content-Length: ".strlen($mime);
    $headers[] = "Content-Type: multipart/related; boundary=END_OF_PART";
    $headers[] = "Slug: Test";

    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,$itemURL);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl,CURLOPT_POSTFIELDS, $mime);
    $result = curl_exec($curl);
    curl_close($curl);

    echo 'Response: '.$result;
}

Может быть, у меня неправильный идентификатор папки (только что скопирован с URL при просмотре в Google Документах)?
Бонус: могу ли я манипулировать заголовками типа контента, чтобы заставить Google конвертировать файл в электронную таблицу?

1 Ответ

0 голосов
/ 15 июля 2010

У вас есть

$headers[] = "POST /feeds/default/private/full/folder%3A".$folder."/contents HTTP/1.1";

, а затем:

curl_setopt($curl,CURLOPT_URL,$itemURL);

Примите решение.Я думаю, что первое неверно;Вы не можете изменить URL через опцию CURLOPT_HTTPHEADER.Установите $itemURL на полный URL-адрес (включая /feeds/default/private/full/folder%3A".$folder."/contents) и удалите первую строку.

...