За последние 24 часа нас посетили 24450 программистов и 1563 робота. Сейчас ищут 1158 программистов ...

Треклист с рутрекера. Что можно придумать ??

Тема в разделе "PHP для новичков", создана пользователем Dima4321, 13 янв 2011.

  1. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    C wiki разобрался. Там взять контент можно. А вот с рутрекером проблема.

    Хочу спарсить трелист группы. Но почему-то пустые массивы изначально в этом месте.

    Здесь нужны сокеты, которые сэмулируют браузер и регистрацию или можно решить задачу проще.?

    PHP:
    1. <?php
    2.  ini_set('display_errors', 1);
    3.  error_reporting(E_ALL);
    4.  $str = file('http://rutracker.org/forum/viewtopic.php?t=3303660');
    5.  print_r($str);// в дампе не отображается треклист просто пустые массивы
    6.  echo $str[831];// пусто
    7.  echo $str[927];// пусто
    8.  ?>
    Буду рад подсказке. Заранее спасибо.
     
  2. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Ау братья и сестры !! ))


    ???
     
  3. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Он выводит то, что вы его просите. А просите вы его вывести два </div>, а так как вы всё это через браузер смотрите, а в исходник страницы скорее всего не заглянули, вот и кажется вам, что он ничего не выводит. Всё он выводит. Смените номера выводимых строк.
     
  4. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Спасибо большое Johnatan

    PHP:
    1. <?php
    2.  ini_set('display_errors', 1);
    3.  error_reporting(E_ALL);
    4.  $str = file('http://rutracker.org/forum/viewtopic.php?t=3303660');
    5.  
    6.  
    7. $i=543;
    8.  
    9.   while($i<=1052)
    10. {
    11.  
    12. echo strip_tags($str[$i]);
    13. echo '<br>';
    14. $i++;
    15.  
    16. }
    17.  
    18.  ?>
    Боюсь показать наивным, но осталось несколько вопросов.
    1. Можно ли сразу просматривать содержимое html страницы с помощью скрипта. ( сейчас приходится делать это колхозным методом, сохраняя страницу на компе при помоще меню браузера 'сохранить' и затем ее открытие блокнотом или текстовым реадктором уже с винча.)
    2. В треклист в разных местах попала вот эта бяка &amp;#=41;. вместо закрывающей скобки. С помощью str_replace избавляться или можно это предусмотреть заранее.
     
  5. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    PHP:
    1. $str = file('http://rutracker.org/forum/viewtopic.php?t=3303660');
    2. echo "<pre>";
    3. print_r(array_map("htmlspecialchars", $str));
    4. echo "</pre>";
     
  6. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Кстати вот второй решение задачи более логичное.

    PHP:
    1. <?php
    2.  ini_set('display_errors', 1);
    3.  error_reporting(E_ALL);
    4.  $str = file_get_contents('http://rutracker.org/forum/viewtopic.php?t=3303660');
    5.  
    6. $poisk='/<div class=\"sp-wrap\">.+<\/div>\s<\/div>\s<\/div>/si';
    7.  
    8. preg_match($poisk,$str,$match);
    9.  
    10.  
    11. echo strip_tags($match[0],'<br />');
    12.  
    13.  
    14.  ?>
    Тут тоже эта бяка &amp;#=41 (((

    Вдобавок я не понимаю почему <br /> не остается в тексте. И все сливается в кашу .

    Помогите разобраться !! (((((((((9
     
  7. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Оказывается надо было написать так )))

    Код (Text):
    1. echo strip_tags($match[0],'<br>');
     
  8. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот более корректное отображение.
    Единственное , что осталось сделать отступы. По-моему можно задать это дивом, я его как раз оставил .

    Может напомните как это вынести кодом ?? без css просто вначале такой -то див, такие то параметры

    PHP:
    1. <?php
    2.  ini_set('display_errors', 1);
    3.  error_reporting(E_ALL);
    4.  $str = file_get_contents('http://rutracker.org/forum/viewtopic.php?t=3303660');
    5.  
    6. $poisk='/<div class=\"sp-wrap\">.+<\/div>\s<\/div>\s<\/div>/si';
    7.  
    8. preg_match($poisk,$str,$match);
    9.  
    10.  
    11. echo strip_tags($match[0],'<br>,<div>');
    12.  
    13.  
    14.  ?>
     
  9. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    PHP:
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    2. <html>
    3.  <head>
    4.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    5.   <title>Тег DIV</title>
    6.  
    7. <style type="text/css">
    8.    .sp-wrap {
    9.     width: 200px;
    10.     background: #ccc;
    11.     padding: 5px;
    12.     padding-right: 20px;
    13.     border: solid 1px black;
    14.     float: left;
    15.    }
    16.    .sp-body {
    17.     width: 200px;
    18.     background: #ccc;
    19.     padding: 5px;
    20.     padding-right: 20px;
    21.     border: solid 1px black;
    22.     float: left;
    23.    }
    24.    
    25.    </style>
    26.  </head>
    27.   </body>
    28.  
    29. <?php
    30.  ini_set('display_errors', 1);
    31.  error_reporting(E_ALL);
    32.  
    33.  
    34.  $str = file_get_contents('http://rutracker.org/forum/viewtopic.php?t=3303660');
    35.  
    36. $poisk='/<div class=\"sp-wrap\">.+<\/div>\s<\/div>\s<\/div>/si';
    37.  
    38. preg_match($poisk,$str,$match);
    39.  
    40.  
    41. echo strip_tags($match[0],'<br>,<div>');
    42.  
    43.  
    44.  ?>
    45.  
    46.  </body>
    47. </html>
    Где-то уже рядом но предстоит еще много чего порезать...
     
  10. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0

    Дружище что ты этим хотел сказать ??

    Вот часть этого дампа

    [541] => <div class="sp-body" title="Vegas'79 (Bootleg&amp;#41; - 1979 (192kbps&amp;#41;">

    [542] => <h3 class="sp-title">Vegas'79 (Bootleg&amp;#41; - 1979 (192kbps&amp;#41;</h3>


    Та бяка никак не преобразовалась ?? и мне почему-то ненагуглить что это за html сущность..

    Хттто-нибудь может помочь ??
     
  11. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    &amp; -> &
    &amp;#41; -> &#41
    192kbps&amp;#41; -> 192kbps&#41;
     
  12. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Дорогой мой коллега Jampire.

    Твоя немногословность меня убивает.

    Вот что мне помогло:

    http://php.su/functions/?htmlspecialchars_decode

    Вот еще по этой теме

    http://php.su/functions/?get-html-translation-table

    короче при переборе массива получаю строку ну а там перед выводом делаю так:

    Код (Text):
    1. $key=htmlspecialchars_decode($key, ENT_NOQUOTES);
     
  13. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Я наивно полагал, что общаюсь с профессионалом, которому не надо разжевывать очевидные вещи...
     
  14. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0

    php и регулярки изучаю пока что три месяца. Опыта ноль у меня.
     
  15. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    ХТМЛ-сущности начинаются со знака & и заканчиваются знаком ; . Вы допустили ошибку, считая, что сущностью является
    HTML:
    1. &amp;#41;
    Сущностью является
    HTML:
    1. &amp;
    Чем является #41; нужно смотреть по исходнику страницы.