1

GoogleドキュメントとZendFramework1.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

私はこれを数日間グーグルしてきましたが、答えが見つかりません。Googleのドキュメントによると、これはドキュメントを削除する正しい方法です。

私が間違っていることについて誰かが何か考えを持っているなら、どんな助けでも大歓迎です。

よろしくお願いします、ギャリー

4

1 に答える 1

0

Zend_Gdata_Calendar ライブラリを使用しているときに、同じ 409 応答の問題が発生していました。Zend フレームワークのバグトラッカーには未解決のバグがあります。http://zendframework.com/issues/browse/ZF-10194を参照してください。

要約すると、Gdata_App クラスまたはチェーン内の子クラスの 1 つによって設定されている「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 クラスをオーバーライドすることで、同じことができると思います。

于 2011-11-15T09:16:52.810 に答える