Hi I've extended wave's mod.
- Added youtube button to playlist
- Adds youtube files to the media library for playback later
- Accepts youtube playlists
- Converted the bash script to run in the background (Rune no longer freezes when downloading)
Create /srv/http/youtube.php
- Code: Select all
<?php
try {
set_time_limit(0);
ini_set('max_execution_time', 600);
$u = urldecode($_GET['url']);
#validate
$youtube = "/^(https:\/\/|http:\/\/|)(www\.|m\.|)(youtube\.com\/watch\?v=|youtu\.be\/)[\w-]+$/";
$playlist ="/^(https:\/\/|http:\/\/|)(www\.|m\.|)(youtube\.com\/playlist\?list=|youtu\.be\/)[\w-]+$/";
if ( preg_match ($youtube, $u ) )
{
exec("tube " . $u );
echo "sent song" . $u;
}
if(preg_match($playlist, $u))
{
exec("tubeplaylist " . $u . " >/dev/null 2>&1 &");
echo "sent playlist" . $u;
}
}
catch (Exception $e) {
echo "Exception : ", $e->getMessage(),"<br />";
}
?>
Create /usr/local/bin/tube
- Code: Select all
#!/bin/bash
youtube-dl --no-mtime --restrict-filenames -o '/mnt/MPD/LocalStorage/Youtube/%(title)s.%(ext)s' --write-description -f "bestaudio[ext=m4a]" $1 && mpc update --wait LocalStorage/Youtube && VV=$(ls /mnt/MPD/LocalStorage/Youtube/*.description -t | head -n1) && VV=$(basename $VV .description) && mpc add "LocalStorage/Youtube/$VV.m4a" && echo $VV && chown -R http:http /mnt/MPD/LocalStorage/Youtube/$VV.*
Create /usr/local/bin/tubeplaylist
- Code: Select all
#!/bin/bash
youtube-dl --no-mtime --restrict-filenames --ignore-errors -o '/mnt/MPD/LocalStorage/Youtube/%(title)s.%(ext)s' --write-description -f "bestaudio[ext=m4a]" $1 && mpc update --wait LocalStorage/Youtube
(IFS='
'
for x in $(find /mnt/MPD/LocalStorage/Youtube/ -type f -name *.description -mmin -15); do VV=$(basename "$x" .description) && mpc add "LocalStorage/Youtube/$VV.m4a" && echo $VV; done)
#Find all descriptions less than 15 min modifcation time then add to playlist
Edit /srv/http/app/templates/playback.php
Find:
- Code: Select all
<div id="pl-manage">
<button id="pl-manage-list" class="btn btn-default" type="button" title="Manage playlists"><i class="fa fa-file-text-o"></i></button>
<button id="pl-manage-save" class="btn btn-default" type="button" title="Save current queue as playlist" data-toggle="modal" data-target="#modal-pl-save"><i class="fa fa-save"></i></button>
Add this line after:
- Code: Select all
<button id="yt-inport" class="btn btn-default" type="button" title="Import a playlist or video from youtube."><i class="fa fa-youtube-play"></i></button>
Edit /srv/http/assets/js/runeui.js
Find:
- Code: Select all
// LIBRARY
// ----------------------------------------------------------------------------------------------------
// on ready Library tab
Add ABOVE
- Code: Select all
$('#yt-inport').click(function(){
var stream = prompt("Enter youtube video or playlist URL", "");
if (stream != null) {
var encstream = encodeURI(stream); //url encode
encstream = encodeURIComponent(encstream); //encodes also ? & ... chars
$.get("youtube.php?url=" + encstream);
return false;
}
});
Create folder
- Code: Select all
mkdir /mnt/MPD/LocalStorage/Youtube
Run these shell commands
- Code: Select all
pacman -Sy
pacman -S glibc
pacman -S openssl
pacman -S youtube-dl
chmod 777 /usr/local/bin/tube
chmod 777 /usr/local/bin/tubeplaylist
chmod 777 /srv/http/youtube.php
chown http:http /srv/http/youtube.php
chown http:http /usr/local/bin/tube
chown http:http /usr/local/bin/tubeplaylist
chown http:http /mnt/MPD/LocalStorage/Youtube
Clear rune cache
http://[your rune name]/clear
Note: By default the rune partition is 2gb (with 40mb free space)... I recommend resizing this or you can only store 10 songs.