Adding files and adding cli
Took 1 hour 8 minutes
This commit is contained in:
124
Downloader.php
Normal file
124
Downloader.php
Normal file
@ -0,0 +1,124 @@
|
||||
<?php
|
||||
class Downloader
|
||||
{
|
||||
/**
|
||||
* @param int $a_id
|
||||
*
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
*/
|
||||
public function requestSong( int $a_id )
|
||||
{
|
||||
if( ( $out = $this->downloadFile( $a_id ) ) === false )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$this->saveFile( $out );
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $a_file_id
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
private function downloadFile( $a_file_id )
|
||||
{
|
||||
echo "[INFO] Requesting file id $a_file_id...";
|
||||
$ch = curl_init();
|
||||
|
||||
curl_setopt( $ch, CURLOPT_URL, "http://usdb.animux.de/index.php?link=gettxt&id=$a_file_id" );
|
||||
curl_setopt( $ch, CURLOPT_POST, 1 );
|
||||
curl_setopt( $ch, CURLOPT_COOKIEFILE, DOWNLOAD_PATH . '/cookies.txt' );
|
||||
curl_setopt( $ch, CURLOPT_COOKIEJAR, DOWNLOAD_PATH . '/cookies.txt' );
|
||||
// In real life you should use something like:
|
||||
curl_setopt( $ch, CURLOPT_POSTFIELDS,
|
||||
http_build_query(
|
||||
array(
|
||||
'wd' => 1,
|
||||
) ) );
|
||||
|
||||
// Receive server response ...
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
||||
|
||||
$out = curl_exec( $ch );
|
||||
|
||||
if( strpos( $out, 'Datensatz nicht gefunden' ) !== false )
|
||||
{
|
||||
echo "Not found - Skip\n";
|
||||
curl_close( $ch );
|
||||
return false;
|
||||
}
|
||||
curl_close( $ch );
|
||||
echo "OK\n";
|
||||
|
||||
return utf8_decode( $out );
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $a_input
|
||||
*
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
*/
|
||||
private function saveFile( $a_input ): bool
|
||||
{
|
||||
|
||||
|
||||
$out = strpos( $a_input, '<textarea' ) + 37;
|
||||
if( $out === false )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$_to = strpos( $a_input, '</textarea>' );
|
||||
$out = substr( $a_input, $out, $_to - $out );
|
||||
|
||||
|
||||
$artist = str_replace( array( '#ARTIST:', '/' ), array( '', '-' ), strtok( $out, "\n" ) );
|
||||
$artist = preg_replace( "/[^a-zA-Z0-9_.!äöü\s-]/m/u", "", $artist );
|
||||
|
||||
$title = str_replace( array( '#TITLE:', '/' ), array( '', '-' ), strtok( "\n" ) );
|
||||
$title = preg_replace( "/[^a-zA-Z0-9_.!äöü\s-]/m/u", "", $title );
|
||||
|
||||
|
||||
|
||||
echo "[INFO] Found $artist - $title\n";
|
||||
if( is_dir( DOWNLOAD_PATH . '/' . $artist . '/' ) === false )
|
||||
{
|
||||
echo "[INFO] Creating Artist-Directory...";
|
||||
if ( !mkdir( $concurrentDirectory = DOWNLOAD_PATH . '/' . $artist . '/' ) && !is_dir( $concurrentDirectory ) )
|
||||
{
|
||||
throw new Exception( 'Cannot create the directory for the Artist' );
|
||||
}
|
||||
echo "OK";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "[INFO] Artist-Directory exists\n";
|
||||
|
||||
}
|
||||
if( file_exists( DOWNLOAD_PATH . '/' . $artist . '/' . $artist . ' - ' . $title . '.txt' ) === true )
|
||||
{
|
||||
echo "[INFO] Already downloaded - Skip\n";
|
||||
|
||||
return false;
|
||||
}
|
||||
if( ( $file = fopen( DOWNLOAD_PATH . "/$artist/$artist - $title.txt", 'w+' ) ) === false )
|
||||
{
|
||||
throw new RuntimeException( "$artist - $title *** Cannot open file handler" );
|
||||
}
|
||||
|
||||
if ( fwrite( $file, $out ) === false )
|
||||
{
|
||||
throw new RuntimeException( "$artist - $title *** Cannot write to file" );
|
||||
}
|
||||
fclose( $file );
|
||||
|
||||
echo "[SUCCESS] Downloaded \"$title - $artist\"\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user