Google AdSense API每次要求登录 [英] Google AdSense API asking for log in each time

查看:109
本文介绍了Google AdSense API每次要求登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我整理了Google AdSense API,以获取收益。但是,我希望它在不登录的情况下在后台运行。它要求我每次运行时都登录。我有脱机设置以及存储令牌。我不确定为什么它总是要求我登录。我在GoDaddy上执行每晚一次的Cron作业。代码如下:

I've put together the Google AdSense API for earnings which works. However, I want it to run in the background without me logging in. It asks me to log in each time it's ran. I have the offline set as well as store the token. I'm not sure why it keeps asking me to log in. I have this running on a nightly cron job on GoDaddy. Code is below:

<?php
include('config.php');

require_once 'templates/base.php';
session_start();

set_include_path('/path/to/clientlib' . PATH_SEPARATOR . get_include_path());
set_include_path('/path/to/clientlib' . PATH_SEPARATOR . get_include_path());
require_once 'Google/Client.php';
require_once 'Google/Service/AdSense.php';
require_once 'Google/Service/AdSense.php';
// Autoload example classes.

include 'examples/GetAllAccounts.php';
include 'examples/GetAccountTree.php';
include 'examples/GetAllAdClients.php';
include 'examples/GetAllAdUnits.php';
include 'examples/GetAllCustomChannelsForAdUnit.php';

include 'examples/GetAllCustomChannels.php';
include 'examples/GetAllAdUnitsForCustomChannel.php';
include 'examples/GetAllUrlChannels.php';//GetAllUrlChannels
include 'examples/GenerateReport.php';//GenerateReport
include 'examples/GenerateReportWithPaging.php';//GenerateReportWithPaging
include 'examples/FillMissingDatesInReport.php';//FillMissingDatesInReport
include 'examples/CollateReportData.php';//CollateReportData
include 'examples/GetAllSavedReports.php';//GetAllSavedReports
include 'examples/GenerateSavedReport.php';//GenerateSavedReport
include 'examples/GetAllSavedAdStyles.php';//GetAllSavedAdStyles
include 'examples/GetAllAlerts.php';//GetAllAlerts
include 'examples/GetAllDimensions.php';//GetAllDimensions
include 'examples/GetAllMetrics.php';//GetAllMetrics
// Max results per page.
define('MAX_LIST_PAGE_SIZE', 50, true);
define('MAX_REPORT_PAGE_SIZE', 50, true);
// Configure token storage on disk.
// If you want to store refresh tokens in a local disk file, set this to true.
define('STORE_ON_DISK', false, true);
define('TOKEN_FILENAME', 'tokens.dat', true);
// Set up authentication.
$client = new Google_Client();
$client->addScope('https://www.googleapis.com/auth/adsense.readonly');
$client->setAccessType('offline');
// Be sure to replace the contents of client_secrets.json with your developer
// credentials.
$client->setAuthConfigFile('client_secrets.json');
// Create service.
$service = new Google_Service_AdSense($client);
// If we're logging out we just need to clear our local access token.
// Note that this only logs you out of the session. If STORE_ON_DISK is
// enabled and you want to remove stored data, delete the file.

