Метка: youtube checker

Чекер нового видео на канале youtube PHP + Cron

проверка нового видео на канале youtubeНедавно на одном популярном канале youtube объявили конкурс. Заключается он в том, что в каждое новое видео на канале добавляется кадр, где мелькает один ключик для активации одной интересной игры. Успеть как-то сделать что-либо вручную весьма трудно, просто невозможно успеть 🙂

Так что если тебе интересно как узнать о новом видео на канале youtube мгновенно или как реализовать проверку новых видео на канале youtube, то дерзай, ниже вся суть.

Я сразу подумал, что процесс необходимо оптимизировать средствами PHP + Cron.

В процессе решил подключить SMS, потому что одной отправки на мыло не хватит. Хотя, возможно, в своей почте вы можете настроить уведомления о новых письмах на мобильный, НО проблема в том, что письма идут на ваш почтовый ящик в данном случае от 10 секунд до 30 минут, а СМС чаще всего приходит мгновенно, тем более websms.ru дают 30 бесплатных сообщений.

Если вы хотите получать уведомления о новых видео на мобильный, то зарегистрируйтесь на websms.ru, вообще классный сервис. [Рекомендуется]

Ставить в Cron'e на выполнение желательно каждую минуту или каждые 2 минуты.

В итоге родился следующий скрипт, и я назвал его youtube checker cheat:

<?php //YouTube Checkerr Cheat v1.02 by twog.me

function send_mail($address, $subject, $body) {
 $address = strtolower($address);
 $body = "$body";
 $from_name = base64_encode($from_name);
 $subject = base64_encode($subject);
 $subject = "=?windows-1251?B?$subject?=";
 $body = base64_encode($body);
 $headers = "From: YouTube Checker \r\n".
 "Content-Type: text/plain;charset=windows-1251 Content-Transfer-Encoding: base64 X-Mailer: YTChecker (PHP)";

 mail($address, $subject, $body, $headers);
}

function send_sms($to, $msg, $login, $password){
 $u = 'http://www.websms.ru/http_in5.asp';
 $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_TIMEOUT, 10);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, 'Http_username='.urlencode($login). '&Http_password='.urlencode($password).  '&Phone_list='.$to.'&Message='.urlencode($msg));
 curl_setopt($ch, CURLOPT_URL, $u);
 $u = trim(curl_exec($ch));
 curl_close($ch);
 preg_match("/message_id\s*=\s*[0-9]+/i", $u, $arr_id );
 $id = preg_replace("/message_id\s*=\s*/i", "", @strval($arr_id[0]) );
 return $id;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11');

$url = ''; //ссылка на канал типа http://www.youtube.com/user/gazgolder/feed
$compare = ''; //название текущего видео $addr = '';//твой email
$mob = ''; //твой мобильный в формате 79251234678
$login = ''; //твой логин на сайте websms.ru
$pass = '';//твой пароль на сайте websms.ru
$subj = 'Скорее! Новый видос!'; //текст темы для письма на email

curl_setopt($ch, CURLOPT_URL, $url);
$page = curl_exec($ch);
$page = iconv('utf-8', 'windows-1251', $page);
if ($page != false){
 $page = trim(substr($page, strpos($page, 'title yt-uix-sessionlink'), 800));
 $page = trim(substr($page, strpos($page, 'ltr')+5, 110));
 $page = trim(substr($page, 0, 100));
 
 $page = substr($page, 0, 6);
 $compare = substr($compare, 0, 6);
 
 $msg = $page;

 if ($page != $compare && !empty($page) && $page != 'xmlns:' && $page != 'TYPE H'){
  $compare = iconv('utf-8', 'windows-1251', $compare);
  send_sms($mob, $msg, $login, $pass);
  emailSend($addr, $subj, $msg);
 }else{
  if (empty($page)) echo '[ ERROR: empty page loaded ]';
 }
} else { echo 'Невозможно загрузить страницу'; die; }
curl_close($ch);
?>

UPD: добавил проверку на пустую переменную (52), а то получилось так, что CURL вытянул код страницы и передал значение переменной $page, но каким-то образом оно оказалось пустым и мне на почту пришло пустое письмо, а sms не пришла из-за того, что через POST-запрос была отправлена пустая переменная.

UPD: добавил проверку на пару глюков, которые выявились при парсинге страницы канала и подогнал более точные значения для пары функций.

!Если будут какие-то ошибки, пишите, разберемся =)