rendered paste bodyfor ( $feed = 0; $feed < count($feeds); $feed++ ){ $feed_host = parse_url($feeds[$feed][1], PHP_URL_HOST); $feed_path = parse_url($feeds[$feed][1], PHP_URL_PATH) . "?" . parse_url($feeds[$feed][1], PHP_URL_QUERY); if ( ($s = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) { debug_log("[fatal] feed[{$feed}].socket_create(): %s", socket_strerror(socket_last_error())); continue; } if ( !@socket_bind($s, $bind_address) ) { debug_log("[fatal] feed[{$feed}].socket_bind({$bind_address}): %s", socket_strerror(socket_last_error())); continue; } if ( !@socket_connect($s, $feed_host, 80) ) { debug_log("[fatal] feed[{$feed}].socket_connect({$feed_host}, 80): %s", socket_strerror(socket_last_error())); continue; } $cookies = count($feeds[$feed][2]) - 1; $feed_cookies = ""; for ( $cookie = 0; $cookie <= $cookies; $cookie++ ) { $feed_cookies .= "{$feeds[$feed][2][$cookie][0]}={$feeds[$feed][2][$cookie][1]}" . ( $cookie == $cookies ? "" : ";" ); } debug_log("[debug] feed[{$feed}].feed_cookies = {$feed_cookies};"); socket_write($s, "GET {$feed_path} HTTP/1.0\r\n"); socket_write($s, "Host: {$feed_host}\r\n"); socket_write($s, "Connection: Close\r\n"); socket_write($s, "Cookie: {$feed_cookies}\r\n\r\n"); $rss = ""; while ( ($read = socket_read($s, 0xffff)) ) { $rss .= $read; } $rss = substr($rss, strpos($rss, "\r\n\r\n") + 4); file_put_contents("./feed[{$feed}].xml", $rss); $rss = file_get_contents("./feed[{$feed}].xml"); $rssa = xml2array($rss); $items = $rssa["rss"][0]["channel"][0]["item"]; for ( $item = 0; $item < count($items); $item++ ) { $link = html_entity_decode($items[$item]["link"]); debug_log("[debug] feed[{$feed}].item[{$item}].link = {$link};"); if ( !preg_match($feeds[$feed][5], $link, $m) ) { debug_log("[fatal] feed[{$feed}].item[{$item}].preg_match({$feeds[$feed][5]}, {$link}): failed!"); continue; } $save_as = "watch/{$m[1]}.torrent"; if ( file_exists($save_as) ) { continue; } $download = FALSE; $filters = count($feeds[$feed][3]); for ( $filter = 0; $filter < $filters; $filter++ ) { //debug_log("[debug] feed[{$feed}].item[{$item}].filter[{$filter}].match = {$match};"); if ( ($p = strpos($feeds[$feed][3][$filter], "!")) ) { $_match = explode(" ", substr($feeds[$feed][3][$filter], 0, $p)); $_except = explode(" ", substr($feeds[$feed][3][$filter], $p + 1)); } else { $_match = explode(" ", $feeds[$feed][3][$filter]); $_except = NULL; } $matches = count($_match); for ( $match = 0; $match < $matches; $match++ ) { if ( strpos($items[$item]["title"], $_match[$match]) === false ) { continue 2; } } if ( $_except != NULL ) { $excepts = count($_except); for ( $except = 0; $except < $excepts; $except++ ) { if ( strpos($items[$item]["title"], $_except[$except]) !== false ) { continue 2; } } } $download = TRUE; break; } if ( $download == FALSE ) { continue; } $torrent_host = parse_url($link, PHP_URL_HOST); $torrent_path = parse_url($link, PHP_URL_PATH); if ( ($s = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) { debug_log("[fatal] feed[{$feed}].item[{$item}].socket_create(): %s", socket_strerror(socket_last_error())); continue; } if ( !@socket_bind($s, $bind_address) ) { debug_log("[fatal] feed[{$feed}].item[{$item}].socket_bind({$bind_address}): %s", socket_strerror(socket_last_error())); continue; } if ( !@socket_connect($s, $torrent_host, 80) ) { debug_log("[fatal] feed[{$feed}].item[{$item}].socket_connect({$torrent_host}, 80): %s", socket_strerror(socket_last_error())); continue; } socket_write($s, "GET {$torrent_path} HTTP/1.0\r\n"); socket_write($s, "Host: {$torrent_host}\r\n"); socket_write($s, "Connection: Close\r\n"); socket_write($s, "Cookie: {$feed[1]}\r\n\r\n"); $torrent = ""; while ( ($read = socket_read($s, 0xffff)) ) { $torrent .= $read; } $torrent = substr($torrent, strpos($torrent, "\r\n\r\n") + 4); file_put_contents($save_as, $torrent); debug_log("Downloaded '%s' to '%s'.", $items[$item]["title"], $save_as); call_user_func_array($feeds[$feed][0], array($save_as)); }}