Google CSE PHP CURL Реализация для программного добавления / удаления аннотаций - PullRequest
0 голосов
/ 12 сентября 2011

Я работал с API пользовательской поисковой системы Googgle, чтобы программно добавлять и удалять аннотации. Я чувствую, что очень внимательно следил за их документацией и другими советами. Кажется, я не могу избежать ошибки 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;

если кто-нибудь может мне помочь или хотя бы направить меня в правильном направлении, я был бы очень признателен

1 Ответ

0 голосов
/ 13 сентября 2011

Хорошо, во-первых, вам нужно закодировать данные XML, отправленные в Google. Во-вторых, вы должны избавиться от всех вкладок и форматирования, механизм получения не имеет к этому отношения.

Так попробуйте это:

$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, которую вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...