update
This commit is contained in:
136
wp-content/plugins/youtube-feed-pro/inc/SBY_RSS_Connect.php
Normal file
136
wp-content/plugins/youtube-feed-pro/inc/SBY_RSS_Connect.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace SmashBalloon\YouTubeFeed;
|
||||
|
||||
class SBY_RSS_Connect
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $url;
|
||||
|
||||
/**
|
||||
* @var object
|
||||
*/
|
||||
private $response;
|
||||
|
||||
private $is_live_stream;
|
||||
|
||||
public function __construct( $endpoint = '', $params = array() ) {
|
||||
$this->is_live_stream = false;
|
||||
if ( isset( $params['livestream'] ) ) {
|
||||
$this->is_live_stream = true;
|
||||
}
|
||||
$this->set_url( $endpoint, $params );
|
||||
}
|
||||
|
||||
public function get_data() {
|
||||
return $this->response;
|
||||
}
|
||||
|
||||
public function set_url_from_args( $url ) {
|
||||
$this->url = $url;
|
||||
}
|
||||
|
||||
public function get_url() {
|
||||
return $this->url;
|
||||
}
|
||||
|
||||
public function connect() {
|
||||
|
||||
if ( ! ini_get( 'allow_url_fopen' ) ) {
|
||||
if ( ! $this->is_live_stream ) {
|
||||
$error_message = '<p><b>'. __( 'Unable to retrieve new videos without an API key.', 'feeds-for-youtube' ) .'</b></p>';
|
||||
if ( current_user_can( 'manage_youtube_feed_options' ) ) {
|
||||
$error_message .= '<p>' . sprintf( __( 'Due to your server configuration, an API key is required to update your feed. See %sthis FAQ%s to set up an API key.', 'feeds-for-youtube' ), '<a href="https://smashballoon.com/youtube-api-key/" target="_blank" rel="noopener nofollow">', '</a>' ) . '</p>';
|
||||
}
|
||||
} else {
|
||||
$error_message = '<p><b>'. __( 'Unable to retrieve new videos due to server configuration.', 'feeds-for-youtube' ) .'</b></p>';
|
||||
if ( current_user_can( 'manage_youtube_feed_options' ) ) {
|
||||
$error_message .= '<p>' . sprintf( __( 'You must have the allow_url_fopen directive enabled in your server\'s php.ini file to retrieve live streams.', 'feeds-for-youtube' ), '<a href="https://smashballoon.com/youtube-api-key/" target="_blank" rel="noopener nofollow">', '</a>' ) . '</p>';
|
||||
}
|
||||
}
|
||||
|
||||
global $sby_posts_manager;
|
||||
|
||||
$sby_posts_manager->add_frontend_error( 'api', $error_message );
|
||||
$sby_posts_manager->add_error( 'api', array( 'Error connecting', $error_message ) );
|
||||
|
||||
$sby_posts_manager->add_api_request_delay( 300 );
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
if ( wp_remote_retrieve_response_code( wp_remote_get( $this->url ) ) === 404 ) {
|
||||
$error_message = '<p><b>'. __( 'Cannot collect videos from this channel. Please make sure this is a valid channel ID.', 'feeds-for-youtube' ) .'</b></p>';
|
||||
|
||||
global $sby_posts_manager;
|
||||
|
||||
$sby_posts_manager->add_frontend_error( 'api', $error_message );
|
||||
$sby_posts_manager->add_error( 'api', array( 'Error connecting', $error_message ) );
|
||||
|
||||
$sby_posts_manager->add_api_request_delay( 300 );
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
$parsed_obj = new \SimpleXMLElement( $this->url, null, true );
|
||||
|
||||
$items_array = array();
|
||||
if ( isset( $parsed_obj->entry ) ) {
|
||||
foreach ( $parsed_obj->entry as $video_xml ) {
|
||||
|
||||
$this_item_array = array();
|
||||
|
||||
$high_thumbnail_url = (string) $video_xml->children( 'http://search.yahoo.com/mrss/' )->group->thumbnail->attributes()->url;
|
||||
|
||||
$this_item_array['snippet'] = array(
|
||||
'publishedAt' => (string) $video_xml->published,
|
||||
'channelId' => (string) $video_xml->children( 'http://www.youtube.com/xml/schemas/2015' )->channelId,
|
||||
'title' => (string) $video_xml->title,
|
||||
'description' => (string) $video_xml->children( 'http://search.yahoo.com/mrss/' )->group->description,
|
||||
'thumbnails' => array(
|
||||
'default' => array(
|
||||
'url' => (string) str_replace( 'hqdefault.jpg', 'default.jpg', $high_thumbnail_url ),
|
||||
),
|
||||
'medium' => array(
|
||||
'url' => str_replace( 'hqdefault.jpg', 'mqdefault.jpg', $high_thumbnail_url ),
|
||||
),
|
||||
'high' => array(
|
||||
'url' => $high_thumbnail_url,
|
||||
'width' => (string) $video_xml->children( 'http://search.yahoo.com/mrss/' )->group->thumbnail->attributes()->width,
|
||||
'height' => (string) $video_xml->children( 'http://search.yahoo.com/mrss/' )->group->thumbnail->attributes()->height,
|
||||
),
|
||||
'standard' => array(
|
||||
'url' => str_replace( 'hqdefault.jpg', 'sddefault.jpg', $high_thumbnail_url ),
|
||||
),
|
||||
'maxres' => array(
|
||||
'url' => str_replace( 'hqdefault.jpg', 'maxresdefault.jpg', $high_thumbnail_url ),
|
||||
),
|
||||
),
|
||||
'channelTitle' => (string) $video_xml->author->name,
|
||||
'resourceId' => array(
|
||||
'videoId' => (string) $video_xml->children( 'http://www.youtube.com/xml/schemas/2015' )->videoId
|
||||
),
|
||||
);
|
||||
$this_item_array['statistics'] = array(
|
||||
'viewCount' => (int) $video_xml->children( 'http://search.yahoo.com/mrss/' )->group->community->statistics->attributes()->views,
|
||||
'starRating' => (float) $video_xml->children( 'http://search.yahoo.com/mrss/' )->group->community->starRating->attributes()->average,
|
||||
);
|
||||
$items_array[] = $this_item_array;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->response = $items_array;
|
||||
|
||||
}
|
||||
|
||||
protected function set_url( $endpoint_slug, $params ) {
|
||||
$url = 'https://www.youtube.com/feeds/videos.xml?channel_id=' . $params['channel_id'];
|
||||
|
||||
$this->set_url_from_args( $url );
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user