Парсер YouTube по ключевым словам
Всем привет. Случилось так, что потребовалось написать парсер для сервиса youtube по ключевым словам. Что требуется. Нужно список ключевых слов в столбике прогнать через API Youtube и сохранить записи в таблицу исключая дубли и у каждой записи нужно указывать контекст и сам ключ. Вообщем начал разбираться и вот что в итоге пока удалось намулевать devmodx.ru/syoutubeparser/:
Код сниппета youParser:
Код сниппета 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>";
}
Может кто-нибудь поможет довести до ума? Не добавляет видео и не считает количество добавленных видео.