Проблемы с обходом API Google Goggles в PHP - PullRequest
1 голос
/ 16 июля 2011

Я весь день рвал на себе следующее:

Я пытаюсь отправить ручные запросы в Google Goggles с помощью PHP-портированного кода из этого сообщения в блоге: http://notanothercodeblog.blogspot.com/2011/02/google-goggles-api.html

Оригинальный пост в блоге имеет явно рабочий код, написанный на .NET, но моей платформой является PHP.У меня есть код:

$googleID = substr(md5(rand()), 0, 16); 

  /* */
  $url = 'http://www.google.com/goggles/container_proto?cssid=' . $googleID;
//  $url = 'http://www.google.com/goggles/container_proto?cssid=';


//  $googleCodes = array(0x22,0x00,0x62,0x3C,0x0A,0x13,0x22,0x02,0x65,0x6E,0xBA,0xD3,0xF0,0x3B,0x0A,0x08,0x01,0x10,0x01,0x28,0x01,0x30,0x00,0x38,0x01,0x12,0x1D,0x0A,0x09,0x69,0x50,0x68,0x6F,0x6E,0x65,0x20,0x4F,0x53,0x12,0x03,0x34,0x2E,0x31,0x1A,0x00,0x22,0x09,0x69,0x50,0x68,0x6F,0x6E,0x65,0x33,0x47,0x53,0x1A,0x02,0x08,0x02,0x22,0x02,0x08,0x01);
  $googleCodes = array(34,0,98,60,10,19,34,2,101,110,186,211,240,59,10,8,1,16,1,40,1,48,0,56,1,18,29,10,9,105,80,104,111,110,101,32,79,83,18,3,52,46,49,26,0,34,9,105,80,104,111,110,101,51,71,83,26,2,8,2,34,2,8,1);

  $handle = curl_init($url);
  curl_setopt($handle, CURLOPT_POST, true);
  curl_setopt($handle, CURLOPT_POSTFIELDS, array("CssidPostBody" => implode("",$googleCodes)));
  curl_setopt($handle, CURLOPT_HTTPHEADER, array("Content-Type: application/x-protobuffer",
                                                 "Pragma: no-cache"));
  $response = curl_exec($handle);
  /* */

  print_r($response);

Я продолжаю получать от Google следующий ответ:

"Unparseable Container Request"

Я считаю моя проблема связана с форматом $googleCodes.В оригинальной статье есть следующее:

private static byte[] CssidPostBody = new byte[] { 34, 0, 98, 60, 10, 19, 34,
            2, 101, 110, 186, 211, 240, 59, 10, 8, 1, 16, 1, 40, 1, 48, 0, 56, 1, 18,
            29, 10, 9, 105, 80, 104, 111, 110, 101, 32, 79, 83, 18, 3, 52, 46, 49, 
            26, 0, 34, 9, 105, 80, 104, 111, 110, 101, 51, 71, 83, 26, 2, 8, 2, 34,
            2, 8, 1 };

Я понимаю, что это проблема, которая потенциально очень уникальна, но я надеюсь, что кто-то, имеющий опыт работы с массивами байтов .NET, мог бы указать мне правильное направление.

1 Ответ

1 голос
/ 04 декабря 2011
$googleCodes = array(34,0,98,60,10,19,34,2,101,110,186,211,240,59,10,8,1,16,1,40,1,48,0,56,1,18,29,10,9,105,80,104,111,110,101,32,79,83,18,3,52,46,49,26,0,34,9,105,80,104,111,110,101,51,71,83,26,2,8,2,34,2,8,1);

foreach ($googleCodes as $n=>$char) { $googleCodes[$n] = chr($char); }

Я думаю, что это коды для символов, и я подозреваю, что они отправляются в двоичном виде.Либо так, либо они должны быть дополнены нулями.Можете ли вы предоставить ссылку на оригинальный метод на иностранном языке?Мы просто хотим подражать их методу.Я думаю, что ваши цифры работают вместе, так что это вопрос нужного формата.

...