if (isset($_REQUEST['logout'])) {
    unset($_SESSION['access_token']);
}
// If we have a code back from the OAuth 2.0 flow, we need to exchange that
// with the authenticate() function. We store the resultant access token
// bundle in the session (and disk, if enabled), and redirect to this page.
if (isset($_GET['code'])) {
    $client->authenticate($_GET['code']);
// Note that "getAccessToken" actually retrieves both the access and refresh
// tokens, assuming both are available.
    $_SESSION['access_token'] = $client->getAccessToken();
    if (STORE_ON_DISK) {
        file_put_contents(TOKEN_FILENAME, $_SESSION['access_token']);
    }
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
    exit;
}
// If we have an access token, we can make requests, else we generate an
// authentication URL.
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
    $client->setAccessToken($_SESSION['access_token']);
} else if (STORE_ON_DISK && file_exists(TOKEN_FILENAME) &&
    filesize(TOKEN_FILENAME) > 0) {
// Note that "setAccessToken" actually sets both the access and refresh token,
// assuming both were saved.
    $client->setAccessToken(file_get_contents(TOKEN_FILENAME));
    $_SESSION['access_token'] = $client->getAccessToken();
} else {
// If we're doing disk storage, generate a URL that forces user approval.
// This is the only way to guarantee we get back a refresh token.
    if (STORE_ON_DISK) {
        $client->setApprovalPrompt('force');
    }
    $authUrl = $client->createAuthUrl();
}
//echo pageHeader('Get Final Report');
//echo "stre on disk = " . STORE_ON_DISK . "<br />";
echo '<div><div class="request">';
if (isset($authUrl)) {
    echo '<a class="login" href="' . $authUrl . '">Login !</a>';
} else {
    echo '<a class="logout" href="?logout">Logout</a>';
};
echo '</div>';
if ($client->getAccessToken()) {
    echo '<pre class="result">';
// Now we're signed in, we can make our requests.
    $adsense = makeRequests($service);
    /* Note that we re-store the access_token bundle, just in case anything
    changed during the request - the main thing that might happen here is the
    access token itself is refreshed if the application has offline access. */
    $_SESSION['access_token'] = $client->getAccessToken();
    echo '</pre>';
}
echo '</div>';
echo pageFooter(__FILE__);
// Makes all the API requests.
function makeRequests($service) {
    print "\n";
    $accounts = GetAllAccounts::run($service, MAX_LIST_PAGE_SIZE);
    echo '<div class="Account">Account No. '.$accounts[0]["id"].' Details</div>';

    if (isset($accounts) && !empty($accounts)) {
// Get an example account ID, so we can run the following sample.
        $exampleAccountId = $accounts[0]['id'];
        GetAccountTree::run($service, $exampleAccountId);
        $adClients =
            GetAllAdClients::run($service, $exampleAccountId, MAX_LIST_PAGE_SIZE);
        ;

        ?>
        <table id="myTable" class="tablesorter" border="1px solid">
            <thead>
            <tr>
                <th>AdClient ID</th>
                <th>AdClient Code</th>
            </tr>
            </thead>
            <tbody>
            <?php
            foreach($adClients as $adClients){

                ?>
                <tr><td><?php echo $adClients['id']; ?></td><td><?php echo $adClients['productCode']; ?></td></tr>

            <?php
            }
            ?>
            </tbody>
        </table>
        <?php

        if (isset($adClients) && !empty($adClients)) {
// Get an ad client ID, so we can run the rest of the samples.
            $exampleAdClient = end($adClients);

            $exampleAdClientId = $adClients['id'];

            $adUnits = GetAllAdUnits::run($service, $exampleAccountId,
                $exampleAdClientId, MAX_LIST_PAGE_SIZE);


            ?>
            <table id="myTable_1" class="tablesorter" border="1px solid">
                <thead>
                <tr>
                    <th>AdUnit name</th>
                    <th>AdUnit Code</th>
                    <th>AdUnit ID</th>
                    <th>Status</th>
                    <th>Detail</th>

                </tr>
                </thead>
                <tbody>
                <?php
                foreach($adUnits as $adUnits){

                    if($adUnits['status']=='ACTIVE' ||$adUnits['status']=='NEW'){  ?>
                        <tr>
                            <td><?php echo $adUnits['name']; ?></td>
                            <td><?php echo $adUnits['code']; ?></td>
                            <td><?php echo $adUnits['id']; ?></td>
                            <td><?php echo $adUnits['status']; ?></td>
                            <td class="link"><a href="<?php echo $redirect.'?ad_name='.$adUnits['name'];?>">Get detail</a></td>
                        </tr>
                    <?php
                    }
                }
                ?>
                </tbody>
            </table>
            <?php
            if (isset($_REQUEST['ad_name'])) {
                //die('function shoul be calle dhere ');

                $Get_reports=GenerateReport::run($service, $exampleAccountId, $exampleAdClientId,$_REQUEST['ad_name']);
            }
            else {
                $Get_reports=GenerateReport::run($service, $exampleAccountId, $exampleAdClientId);
            }
            //print_r($Get_reports);

            ?>
            <table id="myTable_2" class="tablesorter" border="1px solid">
                <thead>
                <tr>
                    <?php foreach($Get_reports['headers'] as $headers){
                        ?>
                        <th><?php printf('%25s', $headers['name']); ?></th>
                    <?php
                    }
                    ?>
                </tr>
                </thead>
                <?php

                foreach($Get_reports['rows'] as $rows) {
                    ?>
                    <tr>
                        <?php
                        foreach($rows as $col) {
                            ?>
                            <td><?php echo $col; $adsense = $col; ?></td>

                        <?php

                        }   ?>
                    </tr>
                <?php
                }
                ?>

            </table>

            <table id="myTable_3" class="tablesorter" border="1px solid">
                <thead>
                <tr>
                    <?php
                    foreach($Get_reports['headers'] as $headers){
                        ?>
                        <th><?php echo 'Total '.$headers['name']; ?></th>
                    <?php
                    }
                    ?>
                </tr>
                </thead>
                <tbody>
                <tr>
                    <?php
                    foreach($Get_reports['totals'] as $totals){

                        ?>
                        <td><?php echo $totals; ?></td>
                    <?php
                    }
                    ?>
                </tr>
                </tbody>
            </table>
            <?php
            //die('Report Generated For Last 7 Days');


        }
    }
    //echo "adsense = " . $adsense . "<br />";
    return $adsense;
}


推荐答案

运行一次手动登录并存储刷新令牌,后续的身份验证请求将使用该存储的令牌,而不会再次提示您。

Run the manual log in once and store the refresh token, subsequent auth requests would use that stored token and won't prompt you again.

应该简单地将其更改为true,然后点击

It should be as simple as changing this to true and then hitting the page once using the right account.

// If you want to store refresh tokens in a local disk file, set this to true.
define('STORE_ON_DISK', true, true);

这篇关于Google AdSense API每次要求登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