You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.3 KiB
PHTML

<?php
/**
* Google AdSense.
*
* @since 1.0.34
* @package RankMathPro
* @subpackage RankMathPro\modules
* @author Rank Math <support@rankmath.com>
*/
namespace RankMathPro\Google;
use RankMath\Google\Api;
use RankMath\Helpers\Security;
use RankMath\Analytics\Workflow\Base;
use WP_Error;
defined( 'ABSPATH' ) || exit;
/**
* AdSense class.
*/
class Adsense {
/**
* Get adsense accounts.
*
* @return array
*/
public static function get_adsense_accounts() {
$accounts = [];
$response = Api::get()->http_get( 'https://adsense.googleapis.com/v2/accounts' );
if (
! Api::get()->is_success() ||
isset( $response->error ) ||
! isset( $response['accounts'] ) ||
! is_array( $response['accounts'] )
) {
return $accounts;
}
foreach ( $response['accounts'] as $account ) {
$accounts[ $account['name'] ] = [
'name' => $account['displayName'],
];
}
return $accounts;
}
/**
* Query adsense data from google client api.
*
* @param string $start_date Start date.
* @param string $end_date End date.
*
* @return array
*/
public static function get_adsense( $options = [] ) {
$account_id = isset( $options['account_id'] ) ? $options['account_id'] : self::get_adsense_id();
$start_date = isset( $options['start_date'] ) ? $options['start_date'] : '';
$end_date = isset( $options['end_date'] ) ? $options['end_date'] : '';
if ( ! $account_id || ! $start_date || ! $end_date ) {
return false;
}
$request = Security::add_query_arg_raw(
[
'startDate.year' => gmdate( 'Y', strtotime( $start_date ) ),
'startDate.month' => gmdate( 'n', strtotime( $start_date ) ),
'startDate.day' => gmdate( 'j', strtotime( $start_date ) ),
'endDate.year' => gmdate( 'Y', strtotime( $end_date ) ),
'endDate.month' => gmdate( 'n', strtotime( $end_date ) ),
'endDate.day' => gmdate( 'j', strtotime( $end_date ) ),
'dimensions' => 'DATE',
'currencyCode' => 'USD',
'metrics' => 'ESTIMATED_EARNINGS',
],
'https://adsense.googleapis.com/v2/' . $account_id . '/reports:generate'
);
$workflow = 'adsense';
Api::get()->set_workflow( $workflow );
$response = Api::get()->http_get( $request );
Api::get()->log_failed_request( $response, $workflow, $start_date, func_get_args() );
if ( ! Api::get()->is_success() ) {
return new WP_Error( 'adsense_api_fail', 'Google AdSense API request failed.' );
}
if ( ! isset( $response['rows'] ) ) {
return false;
}
return $response['rows'];
}
/**
* Get adsense id.
*
* @return string
*/
public static function get_adsense_id() {
static $rank_math_adsense_id;
if ( is_null( $rank_math_adsense_id ) ) {
$options = get_option( 'rank_math_google_analytic_options' );
$rank_math_adsense_id = ! empty( $options['adsense_id'] ) ? $options['adsense_id'] : false;
}
return $rank_math_adsense_id;
}
/**
* Is adsense connected.
*
* @return boolean
*/
public static function is_adsense_connected() {
$account = wp_parse_args(
get_option( 'rank_math_google_analytic_options' ),
[ 'adsense_id' => '' ]
);
return ! empty( $account['adsense_id'] );
}
}