Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Подскажите можно как-то оптимизировать этот код?

Подскажите можно как-то оптимизировать этот код?


     27.11.2020    Общие вопросы по PHP, Ламерские вопросы    808

вопрос
<?php
	
	if(!defined('DATALIFEENGINE')) {

		die('Hacking attempt!');

        }

        function get_title_youtube($id_video) {

		$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
		$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
		$get_data = json_decode($get_data, true);
                return $result_title = $get_data['items']['0']['snippet']['title'];
	
	}

        function get_description_youtube($id_video) {

		$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
		$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
		$get_data = json_decode($get_data, true);
                return $result_description = $get_data['items']['0']['snippet']['description'];
	
	}

        function get_publishedAt_youtube($id_video) {

		$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
		$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
		$get_data = json_decode($get_data, true);
                return $result_publishedAt = $get_data['items']['0']['snippet']['publishedAt'];
	
	}

        function get_thumbnails_youtube($id_video) {

		$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
		$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
		$get_data = json_decode($get_data, true);
                return $result_thumbnails = $get_data['items']['0']['snippet']['thumbnails']['maxres']['url'];

	}

	function get_duration_youtube($id_video) {

		$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
		$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
		$get_data = json_decode($get_data, true);
                return $result_duration = $get_data['items']['0']['contentDetails']['duration'];

	}
        
        function get_view_youtube($id_video) {

		$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
		$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
		$get_data = json_decode($get_data, true);
                return $result_view = $get_data['items']['0']['statistics']['viewCount'];

	}

        echo'<meta itemprop="name" content="' .get_title_youtube($id_video) .'">
        <meta itemprop="description" content="' .get_description_youtube($id_video) .'">
        <meta itemprop="uploadDate" content="' .get_publishedAt_youtube($id_video) .'">
        <meta itemprop="duration" content="' .get_duration_youtube($id_video) .'">
        <link itemprop="thumbnailUrl" href="' .get_thumbnails_youtube($id_video) .'">
        <span itemprop="interactionStatistic" itemscope itemtype="https://schema.org/InteractionCounter">
        <span itemprop="interactionType" itemscope itemtype="http://schema.org/WatchAction"></span>
        <meta itemprop="userInteractionCount" content="' .get_view_youtube($id_video) .'"></span>';

?>


https://www.pandoge.com/moduli-i-skripty/kak-poluchit-prodolzhitelnost-video-s-youtube-na-phpapi
Там код "Как получить продолжительность видео с YouTube на PHP+API?"

Я его немного усложнил. Теперь но выводит - заголовок, описание, превью, продолжительность, количество просмотров, дату публикации. Работает прекрасно. Но появилась одна проблема - увеличился ответ сервера! Если одна function то ответ сервера 200 мс, а если как выше (6 function) то за 1000 мс. Подскажите можно как-то оптимизировать этот код? Я так понимаю что 6 раз запрашивается это

$api_key = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';
$get_data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.$api_key);
$get_data = json_decode($get_data, true);


Я в PHP полный ноль! Поэтому если что-то неправильно написал или выразился, сильно не ругайтесь!

Ответа пока нет


4 комментария

dj-avtosh
PHP-developer

dj-avtosh - 27 ноября 2020 11:58 -

Можно еще так:

<?php

defined('DATALIFEENGINE') || die('Hacking attempt!');
    
class GetDataYoutube {

    private static $ytbCacheArr = [];

    private static $apiKey = 'AIzaSyC-tRTwkGhKL4eegGg6utVtsN4lklTs8oU';

    private static function getData($url = null)
    {
        if (!empty($url))
        {

            if ( ! isset ( self::$ytbCacheArr[md5($url)] ) )
            {
                self::$ytbCacheArr[md5($url)] = file_get_contents($url);
            }
            
            return self::$ytbCacheArr[md5($url)];

        }

        return false;

    }

    private static function getYoutubeDataCurrentItem($id_video)
    {
        $get_data = self::getData('https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id='.$id_video.'&key='.self::$apiKey);
        $get_data = json_decode($get_data, true);
        return $get_data['items']['0'];
    }

    public static function get_title_youtube($id_video) {

        return self::getYoutubeDataCurrentItem($id_video)['snippet']['title'];
    
    }

    public static function get_description_youtube($id_video) {

        return self::getYoutubeDataCurrentItem($id_video)['snippet']['description'];
    
    }

    public static function get_publishedAt_youtube($id_video) {

        return self::getYoutubeDataCurrentItem($id_video)['snippet']['publishedAt'];
    
    }

    public static function get_thumbnails_youtube($id_video) {

        return self::getYoutubeDataCurrentItem($id_video)['snippet']['thumbnails']['maxres']['url'];

    }

    public static function get_duration_youtube($id_video) {

        return self::getYoutubeDataCurrentItem($id_video)['contentDetails']['duration'];

    }
        
    public static function get_view_youtube($id_video) {

        return self::getYoutubeDataCurrentItem($id_video)['statistics']['viewCount'];

    }

}

        echo'<meta itemprop="name" content="' .GetDataYoutube::get_title_youtube($id_video) .'">
        <meta itemprop="description" content="' .GetDataYoutube::get_description_youtube($id_video) .'">
        <meta itemprop="uploadDate" content="' .GetDataYoutube::get_publishedAt_youtube($id_video) .'">
        <meta itemprop="duration" content="' .GetDataYoutube::get_duration_youtube($id_video) .'">
        <link itemprop="thumbnailUrl" href="' .GetDataYoutube::get_thumbnails_youtube($id_video) .'">
        <span itemprop="interactionStatistic" itemscope itemtype="https://schema.org/InteractionCounter">
        <span itemprop="interactionType" itemscope itemtype="http://schema.org/WatchAction"></span>
        <meta itemprop="userInteractionCount" content="' .GetDataYoutube::get_view_youtube($id_video) .'"></span>';

?>

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Димон
Юзер

Димон - 27 ноября 2020 15:20 -

Спасибо! ЯД в подписи рабочий? Пару соток переведу.

dj-avtosh
PHP-developer

dj-avtosh - 27 ноября 2020 16:14 -

Да. Там все актуальное.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Димон
Юзер

Димон - 27 ноября 2020 16:37 -

Перевел

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх