谷歌CSE PHP CURL实现以编程方式添加/删除注释


Google CSE PHP CURL Implementation to programmatically add/delete annotations

我一直在使用google的自定义搜索引擎API以编程方式添加和删除注释。我觉得我非常密切地遵循了他们的文档和其他提示。我似乎无法避免"错误请求"HTTP 400错误。我的代码在

下面
$url = "http://www.google.com/cse/api/default/annotations/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);    

curl_setopt ($ch, CURLOPT_HTTPHEADER, Array(
    "Authorization: GoogleLogin auth='DQAAAMI......n9dGUyA'",
    "Content-Type: text/xml"
));
curl_setopt($ch, CURLOPT_POST, 1);
$data = '<?xml version="1.0"?>'.chr(10);
$data .= '<Batch>'.chr(10);
$data .= chr(9).'<Add>'.chr(10);
$data .= chr(9). chr(9).'<Annotations>'.chr(10);
$data .= chr(9). chr(9). chr(9).'<Annotation about='"'">'.chr(10);
$data .= chr(9).chr(9). chr(9). chr(9).'<Label name='"my_engine'"/>'.chr(10);
$data .= chr(9). chr(9). chr(9).'</Annotation>'.chr(10);
$data .= chr(9). chr(9).'</Annotations>'.chr(10);
$data .= chr(9).'</Add>'.chr(10);
$data .= '</Batch>'.chr(10);    
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    

$result = curl_exec($ch);

if ( curl_errno($ch) ) {
        $result = 'cURL ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
} else {
    $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo  $returnCode."<br/>";
    switch($returnCode){
        case 200:
            break;
        default:
            $result = 'HTTP ERROR -> ' . $returnCode;
            break;
    }
}
curl_close($ch);
echo $result;

如果有人能帮助我,或者至少指引我正确的方向,我将非常感激

首先,您需要对发送给google的xml数据进行编码。其次,你应该去掉所有的标签和格式,接收引擎不关心这些。

那么试试这个:

$data = '<?xml version="1.0"?><Batch><Add><Annotations><Annotation about='"'"><Label name='"my_engine'"/></Annotation></Annotations></Add></Batch>';     
$data = urlencode($data);  // encode the string to send via http

我想这应该能让你走了。您可能会发现其他错误,但这应该会清除您得到的400错误。