2015-06-09 5 views
1

Я не могу получить контакты пользователя google с помощью shuttlecloud. Я делал все в соответствии с документацией челнока и google. Я получил контакт пользователя с челноком, используя аутентификацию на основе пароля (например, mail.ru). Я создаю URL и поместить его в браузер https://accounts.google.com/o/oauth2/auth?redirect_uri=http://localhost:80&response_type=code&client_id=my_id.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/contacts.readonly&access_type=offlineПолучение контактов google с помощью shuttlecloud

я получить код и скопировать скрипт:

my $url = 'https://demo.api.shuttlecloud.com/beta/load'; 
my $auth_url = 'https://demo.api.shuttlecloud.com/beta/auth/capabilities'; 
my $appid = 'my_shuttlecloud_id'; 
my $ts = int(time); 
my $secret = 'my_shuttlecloud_secret'; 
my $sig = sha256_hex("{".$appid.":".$secret.":".$ts."}"); 
my $url_tok = 'https://www.googleapis.com/oauth2/v3/token'; 
my $code = '4/GmVQi8AgNzajSo0mTudUBumjHyHhhb9EBxN8ufG6z34.QjE7Q6MjmUweWmFiZwPfH01FreiwmwI'; 
my $id = 'my_google_id'; 
my $sec = 'my_google_secret'; 
my $redirect = 'http://localhost:80'; 
my $grant_type = 'authorization_code'; 

my $response = $ua->request(POST $url_tok, 
     Content_Type => 'application/x-www-form-urlencoded', 
     Content  => [ code => $code, 
         redirect_uri => $redirect, 
         client_id => $id, 
         client_secret => $sec, 
         grant_type => $grant_type, 
         ]); 
my $cod = $response->content; 
my $decoded_json = decode_json($cod); 
my $token = @{$decoded_json}{'access_token'}; 
my $email = '[email protected]'; 
my $data = '{ 
    "contactsextraction": { 
     "sourceaccount": { 
      "userid": { 
         "email": "'.$email.'" 
      }, 
      "auth": { 
      "3loauth": "'.$token.'" 
      } 
     } 
    } 
}'; 

$url = $url."?appid=".$appid."&ts=".$ts."&sig=".$sig; 
my $req = HTTP::Request->new(POST => $url); 
$req->content($data); 
my $resp = $ua->request($req); 
my $message; 
if ($resp->is_success) { 
    $message = $resp->decoded_content; 
} 
else { 
    print "error code: ", $resp->code, "\n"; 
    print "error message: ", $resp->message, "\n"; 
} 
$decoded_json = decode_json($message); 
my $ft_url = @{$decoded_json}{'fetchurl'}; 
$ft_url = $ft_url."?appid=".$appid."&ts=".$ts."&sig=".$sig; 
sleep 5; 
$req = HTTP::Request->new(GET => $ft_url); 
$resp = $ua->request($req); 
if ($resp->is_success) { 
    $message = $resp->decoded_content; 
} 
else { 
    print "error code: ", $resp->code, "\n"; 
    print "error message: ", $resp->message, "\n"; 
} 
$decoded_json = decode_json($message); 
print Dumper ($decoded_json); 

я получаю от ShuttleCloud JSON: 'status' => 'STARTED' без контактов. Когда я создаю токен с помощью OAuth 2.0 Playground и вставляем в скрипт - все работает. Следуя этому, я неправильно создаю токен доступа, но не могу понять, что я делаю неправильно.

ответ

0

Ответ смешно и глупо. Я не знал, что API должен быть активирован в консоли Google. Вы можете увидеть, как это сделать here.

1

в документации говорится:

Этот запрос возвращает состояние задания и распакованные контакты до этого момента времени со счета.

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

Вам нужно сделать опрос, чтобы получить контакты, пока они не будут готовы. Это довольно быстро, обычно несколько секунд, но не мгновенно. Попробуйте выполнить запрос выборки контактов в цикле, ожидающем 1 секунду, например, между каждым запросом, и вы должны получить все контакты.

+0

Я знаю это, но статус зависает в состоянии «НАЧАЛО». – user3751471

+0

Не могли бы вы скопировать и вставить код, который вы используете для опроса? – Javier

Смежные вопросы