Парсер YouTube по ключевым словам

Всем привет. Случилось так, что потребовалось написать парсер для сервиса youtube по ключевым словам. Что требуется. Нужно список ключевых слов в столбике прогнать через API Youtube и сохранить записи в таблицу исключая дубли и у каждой записи нужно указывать контекст и сам ключ. Вообщем начал разбираться и вот что в итоге пока удалось намулевать devmodx.ru/syoutubeparser/:

Код сниппета youParser:
<?php
@ini_set('max_execution_time', 0);
$youvideo = $modx->getCount('sYouTubeParser', array('video' => $video));
$apikey = $modx->getOption('youparser_api_key');

        echo '
            <form class="form-horizontal" role="form" action="[[~[[+id]]]]" method="post">
              <div class="form-group">
                <label class="col-sm-2 control-label">Поиск</label>
                <div class="col-sm-10">
                  <textarea name="keys" class="form-control" placeholder="Ключевые слова"></textarea>
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-2 control-label">Кол-во результатов</label>
                <div class="col-sm-10">
                  <input type="text" name="page" value="1" class="form-control" placeholder="min 5 max 50">
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-2 control-label">Контекст</label>
                <div class="col-sm-10">
                  <select class="form-control" name="context">';

                    $contexts = $modx->getCollection('modContext');
                    foreach ($contexts as $context => $con) {
                        $key = $con->get('key');
                        if($key != 'mgr') {
                            echo '<option value="'.$key.'">'.$key.'</option>';
                        }
                    }

            echo '</select>
                </div>
              </div>
              <div class="form-group">
                <label class="col-sm-2 control-label">Ресурс</label>
                
                <div class="col-sm-10">
                    <select class="form-control" name="resource">';
                    $resources = $modx->getCollection('modResource');
                    foreach ($resources as $resource => $res) {
                        $title = $res->get('pagetitle');
                        $id = $res->get('id');
                        $context = $res->get('context');
                        $parent = $res->get('parent');
                        if($parent){
                            echo '<option value="'.$id.'"> -- '.$title.' ('.$id.') </option>';
                        }
                        else {
                            echo '<option value="'.$id.'">'.$title.' ('.$id.') </option>';
                        }
                    }
            echo '</select>
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                  <button type="submit" name="sub" class="btn btn-default">Парсить</button>
                  <button type="reset" class="btn btn-default">Сбросить настройки</button>
                </div>
              </div>
            </form>';

if(isset($_POST['sub'])){

    $keys = $_POST['keys'];
    $page = intval(trim($_POST['page']));

    $KeysArray = explode("\n",$keys);
    $KeysArray = array_map("trim",$KeysArray);
    $CountKeys = count($KeysArray);

      // счетчик
      $cpl = 0;

      ///Условие
    if ($CountKeys>0 && !empty($page)){

        for ($i=0;$i<$CountKeys;$i++){

            //обрабатываем ключевик
            $key = trim($KeysArray[$i]);
            $key = urlencode($key);
            $key = str_replace("%20", "+", $key);
                 
            $url.= 'https://www.googleapis.com/youtube/v3/search?';
            $url.= 'part=snippet';
            $url.= '&maxResults='.$p;
            $url.= '&order=viewCount';
            $url.= '&q='.$key;
            $url.= '&key='.$apikey;
                
            $a = file_get_contents($url);
            $a = json_decode($a);
            $items = $a->items;

			foreach ($items as $v) {
                $videoID = $v->id->videoId;
                $createdon = $v->snippet->publishedAt;
                $channelId = $v->snippet->channelId;
                $title = $v->snippet->title;
                $description = $v->snippet->description;
                $thumbDefault = $v->snippet->thumbnails->default->url;
                $thumbMedium = $v->snippet->thumbnails->medium->url;
                $thumbHigh = $v->snippet->thumbnails->high->url;
                            
                $cpl++;
                // Сохранение в таблицу
                if($_POST["sub"]) {
                    $site = $modx->newObject('sYouTubeParser');
                    $site->fromArray(
                        array(
                            'name' => $title, 
                            'description'    => $description, 
                            'video' => $videoID, 
                            'channel'  => $channelId,
                            'key' => $key,
                            'context'     => $context,
                            'createdon' => $createdon,
                            'created_by' => $created_by,
                        )
                    );
                    $site->save();
                    // Очищаем кеш ресурса, чтобы изменения отобразились сразу
                    $resource->_contextKey = $resource->get('context_key');
                    $cache = $modx->cacheManager->getCacheProvider(
                             $modx->getOption('cache_resource_key', null, 'resource'));
                    $key = $resource->getCacheKey();
                    $cache->delete($key, array('deleteTop' => true));
                    $cache->delete($key);
                    // Возвращаем URL, по которому нужно отправить пользователя
                    $res = $modx->toJSON(array('url' => $_POST['url']));
                }
            }
            
        }

    }

    echo "<center><table><tr><td><font color=\"green\">Спарсено $cpl ссылок на видео. Данные ссылки сохранены.</font> </td></tr></table></center>";

}
Может кто-нибудь поможет довести до ума? Не добавляет видео и не считает количество добавленных видео.
Андрей Копп
02 апреля 2016, 20:15
modx.pro
2 858
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0