login(); } } private function login( ): void { echo "[LOGIN] Logging in..."; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, "http://usdb.animux.de/index.php?&link=home" ); 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( 'user' => ANIMUX_USERNAME, 'userpass3' => ANIMUX_PASSWORD ) ) ); // Receive server response ... curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_close( $ch ); self::$loggedIn = true; echo "OK\n"; } /** * @param int $a_id * * @return bool * * @throws Exception */ public function requestSong( int $a_id ): bool { if( ( $out = $this->downloadFile( $a_id ) ) === false ) { return false; } $this->saveFile( $out ); return true; } /** * @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, '' ); $out = substr( $a_input, $out, $_to - $out ); $artist = str_replace( array( '#ARTIST:', '/' ), array( '', '-' ), strtok( $out, "\n" ) ); $artist = str_replace( array( "ö", "ä", "ü" ), array( "oe", "ae", "ue" ), $artist ); //echo $artist; $artistes = preg_replace( '/[^a-zA-Z0-9\ \-]/', "", $artist ); $title = str_replace( array( '#TITLE:', '/' ), array( '', '-' ), strtok( "\n" ) ); //echo $title; //echo "\ns$title\n"; $title = preg_replace( '/[^a-zA-Z0-9\ \-]/', '', $title ); //echo "\n$title\n"; $title = str_replace( array( "ö", "ä", "ü" ), array( "oe", "ae", "ue" ), $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", 'wb+' ) ) === 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; } }