-
-
Save Skalman/801436d9693ff03bc4ce to your computer and use it in GitHub Desktop.
<?php | |
if (!isset($_GET['url'])) { | |
?> | |
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<title>Youtube RSS creator</title> | |
<form> | |
<p>Create an RSS feed for the videos on the following page: | |
<p><input name="url" placeholder="E.g. https://www.youtube.com/user/scishow/videos" style="width: 30em"> | |
<p><input type="submit" value="Create"> | |
</form> | |
<?php | |
exit; | |
} | |
$url = $_GET['url']; | |
$host = preg_replace('#^(https?://[^/]+).*#', '$1', $url); | |
$author = preg_replace('#^(https?://[^/])/user/([^/]+).*#', '$1', $url); | |
$html = file_get_contents($url); | |
$doc = new DOMDocument(); | |
$doc->loadHTML($html); | |
$xpath = new DOMXpath($doc); | |
$mainTitle = $xpath->query('//title')->item(0)->nodeValue; | |
$links = $xpath->query('//a[starts-with(@href, "/watch")]'); | |
$entries = []; | |
if (!is_null($links)) { | |
foreach ($links as $link) { | |
$href = $link->getAttribute('href'); | |
$title = $link->getAttribute('title'); | |
if ($title === '') | |
$title = trim($link->nodeValue); | |
if (!isset($entries[$href]) || strlen($entries[$href]) < strlen($title)) | |
$entries[$href] = $title; | |
} | |
} | |
header('Content-Type: application/atom+xml; charset=utf-8'); | |
$mainTitle = htmlspecialchars($mainTitle); | |
$protocol = $_SERVER['HTTPS'] === 'on' ? 'https' : 'http'; | |
$port = ":$_SERVER[SERVER_PORT]"; | |
if (($protocol === 'http' && $port === ":80") || ($protocol === 'https' && $port === ":443")) | |
$port = ''; | |
$self = htmlspecialchars("$protocol://$_SERVER[SERVER_NAME]$port$_SERVER[REQUEST_URI]"); | |
$url = htmlspecialchars($url); | |
$author = htmlspecialchars($author); | |
$updated = time(); | |
$updated -= $updated % 60; | |
?> | |
<?xml version="1.0" encoding="utf-8"?> | |
<feed xmlns="http://www.w3.org/2005/Atom"> | |
<title type="text"><?= $mainTitle ?></title> | |
<link rel="self" href="<?= $self ?>" type="application/atom+xml" /> | |
<link rel="alternate" href="<?= $url ?>" type="text/html" /> | |
<updated><?= date('c', $updated) ?></updated> | |
<id><?= $url ?></id> | |
<?php | |
foreach ($entries as $entryUrl => $title) { | |
$entryUrl = htmlspecialchars("$host$entryUrl"); | |
$title = htmlspecialchars($title); | |
$updated -= 60; | |
?> | |
<entry> | |
<id><?= $entryUrl ?></id> | |
<title type="text"><?= $title ?></title> | |
<link rel="alternate" href="<?= $entryUrl ?>" /> | |
<author> | |
<name><?= $author ?></name> | |
</author> | |
<updated><?= date('c', $updated) ?></updated> | |
</entry> | |
<?php | |
} | |
?> | |
</feed> |
$channel_id = 'XXX'; // put the channel id here
$youtube = file_get_contents('https://www.youtube.com/feeds/videos.xml?channel_id='.$channel_id);
$xml = simplexml_load_string($youtube, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$youtube = json_decode($json, true);
$yt_vids = array();
$count = 0;
foreach ($youtube['entry'] as $k => $v) {
$yt_vids[$count]['id'] = str_replace('http://www.youtube.com/watch?v=', '', $v['link']['@attributes']['href']);
$yt_vids[$count]['title'] = $v['title'];
$count++;
}
print_r($yt_vids);
Channel names which in Russian (Cyrillic) language (including video titles) are displayed in characters not readable.
Correct encoding if possible..
example: ТÑ�ейлеÑ� к каналÑ�. ÐкÑ�н видео Ñ� Ð�Ш!
have a problem with:
Parse error: syntax error, unexpected 'version' (T_STRING) in /opt/lampp/htdocs/yii-basic/web/index.php on line 47
@bay122 removed the "?" at line 47
I got this error
Parse error: syntax error, unexpected '[' in D:\xampp\htdocs\youtubehd2.3.1\test.php on line 31
and if remove line 31 then
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID watch-like already defined in Entity, line: 480 in D:\xampp\htdocs\youtubehd2.3.1\test.php on line 24
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID watch-dislike already defined in Entity, line: 494 in D:\xampp\htdocs\youtubehd2.3.1\test.php on line 24
Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\youtubehd2.3.1\test.php:24) in D:\xampp\htdocs\youtubehd2.3.1\test.php on line 44