PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / modules / gadsense / includes / adsense-report-api.php
advanced-ads / modules / gadsense / includes Last commit date
types 1 year ago adsense-report-api.php 1 year ago class-ad-type-adsense.php 3 months ago class-adsense-report-data.php 1 year ago class-adsense-report.php 1 year ago class-gadsense-data.php 1 year ago class-mapi.php 1 year ago class-network-adsense.php 1 year ago
adsense-report-api.php
173 lines
1 <?php // phpcs:ignore WordPress.Files.FileName
2 /**
3 * Report API for AdSense.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.48.2
8 */
9
10 /**
11 * Retrieve report data from Google.
12 */
13 class Advanced_Ads_AdSense_Report_Api {
14
15 /**
16 * Version of the AdSense Management API in use (for getting fresh data).
17 *
18 * @var string
19 */
20 const API_VERSION = '2.0';
21
22 /**
23 * Report API endpoint.
24 *
25 * @var string
26 */
27 private $endpoint_url;
28
29 /**
30 * Report type
31 *
32 * @var string
33 */
34 private $type;
35
36 /**
37 * The API access token or an error array.
38 *
39 * @var array|string
40 */
41 private $access_token;
42
43 /**
44 * The current connected AdSense account.
45 *
46 * @var string
47 */
48 private $publisher_id;
49
50 /**
51 * Instance constructor.
52 *
53 * @param string $type report type.
54 */
55 public function __construct( $type ) {
56 $publisher_id = Advanced_Ads_AdSense_Data::get_instance()->get_adsense_id();
57 $this->type = $type;
58 $this->access_token = Advanced_Ads_AdSense_MAPI::get_access_token( $publisher_id );
59 $this->publisher_id = $publisher_id;
60
61 $endpoint_args = [
62 'startDate.year' => '%SY%', // Start date's year - integer (4 digits).
63 'startDate.month' => '%SM%', // Start date's month - integer.
64 'startDate.day' => '%SD%', // Start date's integer - integer.
65 'endDate.year' => '%EY%', // End date's year - integer (4 digits).
66 'endDate.month' => '%EM%', // End date's month - integer.
67 'endDate.day' => '%ED%', // End date's integer - integer.
68 'dimension1' => '%DIM%', // Primary reporting dimension (domain name or ad unit name).
69 'dimension2' => 'DATE', // Secondary reporting dimension.
70 'metrics' => 'ESTIMATED_EARNINGS', // Report metrics.
71 'reportingTimeZone' => 'ACCOUNT_TIME_ZONE', // Time zone used in report data.
72 ];
73 $this->endpoint_url = str_replace( [ 'dimension1', 'dimension2' ], 'dimensions', add_query_arg( $endpoint_args, 'https://adsense.googleapis.com/v2/accounts/%pubid%/reports:generate' ) );
74 }
75
76 /**
77 * Checks if the current setup has an access token.
78 *
79 * @return bool true if there is a token.
80 */
81 public function has_token() {
82 return is_string( $this->access_token );
83 }
84
85 /**
86 * Get access token related error message.
87 *
88 * @return array Array of error messages.
89 */
90 public function get_token_error() {
91 return is_string( $this->access_token ) ? [] : $this->access_token;
92 }
93
94 /**
95 * Check if there is an error related to access tokens.
96 *
97 * @return bool true if any error happened when requesting an access token.
98 */
99 public function has_token_error() {
100 return ! is_string( $this->access_token );
101 }
102
103 /**
104 * Perform the actual call to Google for fresh data.
105 *
106 * @return array associative array with the response or with error data in case of failure.
107 */
108 public function call_google() {
109 $dimension = 'unit' === $this->type ? 'AD_UNIT_ID' : 'DOMAIN_NAME';
110 $today = new DateTimeImmutable();
111 $start_date = $today->sub( date_interval_create_from_date_string( '28 days' ) );
112 // Replace placeholder in the endpoint with actual arguments.
113 $url = str_replace(
114 [
115 '%pubid%',
116 '%DIM%',
117 '%SY%',
118 '%SM%',
119 '%SD%',
120 '%EY%',
121 '%EM%',
122 '%ED%',
123 ],
124 [
125 $this->publisher_id,
126 $dimension,
127 $start_date->format( 'Y' ),
128 $start_date->format( 'n' ),
129 $start_date->format( 'j' ),
130 $today->format( 'Y' ),
131 $today->format( 'n' ),
132 $today->format( 'j' ),
133 ],
134 $this->endpoint_url
135 );
136
137 $headers = [
138 'Authorization' => 'Bearer ' . $this->access_token,
139 ];
140
141 $response = wp_remote_get( $url, [ 'headers' => $headers ] );
142 Advanced_Ads_AdSense_MAPI::log( 'Fetched AdSense Report from ' . $url );
143
144 if ( is_wp_error( $response ) ) {
145 return [
146 'status' => false,
147 /* translators: AdSense ID. */
148 'msg' => sprintf( esc_html__( 'Error while retrieving report for "%s".', 'advanced-ads' ), $this->publisher_id ),
149 'raw' => $response->get_error_message(),
150 ];
151 }
152
153 $response_body = json_decode( $response['body'], true );
154
155 if ( ! isset( $response_body['startDate'] ) ) {
156 return [
157 'status' => false,
158 /* translators: AdSense ID. */
159 'msg' => sprintf( esc_html__( 'Invalid response while retrieving report for "%s".', 'advanced-ads' ), $this->publisher_id ),
160 'raw' => $response['body'],
161 ];
162 }
163
164 $response_body['api_version'] = self::API_VERSION;
165 $response_body['timestamp'] = time();
166
167 return [
168 'status' => true,
169 'response_body' => $response_body,
170 ];
171 }
172 }
173