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

时间:2014-04-09 01:55:40

标签: php google-sheets

这是我用于“电子邮件并添加数据以形成”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));
}
}
?>

1 个答案:

答案 0 :(得分:0)

附加Speadsheet.php中的功能仅包含添加新值到现有的预先格式化(如通过网络界面手动创建的标题)google doc(+一些初始操作,如连接和对Google文档进行身份验证) )。您似乎在寻找an extended功能,而spreadsheet.php未提供此功能......