Advertisement
arie_cristianD

class-jnews-social-background-process

Aug 31st, 2023
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.16 KB | None | 0 0
  1. <?php
  2. /**
  3.  * @author : Jegtheme
  4.  */
  5.  
  6. if ( ! defined( 'ABSPATH' ) ) {
  7.     exit;
  8. }
  9.  
  10. /**
  11.  * Class JNews Initial Counter
  12.  */
  13. class JNews_Social_Background_Process {
  14.  
  15.     /**
  16.      * Action
  17.      *
  18.      * (default value: 'background_process')
  19.      *
  20.      * @var string
  21.      * @access protected
  22.      */
  23.     protected $action = 'jnews_social_background_process';
  24.  
  25.     /**
  26.      * @var Integer
  27.      */
  28.     private $post_id;
  29.  
  30.     /**
  31.      * @var array
  32.      */
  33.     private $result;
  34.  
  35.     /**
  36.      * @var array
  37.      */
  38.     private $socials = array( 'facebook', 'twitter', 'linkedin', 'stumbleupon', 'pinterest', 'vk' );
  39.  
  40.     /**
  41.      * @return array
  42.      */
  43.     public function get_connection_option() {
  44.         return array(
  45.             CURLOPT_SSL_VERIFYPEER => false,
  46.             CURLOPT_SSL_VERIFYHOST => false,
  47.         );
  48.     }
  49.  
  50.     public function fetch_data( $post_id ) {
  51.         /**
  52.          * Set Post ID
  53.          */
  54.         $this->post_id = $post_id;
  55.         $response      = array();
  56.  
  57.         // Get Social Share
  58.         $socials = array(
  59.             array(
  60.                 'social_share' => 'facebook',
  61.                 'social_text'  => 'Share on Facebook',
  62.             ),
  63.             array(
  64.                 'social_share' => 'twitter',
  65.                 'social_text'  => 'Share on Twitter',
  66.             ),
  67.             array(
  68.                 'social_share' => 'pinterest',
  69.                 'social_text'  => '',
  70.             ),
  71.         );
  72.  
  73.         $secondary_socials = array(
  74.             array(
  75.                 'social_share' => 'linkedin',
  76.             ),
  77.  
  78.         );
  79.  
  80.         $socials = jnews_get_option( 'single_social_share_main', $socials );
  81.         $socials = array_merge( $socials, jnews_get_option( 'single_social_share_secondary', $secondary_socials ) );
  82.  
  83.         foreach ( $socials as $social ) {
  84.             $social_share = $social['social_share'];
  85.             if ( in_array( $social_share, $this->socials ) ) {
  86.                 $response[ $social_share ] = wp_remote_get(
  87.                     $this->get_api_url( $social_share ),
  88.                     array( 'timeout' => 10 )
  89.                 );
  90.                 if ( is_array( $response[ $social_share ] ) ) {
  91.                     $this->populate_data( $response[ $social_share ]['body'], $social_share );
  92.                 }
  93.             }
  94.         }
  95.  
  96.         $this->save_result();
  97.  
  98.         return false;
  99.     }
  100.  
  101.     /**
  102.      * Save fetch result
  103.      */
  104.     protected function save_result() {
  105.         // set last fetched social
  106.         update_post_meta( $this->post_id, JNEWS_SOCIAL_COUNTER_LAST_UPDATE, current_time( 'timestamp' ) );
  107.         if ( is_array( $this->result ) ) {
  108.             if ( array_sum( $this->result ) > 0 ) {
  109.                 // set all share
  110.                 update_post_meta( $this->post_id, JNEWS_SOCIAL_COUNTER_ALL, $this->result );
  111.  
  112.                 // set total share
  113.                 update_post_meta( $this->post_id, JNEWS_SOCIAL_COUNTER_TOTAL, array_sum( $this->result ) );
  114.             }
  115.         }
  116.     }
  117.  
  118.  
  119.     /**
  120.      * Populate data and save its result on array
  121.      *
  122.      * @todo fix facebook share counter, harus pake api nya dia skrng
  123.      * @param $data
  124.      * @param $url
  125.      * @param $request_info
  126.      * @param $service
  127.      * @param $time
  128.      */
  129.     public function populate_data( $data, $service ) {
  130.         $count = 0;
  131.  
  132.         switch ( $service ) {
  133.             case 'facebook':
  134.                 $data = json_decode( $data );
  135.                 if ( $data ) {
  136.                     $count = isset( $data->engagement->share_count ) ? $data->engagement->share_count : 0;
  137.                 }
  138.                 break;
  139.             case 'twitter':
  140.                 $data  = json_decode( $data );
  141.                 $count = isset( $data->count ) ? $data->count : 0;
  142.                 break;
  143.             case 'linkedin':
  144.                 $data  = json_decode( $data );
  145.                 $count = isset( $data->count ) ? $data->count : 0;
  146.                 break;
  147.             case 'stumbleupon':
  148.                 $data                                  = json_decode( $data );
  149.                 isset( $data->result->views ) ? $count = $data->result->views : $count = 0;
  150.                 break;
  151.             case 'pinterest':
  152.                 $data  = str_replace( array( 'jnews(', ')' ), '', $data );
  153.                 $data  = json_decode( $data );
  154.                 $count = isset( $data->count ) ? $data->count : 0;
  155.                 break;
  156.             case 'buffer':
  157.                 $data  = json_decode( $data );
  158.                 $count = ! empty( $data ) ? $data->shares : 0;
  159.                 break;
  160.             case 'vk':
  161.                 preg_match( '/^VK.Share.count\(\d+,\s+(\d+)\);$/i', $data, $matches );
  162.                 if ( $matches ) {
  163.                     $count = $matches[1];
  164.                 }
  165.                 break;
  166.         }
  167.  
  168.         $this->result[ $service ] = $count;
  169.     }
  170.  
  171.     /**
  172.      * Social API URL
  173.      *
  174.      * @param $social
  175.      * @return string
  176.      */
  177.     protected function get_api_url( $social ) {
  178.         $api_url = '';
  179.  
  180.         switch ( $social ) {
  181.             case 'facebook':
  182.                 $fb_token = jnews_get_option( 'single_social_share_fb_token', '' );
  183.                 $fb_token = ! empty( $fb_token ) ? '&access_token=' . $fb_token : '';
  184.                 $api_url  = 'https://graph.facebook.com/?fields=engagement&id=' . $this->post_url() . $fb_token;
  185.                 break;
  186.             case 'twitter':
  187.                 $api_url = 'https://counts.twitcount.com/counts.php?url=' . $this->post_url();
  188.                 break;
  189.             case 'stumbleupon':
  190.                 $api_url = 'http://www.stumbleupon.com/services/1.01/badge.getinfo?url=' . $this->post_url();
  191.                 break;
  192.             case 'pinterest':
  193.                 $api_url = 'https://api.pinterest.com/v1/urls/count.json?callback=jnews&url=' . $this->post_url();
  194.                 break;
  195.             case 'buffer':
  196.                 $api_url = 'https://api.bufferapp.com/1/links/shares.json?url=' . $this->post_url();
  197.                 break;
  198.             case 'vk':
  199.                 $api_url = 'https://vk.com/share.php?act=count&index=1&url=' . $this->post_url();
  200.                 break;
  201.         }
  202.  
  203.         return $api_url;
  204.     }
  205.  
  206.  
  207.     /**
  208.      * Get Post URL
  209.      *
  210.      * @return string
  211.      */
  212.     protected function post_url() {
  213.         return apply_filters( 'jnews_social_counter_post_url', rawurlencode( get_permalink( $this->post_id ) ) );
  214.     }
  215. }
  216.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement