get_json_params(); $analyzeUrl = ! empty( $body['url'] ) ? esc_url_raw( urldecode( $body['url'] ) ) : null; $refreshResults = ! empty( $body['refresh'] ) ? (bool) $body['refresh'] : false; $analyzeOrHomeUrl = ! empty( $analyzeUrl ) ? $analyzeUrl : home_url(); $responseCode = null === aioseo()->core->cache->get( 'analyze_site_code' ) ? [] : aioseo()->core->cache->get( 'analyze_site_code' ); $responseBody = null === aioseo()->core->cache->get( 'analyze_site_body' ) ? [] : aioseo()->core->cache->get( 'analyze_site_body' ); if ( empty( $responseCode ) || empty( $responseCode[ $analyzeOrHomeUrl ] ) || empty( $responseBody ) || empty( $responseBody[ $analyzeOrHomeUrl ] ) || $refreshResults ) { $token = aioseo()->sensitiveOptions->get( 'siteAnalysisConnectToken' ); $url = defined( 'AIOSEO_ANALYZE_URL' ) ? AIOSEO_ANALYZE_URL : 'https://analyze.aioseo.com'; $response = aioseo()->helpers->wpRemotePost( $url . '/v3/analyze/', [ 'timeout' => 60, 'headers' => [ 'X-AIOSEO-Key' => $token, 'Content-Type' => 'application/json' ], 'body' => wp_json_encode( [ 'url' => $analyzeOrHomeUrl ] ), ] ); $responseCode[ $analyzeOrHomeUrl ] = wp_remote_retrieve_response_code( $response ); $responseBody[ $analyzeOrHomeUrl ] = json_decode( wp_remote_retrieve_body( $response ), true ); aioseo()->core->cache->update( 'analyze_site_code', $responseCode, 10 * MINUTE_IN_SECONDS ); aioseo()->core->cache->update( 'analyze_site_body', $responseBody, 10 * MINUTE_IN_SECONDS ); } if ( 200 !== $responseCode[ $analyzeOrHomeUrl ] || empty( $responseBody[ $analyzeOrHomeUrl ]['success'] ) || ! empty( $responseBody[ $analyzeOrHomeUrl ]['error'] ) ) { return new \WP_REST_Response( [ 'success' => false, 'response' => $responseBody[ $analyzeOrHomeUrl ] ], 400 ); } if ( $analyzeUrl ) { $results = $responseBody[ $analyzeOrHomeUrl ]['results']; SeoAnalyzerResult::addResults( [ 'results' => $results, 'score' => $responseBody[ $analyzeOrHomeUrl ]['score'] ], $analyzeUrl ); // Get all competitors results parsed and sanitized. $result = SeoAnalyzerResult::getCompetitorsResults(); return new \WP_REST_Response( $result, 200 ); } $results = $responseBody[ $analyzeOrHomeUrl ]['results']; SeoAnalyzerResult::addResults( [ 'results' => $results, 'score' => $responseBody[ $analyzeOrHomeUrl ]['score'] ] ); // Mark SEO Checklist item as completed. aioseo()->seoChecklist->completeCheck( 'runHomepageAudit' ); // Get all results parsed and sanitized. $allResults = SeoAnalyzerResult::getResults(); return new \WP_REST_Response( $allResults, 200 ); } /** * Deletes the analyzed site for SEO. * * @since 4.0.0 * * @param \WP_REST_Request $request The REST Request * @return \WP_REST_Response The response. */ public static function deleteSite( $request ) { $body = $request->get_json_params(); $analyzeUrl = ! empty( $body['url'] ) ? esc_url_raw( urldecode( $body['url'] ) ) : null; SeoAnalyzerResult::deleteByUrl( $analyzeUrl ); return new \WP_REST_Response( SeoAnalyzerResult::getCompetitorsResults(), 200 ); } /** * Analyzes the title for SEO. * * @since 4.1.2 * * @param \WP_REST_Request $request The REST Request. * @return \WP_REST_Response The response. */ public static function analyzeHeadline( $request ) { $body = $request->get_json_params(); $headline = ! empty( $body['headline'] ) ? sanitize_text_field( $body['headline'] ) : ''; $shouldStoreHeadline = ! empty( $body['shouldStoreHeadline'] ) ? rest_sanitize_boolean( $body['shouldStoreHeadline'] ) : false; if ( empty( $headline ) ) { return new \WP_REST_Response( [ 'success' => false, 'message' => __( 'Please enter a valid headline.', 'all-in-one-seo-pack' ) ], 400 ); } $result = aioseo()->standalone->headlineAnalyzer->getResult( $headline ); if ( ! $result['analysed'] ) { return new \WP_REST_Response( [ 'success' => false, 'message' => $result['result']->msg ], 400 ); } $headlines = aioseo()->internalOptions->internal->headlineAnalysis->headlines; $headlines = array_reverse( $headlines, true ); // Remove a headline from the list if it already exists. // This will ensure the new analysis is the first and open/highlighted. if ( array_key_exists( $headline, $headlines ) ) { unset( $headlines[ $headline ] ); } $headlines[ $headline ] = wp_json_encode( $result ); $headlines = array_reverse( $headlines, true ); // Store the headlines with the latest one. if ( $shouldStoreHeadline ) { aioseo()->internalOptions->internal->headlineAnalysis->headlines = $headlines; } return new \WP_REST_Response( $headlines, 200 ); } /** * Deletes the analyzed Headline for SEO. * * @since 4.1.6 * * @param \WP_REST_Request $request The REST Request. * @return \WP_REST_Response The response. */ public static function deleteHeadline( $request ) { $body = $request->get_json_params(); $headline = sanitize_text_field( $body['headline'] ); $headlines = aioseo()->internalOptions->internal->headlineAnalysis->headlines; unset( $headlines[ $headline ] ); // Reset the headlines. aioseo()->internalOptions->internal->headlineAnalysis->headlines = $headlines; return new \WP_REST_Response( $headlines, 200 ); } /** * Get competitors results. * * @since 4.8.3 * * @return \WP_REST_Response The response. */ public static function getCompetitorsResults() { $results = SeoAnalyzerResult::getCompetitorsResults(); return new \WP_REST_Response( [ 'success' => true, 'result' => $results, ], 200 ); } }