- you need to send request to subscribe a channel
- a callback that varifies the subscription request and get actual data on update
subscribe function:
subscribe.php may look like:
<?php
function subscribeYoutubeChannel($channel_id = null, $subscribe = true) {
$subscribe_url = 'https://pubsubhubbub.appspot.com/subscribe';
$topic_url = 'https://www.youtube.com/xml/feeds/videos.xml?channel_id={CHANNEL_ID}';
$callback_url = 'http://' . $_SERVER['SERVER_NAME'] . str_replace(basename($_SERVER['REQUEST_URI']), '', $_SERVER['REQUEST_URI']) . 'youtube_subscribe_callback.php';
$data = array(
'hub.mode' => $subscribe ? 'subscribe' : 'unsubscribe',
'hub.callback' => $callback_url,
'hub.lease_seconds'=>60*60*24*365,
'hub.topic'=> str_replace(array(
'{CHANNEL_ID}'
), array(
$channel_id
), $topic_url)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($data)
)
);
$context = stream_context_create($opts);
@file_get_contents($subscribe_url, false, $context);
return preg_match('200', $http_response_header[0]) === 1;
}
after the request is sent, the pusub service will call youtube_subscribe_callback.php to verify the subscription
it will use the GET method and it expects to receive an answer which is "hub_challenge".
after that if you upload a video to your test channel youtube_subscribe_callback.php will receive POST request with data.
so youtube_subscribe_callback.php (defined in subscribeYoutubeChannel function) may look like:
<?php
if (isset($_GET['hub_challenge'])) {
echo $_REQUEST['hub_challenge'];
} else {
$video = parseYoutubeUpdate(file_get_contents('php://input'));
}
function parseYoutubeUpdate($data) {
$xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
$video_id = substr((string)$xml->entry->id, 9);
$channel_id = substr((string)$xml->entry->author->uri, 32);
$published = (string)$xml->entry->published;
return array(
'video_id'=>$video_id,
'channel_id'=>$channel_id,
'published'=>$published
);
}
https://www.youtube.com/XML/feeds/videos.xml?channel_id=
url were different from<link rel="alternate" type="application/rss+xml" title="RSS" ...>
given in youtube channel page source code – Hamulusrel=”hub”
so it's useless to me. Tried subscribing to that, but never get any notifications. It's really frustrating... – Madlinhttps://www.youtube.com/xml/feeds/videos.xml?channel_id=CHANNEL_ID
format now (subscriber diagnostics at pubsubhubbub.appspot.com/subscribe didn't work though..). – Iconology