zbigz www win utorrent peliculas para paginas downloads descargar burnbit php bittorrent

php - peliculas - www utorrent com downloads complete os win



Módulo PHP para leer archivos torrent (4)

¿Hay algún módulo PHP que pueda usar para leer un torrente programáticamente para encontrar información al respecto, por ejemplo, Seeders?



Los archivos Torrent son básicamente diccionarios anidados codificados con BEncode . BEncode es una codificación simple y hay algunas clases PHP de BDecode, como esta .

La estructura del archivo torrent se describe en BEP0003 .

Tenga en cuenta que los archivos torrent no contienen el campo "Sembradoras" que usted menciona. La lista de sembradoras es dinámica y está administrada por el servidor rastreador. Teniendo hash_info y tracker_url (ambos disponibles del archivo torrent) de torrent, puede enviar solicitud de raspado al rastreador y devolverá el número de semillas en el campo "completo", consulte la Convención rastreador Tracker .



He utilizado estas funciones en un pequeño sitio web que hice una vez. Creo que los encontré con un rastreador bittorrent de php llamado OpenTracker o algo así, pero no puedo encontrar el sitio web ...

Sin embargo, no encontrarás las sembradoras en el archivo torrent. El archivo de torrent solo contiene información sobre los archivos, códigos de hash y longitudes, etc. Y algo de información de seguimiento, creo. Cuántas sembradoras y tal tendrá que obtener del rastreador. Puede leer sobre el protocolo en BitTorrent.org . La comunicación está, creo, bencodeada, por lo que también puede usar estas funciones para eso. Lo que significa que solo tiene que averiguar qué enviar para obtener lo que desea recuperar.

NOTA: No escribí estas tres funciones. Como dije, los encontré en la fuente de un rastreador de torrents de código abierto. Las funciones no se comentan, pero los nombres de las funciones junto con print_r en el resultado de un archivo torrent usted sabe que la información debería ser suficiente para entender cómo usarlos. Agregué un código de ejemplo en la parte inferior para mostrar cómo los usé. Y ellos trabajaron.

function bdecode($str) { $pos = 0; return bdecode_r($str, $pos); } function bdecode_r($str, &$pos) { $strlen = strlen($str); if (($pos < 0) || ($pos >= $strlen)) { return null; } else if ($str{$pos} == ''i'') { $pos++; $numlen = strspn($str, ''-0123456789'', $pos); $spos = $pos; $pos += $numlen; if (($pos >= $strlen) || ($str{$pos} != ''e'')) { return null; } else { $pos++; return intval(substr($str, $spos, $numlen)); } } else if ($str{$pos} == ''d'') { $pos++; $ret = array(); while ($pos < $strlen) { if ($str{$pos} == ''e'') { $pos++; return $ret; } else { $key = bdecode_r($str, $pos); if ($key == null) { return null; } else { $val = bdecode_r($str, $pos); if ($val == null) { return null; } else if (!is_array($key)) { $ret[$key] = $val; } } } } return null; } else if ($str{$pos} == ''l'') { $pos++; $ret = array(); while ($pos < $strlen) { if ($str{$pos} == ''e'') { $pos++; return $ret; } else { $val = bdecode_r($str, $pos); if ($val == null) { return null; } else { $ret[] = $val; } } } return null; } else { $numlen = strspn($str, ''0123456789'', $pos); $spos = $pos; $pos += $numlen; if (($pos >= $strlen) || ($str{$pos} != '':'')) { return null; } else { $vallen = intval(substr($str, $spos, $numlen)); $pos++; $val = substr($str, $pos, $vallen); if (strlen($val) != $vallen) { return null; } else { $pos += $vallen; return $val; } } } } function bencode($var) { if (is_int($var)) { return ''i'' . $var . ''e''; } else if (is_array($var)) { if (count($var) == 0) { return ''de''; } else { $assoc = false; foreach ($var as $key => $val) { if (!is_int($key)) { $assoc = true; break; } } if ($assoc) { ksort($var, SORT_REGULAR); $ret = ''d''; foreach ($var as $key => $val) { $ret .= bencode($key) . bencode($val); } return $ret . ''e''; } else { $ret = ''l''; foreach ($var as $val) { $ret .= bencode($val); } return $ret . ''e''; } } } else { return strlen($var) . '':'' . $var; } }

Algunos ejemplos de uso:

# Read a file $content = file_get_contents("file.torrent"); $content_d = bdecode($content); # Check if bdecode succeeded if(empty($content_d)) exit(''Something is wrong with the torrent. BDecode failed.''); # Calculate info_hash $info_hash = sha1(bencode($content_d[''info'']), true); # Calculate length $length = 0; function add_length($value, $key) { global $length; if($key == ''length'') $length += $value; } array_walk_recursive($content_d, ''add_length'');