За последние 24 часа нас посетили 18482 программиста и 1607 роботов. Сейчас ищут 879 программистов ...

Как вытащить информацию из торрент файла?

Тема в разделе "PHP для новичков", создана пользователем solistcomru, 8 окт 2010.

  1. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    Подскажите пожалуйста простой способ извлечения информации из торрент файла при помощи php. Интересуют только два параметра. Количество сидеров и личеров. :roll:
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Долго объяснять, вот описание (на английском) http://wiki.theory.org/BitTorrentSpecification

    Если вкратце то
    1 - вычислить хеш, и адреса трекеров
    2 - запросить у трекеров количество пиров
     
  3. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    К сожалению в английском языке я полный нуп. Но все равно спасибо. Ты дал мне от чего оттолкнуться. А то я не мог найти вообще ничего по этому вопросу.
     
  4. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    И снова в тупике. Вот нашел функцию:
    PHP:
    1. <?php $hash = md5_file("torrents/Fullmetal.Alchemist_[bt.normaplus.com].torrent");
    2. echo $hash;?>
    На выходе получаю такое вот значение:
    d158f229c3c8decd65b7cb176d46e612

    Думаю это наверно и есть хеш файла. Только вот что делать дальше. Понятия не имею)
     
  5. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    кхм...
    с этим хэшем дальше можно делать все что угодно, кроме получения из него нужной тебе информации.
    не в ту сторону пошел.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    solistcomru
    количество сидеров и личеров из файла не извлекается =)
     
  7. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Это неверно!
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Не согласен! >:-(
    (Apple, а что не верно?) =)
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  11. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    Может кто нибудь дать пояснение к этому парсеру?
    Т.е куда вписывать путь к файлу торрента.
    В какой переменной содержится информация о личерах, сидерах.

    Я пытался разобраться но что-то не очень выходит. Пробовал прописать этот путь сделав так. $input = "torrents/Fullmetal.Alchemist_[bt.normaplus.com].torrent";
    По логике эта переменная отвечает за путь к вайлу. Но на выходе получаю только это:
    usage: id=1
    И что это, мне обсолютно не понятно.

    И еще не понятно откуда взяться значениям для половины переменных. Например в начале идет условие:
    PHP:
    1. if ($argc != 2) exit("usage: ".$argv[0]." <torrent>");
    Где спрашивается $argc должна была получить значение равное 2? Больше этой переменной я нигде в коде не вижу.
    PHP:
    1.  
    2. <?php
    3.  
    4. // bit torrent parser function by techtonik // php.net
    5.  
    6.  
    7. if ($argc != 2) exit("usage: ".$argv[0]." <torrent>");
    8. $input = $argv[1];
    9. if (!file_exists($input)) { exit("input file $input doesn't exists"); }
    10.  
    11. $str = file_get_contents($input);
    12.  
    13. function parse_torrent($s) {
    14.     static $str;
    15.     $str = $s;
    16.  
    17. //    echo $str{0};
    18.  
    19.     if ($str{0} == 'd') {
    20.        $str = substr($str,1);
    21.        $ret = array();
    22.        while (strlen($str) && $str{0} != 'e') {
    23.           $key = parse_torrent($str);
    24.           if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made
    25.           if (!strcmp($key, "info")) {
    26.               $save = $str;
    27.           }
    28. //          echo ".",$str{0};
    29.           $value = parse_torrent($str);
    30.           if (!strcmp($key, "info")) {
    31.               $tosha = substr($save, 0, strlen($save) - strlen($str));
    32.               $ret['info_hash'] = sha1($tosha);
    33.           }
    34.  
    35.           // process hashes - make this stuff an array by piece
    36.           if (!strcmp($key, "pieces")) {
    37.               $value = explode("====",
    38.                          substr(
    39.                            chunk_split( $value, 20, "===="),
    40.                            0, -4
    41.                          )
    42.                        );
    43.           };
    44.           $ret[$key] = $value;
    45.        }
    46.        $str = substr($str,1);
    47.        return $ret;
    48.     } else if ($str{0} == 'i') {
    49. //       echo "_";
    50.        $ret = substr($str, 1, strpos($str, "e")-1);
    51.        $str = substr($str, strpos($str, "e")+1);
    52.        return $ret;
    53.     } else if ($str{0} == 'l') {
    54. //       echo "#";
    55.        $ret = array();
    56.        $str = substr($str, 1);
    57.        while (strlen($str) && $str{0} != 'e') {
    58.           $value = parse_torrent($str);
    59.           if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made
    60.           $ret[] = $value;
    61.        }
    62.        $str = substr($str,1);
    63.        return $ret;
    64.     } else if (is_numeric($str{0})) {
    65. //       echo "@";
    66.        $namelen = substr($str, 0, strpos($str, ":"));
    67.        $name = substr($str, strpos($str, ":")+1, $namelen);
    68.        $str = substr($str, strpos($str, ":")+1+$namelen);
    69.        return $name;
    70.     }                                
    71. }
    72.  
    73. $bencode = parse_torrent($str);
    74.  
    75. print_r( $bencode );
    76. ?>