使用自定义表单写入谷歌电子表格


Write to a Google spreadsheet with a custom form

这是我用于"电子邮件并将数据添加到表单"php后端脚本的代码,由于某些原因,我无法将前五个单元格更改为添加表单数据所需的名称、电子邮件、时间戳、订单和总价。我还想知道如何为每个名字制作一张新的表格,以便每个人的订单都能在自己的页面上显示。其中一些代码曾经由Zend处理,但该框架已不再受支持。我有点不知所措,你们能帮忙吗?

 // set credentials for ClientLogin authentication
 $user = "My username";
  $pass = "My Pass";
// set target spreadsheet and worksheet
$ssKey = 'Order';
   $wsKey = '$name';
  // update cell at row 1, column X
$entry = $service->updateCell('1', '1', 'Name', $ssKey, $wsKey);
$entry = $service->updateCell('1', '2', 'Email', $ssKey, $wsKey);
$entry = $service->updateCell('1', '3', 'Timestamp', $ssKey, $wsKey);
$entry = $service->updateCell('1', '4', 'Order', $ssKey, $wsKey);
$entry = $service->updateCell('1', '5', 'Total Price', $ssKey, $wsKey);
include 'spreadsheet.php';
$Spreadsheet = new Spreadsheet($user, $pass);
$Spreadsheet->
setSpreadsheet($wsKey)->
setWorksheet($wsKey)->
add(array("Name" => "$name", "Email" => "$visitor_email", "Timestamp" =>  "$datevalue", "Order" => "$sandwich, $sandwichside, $salads, $beverages", "Total Price" => "'$$TotalPrice"));

Speadsheet.php是这样的:

<?
#from php-form-builder-class
class Spreadsheet {
private $token;
private $spreadsheet;
private $worksheet;
private $spreadsheetid;
private $worksheetid;
public function __construct($username, $password) {
    $this->authenticate($username, $password);
}
public function authenticate($username, $password) {
    $url = "https://www.google.com/accounts/ClientLogin";
    $fields = array(
        "accountType" => "HOSTED_OR_GOOGLE",
        "Email" => $username,
        "Passwd" => $password,
        "service" => "wise",
        "source" => "pfbc"
    );
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
    $response = curl_exec($curl);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);
    if($status == 200) {
        if(stripos($response, "auth=") !== false) {
            preg_match("/auth=([a-z0-9_'-]+)/i", $response, $matches);
            $this->token = $matches[1];
        }
    }
}
public function setSpreadsheet($title) {
    $this->spreadsheet = $title;
    return $this;
}
public function setSpreadsheetId($id) {
    $this->spreadsheetid = $id;
    return $this;
}
public function setWorksheet($title) {
    $this->worksheet = $title;
    return $this;
}
public function add($data) {
    if(!empty($this->token)) {
        $url = $this->getPostUrl();
        if(!empty($url)) {
            $headers = array(
                "Content-Type: application/atom+xml",
                "Authorization: GoogleLogin auth=" . $this->token,
                "GData-Version: 3.0"
            );
            $columnIDs = $this->getColumnIDs();
            if($columnIDs) {
                $fields = '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">';
                foreach($data as $key => $value) {
                    $key = $this->formatColumnID($key);
                    if(in_array($key, $columnIDs))
                        $fields .= "<gsx:$key><![CDATA[$value]]></gsx:$key>";
                }
                $fields .= '</entry>';
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
                $response = curl_exec($curl);
                $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
                curl_close($curl);
            }
        }
    }
}
private function getColumnIDs() {
    $url = "https://spreadsheets.google.com/feeds/cells/" . $this->spreadsheetid . "/" . $this->worksheetid . "/private/full?max-row=1";
    $headers = array(
        "Authorization: GoogleLogin auth=" . $this->token,
        "GData-Version: 3.0"
    );
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($curl);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);
    if($status == 200) {
        $columnIDs = array();
        $xml = simplexml_load_string($response);
        if($xml->entry) {
            $columnSize = sizeof($xml->entry);
            for($c = 0; $c < $columnSize; ++$c)
                $columnIDs[] = $this->formatColumnID($xml->entry[$c]->content);
        }               
        return $columnIDs;              
    }
    return "";
}
private function getPostUrl() {
    if (empty($this->spreadsheetid)){
        #find the id based on the spreadsheet name
        $url = "https://spreadsheets.google.com/feeds/spreadsheets/private/full?title=" . urlencode($this->spreadsheet);
        $headers = array(
                        "Authorization: GoogleLogin auth=" . $this->token,
                        "GData-Version: 3.0"
        );
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        $response = curl_exec($curl);
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        if($status == 200) {
            $spreadsheetXml = simplexml_load_string($response);
            if($spreadsheetXml->entry) {
                $this->spreadsheetid = basename(trim($spreadsheetXml->entry[0]->id));
                $url = "https://spreadsheets.google.com/feeds/worksheets/" . $this->spreadsheetid . "/private/full";                                            
                if(!empty($this->worksheet))
                    $url .= "?title=" . $this->worksheet;
                curl_setopt($curl, CURLOPT_URL, $url);
                $response = curl_exec($curl);
                $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
                if($status == 200) {
                    $worksheetXml = simplexml_load_string($response);
                    if($worksheetXml->entry)
                        $this->worksheetid = basename(trim($worksheetXml->entry[0]->id));
                }
            }
        }
        curl_close($curl);
    }

    if(!empty($this->spreadsheetid) && !empty($this->worksheetid))
        return "https://spreadsheets.google.com/feeds/list/" . $this->spreadsheetid . "/" . $this->worksheetid . "/private/full";
    return "";
}
private function formatColumnID($val) {
    return preg_replace("/[^a-zA-Z0-9.-]/", "", strtolower($val));
}
}
?>

所附Speadsheet.php中的函数仅包含将新的值添加到现有的预格式化(如通过web界面手动创建的头)谷歌文档(+一些初始操作,如连接和验证谷歌文档)。看起来你在寻找an extended功能,而这个spreadsheet.php没有提供。。。