使用Oauth 2.0从PHP中的Google网站管理员工具中检索数据

时间:2015-04-21 21:12:10

标签: oauth-2.0 google-oauth google-webmaster-tools

HEL-LO!需要检索GWT数据(首页,热门查询,内部/外部链接等)。写了一个php脚本(基于this):

    //"GetAccessCode.php" file
    $OAuth = array(
    'oauth_uri' => 'https://accounts.google.com/o/oauth2/auth',
    'client_id' => 'here is my client id',
    'client_secret' => 'here is my client secret',
    'redirect_uri' => 'http://localhost/google/GetAccessCode.php',
    'oauth_token_uri' => 'https://accounts.google.com/o/oauth2/token',
);
    $token = array(
    'access_token' => '',
    'token_type' => '',
    'expires_in' => '',
    'refresh_token' => ''
    );
$title = 'No Code';
$AuthCode = 'Null';

// see if error parameter exisits
$error = _get_url_param($_SERVER['REQUEST_URI'], 'error');
if ($error != NULL)
{   // this means the user denied api access to GWMTs
    $title = $error;
}
else
{   // does the code parameter exist?
    $AuthCode = _get_url_param($_SERVER['REQUEST_URI'], 'code');
    if ($AuthCode == NULL)
    {   // get authorization code
        $OAuth_request = _formatOAuthReq($OAuth, "https://www.google.com/webmasters/tools/feeds/sites/"); //**WHAT URI NEED TO BE HERE?**

        header('Location: ' . $OAuth_request);
        exit; // the redirect will come back to this page and $code will have a value
    }
    else
    {
        $title = 'Got Authorization Code';
        // now exchange Authorization code for access token and refresh token
        $token_response = _get_auth_token($OAuth, $AuthCode);
        $json_obj = json_decode($token_response);
        $token['access_token'] = $json_obj->access_token;
        $token['token_type'] = $json_obj->token_type;
        $token['expires_in'] = $json_obj->expires_in;
        $token['refresh_token'] = $json_obj->refresh_token;
        $sites = _get_wmt_sites_feed($token);
        echo $sites;
    }
}

// Return the list of sites registered in your Google Webmaster Tools
function _get_wmt_sites_feed($access_tokens)
{
    $post_string = "https://www.google.com/webmasters/tools/feeds/sites/"; //**WHAT URI NEED TO BE HERE?**
    $post_string .= '?v=2';
    $post_string .= '&oauth_token=' . $access_tokens['access_token'];
    $response = file_get_contents($post_string);
    return _parse_wmt_sites_response($response);
}

function _parse_wmt_sites_response($response)
{
    $xml = simplexml_load_string($response);
    $response = '<br />';
    foreach ($xml->entry as $entry)
    {
        foreach ($entry->title as $title)
        {
            $response .= "<p><a href=\"$title\" target=\"_blank\">$title</a></p>";
        }
    }
    return $response;
}

function _get_auth_token($params, $code)
{
    $url = $params['oauth_token_uri'];

    $fields = array(
        'code' => $code,
        'client_id' => $params['client_id'],
        'client_secret' => $params['client_secret'],
        'redirect_uri' => $params['redirect_uri'],
        'grant_type' => 'authorization_code'
    );
    $response = _do_post($url, $fields);
    return $response;
}

function _do_post($url, $fields)
{
    $fields_string = '';

    foreach ($fields as $key => $value)
    {
        $fields_string .= $key . '=' . $value . '&';
    }
    $fields_string = rtrim($fields_string, '&');

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

function _formatOAuthReq($OAuthParams, $scope)
{
    $uri = $OAuthParams['oauth_uri'];
    $uri .= "?client_id=" . $OAuthParams['client_id'];
    $uri .= "&redirect_uri=" . $OAuthParams['redirect_uri'];
    $uri .= "&scope=" . $scope;
    $uri .= "&response_type=code";

    return $uri;
}

function _get_url_param($url, $name)
{
    parse_str(parse_url($url, PHP_URL_QUERY), $params);
    return isset($params[$name]) ? $params[$name] : null;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><?= $title; ?></title>
    </head>
    <body>
        <h1>OAuth2 Authorization Code</h1>
        <p>Authorization Code: <?= $AuthCode; ?></p>
        <p>access token: <?=$token['access_token'];?></p>
        <p>expires in: <?=$token['expires_in'];?></p>
        <p>refresh token: <?=$token['refresh_token'];?></p>
        <p></p>

    </body>
</html>

我需要在上面的代码中使用什么URI来代替 https:// www.google.com/webmasters/tools/feeds/sites / 来检索所需的数据?在这个漂亮的代码 - https://github.com/eyecatchup/php-webmaster-tools-downloads中 - 作者使用 https:// www.google.com/webmasters/tools/downloads-list?hl=en&siteUrl=http://site.com/,但他也使用ClientLogin。我尝试在我的脚本中使用此链接,但它会产生错误,因为据我所知,这不是一个正确的范围。那么,什么是对的?

还找到了this post here,它提到了一些基本身份验证。我是Google API的初学者,请告诉我们,这是什么意思?

0 个答案:

没有答案