Как получить информацию Google Contacts с помощью Google OAuth?

Я использовал TextWrangler, это довольно достойно.

, Но я ДЕЙСТВИТЕЛЬНО пропускаю Поиск и Замену и другие возможности UltraEdit... достаточно, что обычно стоит разжечь Параллели для использования его вместо этого (UltraEdit работает плохо под Вином в данный момент).

10
задан chris 10 November 2009 в 08:34
поделиться

3 ответа

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

1
ответ дан 3 December 2019 в 22:00
поделиться

Для общих принципов OAuth для доступа к Google вам может быть очень полезна площадка OAuth Google (контакты включены там).

Это очень простой пример (используя расширение php oauth pecl и simplexml, он просто выводит имена 25 первых контактов):

<?php
$cons_key="your consumer key";
$cons_sec="your consumer secret";

$callback="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$req_token_url="https://www.google.com/accounts/OAuthGetRequestToken";
$auth_token_url="https://www.google.com/accounts/OAuthAuthorizeToken";
$acc_token_url="https://www.google.com/accounts/OAuthGetAccessToken";

$scope="https://www.google.com/m8/feeds/";
$scopes=urlencode($scope);
$req_scope_token_url=$req_token_url."?scope=".$scopes;
$endpoint="https://www.google.com/m8/feeds/contacts/default/full/";

session_start();

if(!isset($_GET['oauth_token']) && $_SESSION['state']==1) $_SESSION['state'] = 0;

try {
    $oauth = new OAuth($cons_key,$cons_sec);
    if(!isset($_GET['oauth_token']) && !$_SESSION['state']) {
        $oauth = new OAuth($cons_key,$cons_sec);
        $oauth->setRequestEngine(OAUTH_REQENGINE_CURL);
        $request_token_info = $oauth->getRequestToken($req_scope_token_url,$callback);
        if(!empty($request_token_info)) {
            $_SESSION['token']=$request_token_info['oauth_token'];
            $_SESSION['secret']=$request_token_info['oauth_token_secret'];
            $_SESSION['state']=1;
            header('Location: '.$auth_token_url.'?oauth_token='.$_SESSION['token']);
            exit;
        }
    } else if($_SESSION['state']==1) {
        $oauth->setToken($_GET['oauth_token'],$_SESSION['secret']);
        $access_token_info = $oauth->getAccessToken($acc_token_url);
        $_SESSION['state'] = 2;
        $_SESSION['token'] = $access_token_info['oauth_token'];
        $_SESSION['secret'] = $access_token_info['oauth_token_secret'];
    }

    $oauth->fetch($endpoint);
    parseAtom($oauth->getLastResponse());

} catch(OAuthException $E) {
    print_r($E);
}

function parseAtom($atomstring) {
    global $oauth;
    $atom=simplexml_load_string($atomstring);
    foreach ($atom->entry as $entry) {
        print $entry->title.", ";
    }
}
?>

Вы можете увидеть приведенный выше код в действии здесь .

Установка (настройка) расширения oauth pecl может быть сложной задачей, вам , возможно, придется проверить свой php.ini и / или указать требуемый двигатель .

11
ответ дан 3 December 2019 в 22:00
поделиться

Хорошо. во-первых, futtta, у меня были некоторые проблемы с pecl и грушей. поэтому я решил придерживаться ZEND. Я очень признателен за то, что вы опубликовали, ваш код все же помог мне :-)....

вот что у меня есть на данный момент, взяв часть кода со страницы ibm, опубликованной выше, но изменив его для использования oauth чтобы войти.

<?php

session_start();

require_once 'common.php';
require_once 'Zend/Oauth/Consumer.php';
require_once 'Zend/Crypt/Rsa/Key/Private.php'; 

require_once 'Zend/Gdata.php';
require_once 'Zend/Gdata/Query.php';




