使用Zend Gdata从Google文档中删除文档

时间:2011-04-20 16:27:47

标签: php zend-framework google-docs-api zend-gdata

我无法使用Google Docs和Zend Framework 1.11.4。

我要做的是将文档上传到Google文档,检索HTML内容并删除文档。我正在使用.doc,.pdf和.rtf文件。

到目前为止我的代码:

$client = Zend_Gdata_ClientLogin::getHttpClient(
    'my@googleDocsEmail.address', 
    'MyPassword', 
    Zend_Gdata_Docs::AUTH_SERVICE_NAME
);
$gdClient = new Zend_Gdata_Docs($client);

$newDocumentEntry = $gdClient->uploadFile(
    $file, 
    null, 
    null, 
    Zend_Gdata_Docs::DOCUMENTS_LIST_FEED_URI
);

$cv = file_get_contents($newDocumentEntry->getContent()->getSrc());

$newDocumentEntry->delete();

一切正常,直到调用 - > delete()方法,它返回异常预期响应代码200,得到409

我已经谷歌搜索了几天,但是找不到答案,根据Googles文档,这是删除文档的正确方法。

如果有人知道我做错了什么,那么任何帮助都会非常受欢迎。

非常感谢, 加里

1 个答案:

答案 0 :(得分:0)

使用Zend_Gdata_Calendar库时,我遇到了同样的409响应问题。 Zend框架bugtracker上存在一个漏洞。见http://zendframework.com/issues/browse/ZF-10194

似乎归结为缺少由Gdata_App类或链中的一个子类设置的“If-Match”标头。

要为Calendar API修复它,我已经重写了Zend_Gdata_Calendar类并实例化了我的类而不是那个:

class Zend_Gdata_Calendar_Fixed extends \Zend_Gdata_Calendar {
    /**
     * Overridden to fix an issue with the HTTP request/response for deleting.
     * @link http://zendframework.com/issues/browse/ZF-10194
     */
    public function prepareRequest($method,
                                   $url = null,
                                   $headers = array(),
                                   $data = null,
                                   $contentTypeOverride = null) {
        $request = parent::prepareRequest($method, $url, $headers, $data, $contentTypeOverride);

        if($request['method'] == 'DELETE') {
            // Default to any
            $request['headers']['If-Match'] = '*';

            if($data instanceof \Zend_Gdata_App_MediaSource) {
                $rawData = $data->encode();
                if(isset($rawData->etag) && $rawData->etag != '') {
                    // Set specific match
                    $request['headers']['If-Match'] = $rawData->etag;
                }
            }
        }
        return $request;
    }
}

然后使用它:

...
$gdata = new Zend_Gdata_Calendar_Fixed($httpClient);
...

我想你可以做同样的事情,但改为覆盖Zend_Gdata_Docs类。