Я пытаюсь получить все профили для некоторого аккаунта Google Analytics на PHP. Я использую класс HTTP_Request2 из PEAR (с адаптером cURL, но я также пытался с Socket) и продолжаю получать ошибку «Целевой канал доступен только для чтения», когда я пытаюсь получить данные из https://www.google.com/analytics/feeds/accounts/default
Я использую метод авторизации ClientLogin и, насколько я вижу, правильный заголовок авторизации отправляется с каждым запросом API (я использовал класс наблюдателя для проверки отправляемых заголовков).
Вот код, который я использую (урезанная, тестовая версия):
require 'HTTP/Request2.php';
class GA {
protected $email;
protected $passwd;
protected $auth_code;
public function __construct($email = '', $passwd = '') {
$this->email = $email;
$this->passwd = $passwd;
}
public function authorize($email = '', $password = '', $force = false) {
if (!$force and !empty($this->auth_code) and $email == $this->email and $password == $this->passwd) {
return true;
}
unset($this->auth_code);
!empty($email) or $email = $this->email;
!empty($password) or $password = $this->passwd;
if (empty($email) or empty($password)) {
return false;
}
try {
$response = $this->post(
'https://www.google.com/accounts/ClientLogin',
array(
'accountType' => 'GOOGLE',
'Email' => $this->email = $email,
'Passwd' => $this->passwd = $password,
'service' => 'analytics'
)
);
if ($response->getStatus() == 200 and preg_match('/(?:^|[\n\r])Auth=(.*?)(?:[\n\r]|$)/', $response->getBody(), $match)) {
$this->auth_code = $match[1];
echo $this->auth_code;
return true;
}
} catch (HTTP_Request2_Exception $e) {
return false;
}
}
public function call($url, array $params = array(), array $headers = array()) {
if (!$this->auth_code && !$this->authorize($this->email, $this->passwd, true)) {
return false;
}
$headers['Authorization'] = 'GoogleLogin auth=' . $this->auth_code;
return $this->post($url, $params, $headers);
}
protected function post($url, array $params = array(), array $headers = array()) {
$headers['GData-Version'] = '2';
$request = new HTTP_Request2($url);
$request->setAdapter('curl');
$request->setConfig('ssl_verify_peer', false);
$request->setHeader($headers);
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->addPostParameter($params);
return $request->send();
}
}
$ga = new GA('*********@gmail.com', '*********');
var_dump($ga->call('https://www.google.com/analytics/feeds/accounts/default'));
Заранее спасибо!