$oauthOptions = array(
    'requestScheme'        => Zend_Oauth::REQUEST_SCHEME_HEADER,
    'version'              => '1.0',
    'consumerKey'          => 'PUT KEY HERE',
    'consumerSecret'       => 'PUT KEY HERE',
    'signatureMethod'      => 'HMAC-SHA1',
    'requestTokenUrl'      => 'https://www.google.com/accounts/OAuthGetRequestToken',
    'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken',
    'accessTokenUrl'       => 'https://www.google.com/accounts/OAuthGetAccessToken'
);


?>


<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Listing contacts</title>
    <style>
    body {
      font-family: Verdana;      
    }
    div.name {
      color: red; 
      text-decoration: none;
      font-weight: bolder;  
    }
    div.entry {
      display: inline;
      float: left;
      width: 400px;
      height: 150px;
      border: 2px solid; 
      margin: 10px;
      padding: 5px;
    }
    td {
      vertical-align: top;
    }
    </style>    
  </head>
  <body>

     <?



 $consumer = new Zend_Oauth_Consumer($oauthOptions); 

if (!isset($_SESSION['ACCESS_TOKEN_GOOGLE'])) { 
    if (!empty($_GET)) { 
        $token = $consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN_GOOGLE'])); 
        $_SESSION['ACCESS_TOKEN_GOOGLE'] = serialize($token); 
    } else { 
        $token = $consumer->getRequestToken(array('scope'=>'http://www.google.com/m8/feeds')); 
        $_SESSION['REQUEST_TOKEN_GOOGLE'] = serialize($token); 
        $consumer->redirect(); 
        exit; 
    } 
} else { 
    $token = unserialize($_SESSION['ACCESS_TOKEN_GOOGLE']); 
    //$_SESSION['ACCESS_TOKEN_GOOGLE'] = null; 
} 



$http  = $token->getHttpClient($oauthOptions);
$gdata = new Zend_Gdata($http);
$gdata->setMajorProtocolVersion(3);

$gdata->getHttpClient()->setRequestScheme(Zend_Oauth::REQUEST_SCHEME_QUERYSTRING);


$query = new Zend_Gdata_Query('http://www.google.com/m8/feeds/contacts/default/full?);
//$query->setMaxResults(10);
$feed = $gdata->getFeed($query);

?>



      <h2><?php echo $feed->title; ?></h2>
      <div>
      <?php echo $feed->totalResults; ?> contact(s) found.
      </div>

      <?php
      // parse feed and extract contact information
      // into simpler objects
      $results = array();
      foreach($feed as $entry){
        $xml = simplexml_load_string($entry->getXML());
        $obj = new stdClass;
        $obj->name = (string) $entry->title;
        $obj->orgName = (string) $xml->organization->orgName; 
        $obj->orgTitle = (string) $xml->organization->orgTitle; 

        foreach ($xml->email as $e) {
          $obj->emailAddress[] = (string) $e['address'];
        }

        foreach ($xml->phoneNumber as $p) {
          $obj->phoneNumber[] = (string) $p;
        }
        foreach ($xml->website as $w) {
          $obj->website[] = (string) $w['href'];
        }

        $results[] = $obj;  
      }


    ?>

    <?php
    // display results
    foreach ($results as $r) {
    ?>
    <div class="entry">
      <div class="name"><?php echo (!empty($r->name)) ? 
       $r->name : 'Name not available'; ?></div>
      <div class="data">
        <table>
          <tr>
            <td>Organization</td>
            <td><?php echo $r->orgName; ?></td>
          </tr>
          <tr>
            <td>Email</td>
            <td><?php echo @join(', ', $r->emailAddress); ?></td>
          </tr>
          <tr>
            <td>Phone</td>
            <td><?php echo @join(', ', $r->phoneNumber); ?></td>
          </tr>
          <tr>
            <td>Web</td>
            <td><?php echo @join(', ', $r->website); ?></td>
          </tr>
        </table>
      </div>
    </div>
    <?php
    }
    ?>

  </body>
</html>

Есть некоторые проблемы, для меня он публикует только 25 результатов, и я не могу заставить работать setmaxresults... кажется, есть проблемы с ZEND для этого... если кто-то знает обходной путь , пожалуйста, опубликуйте.

б

1
ответ дан 3 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: