1. PHP / Говнокод #12787

    +151

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    if (anidub::$exucution)
    		{
    			//получаем страницу для парсинга
    			$page = anidub::getContent($torrent_id, anidub::$sess_cookie);
    
    			if ( ! empty($page))
    			{
    				//ищем на странице дату регистрации торрента
    				if (preg_match("/<td width=\"\" class=\"heading\" valign=\"top\" align=\"right\">Добавлен<\/td><td valign=\"top\" align=\"left\">(.*)<\/td>/", $page, $array))
    				{
    					//проверяем удалось ли получить дату со страницы
    					if (isset($array[1]))
    					{
    						//если дата не равна ничему
    						if ( ! empty($array[1]))
    						{
    							//сбрасываем варнинг
    							Database::clearWarnings($tracker);
    							//приводим дату к общему виду
    							$date = $array[1];
    							$date_str = anidub::dateNumToString($array[1]);
    							//если даты не совпадают, перекачиваем торрент
    							if ($date != $timestamp)
    							{
                                    preg_match('/<a href=\"download\.php\?id=(\d{2,6})&name=(.*)\">/U', $page, $array);
                                    $torrent_id = $array[1];
                                    $torrent_id_name = $array[2];
    								//сохраняем торрент в файл
    								$torrent = anidub::getTorrent($torrent_id, $torrent_id_name, anidub::$sess_cookie);
    								$client = ClientAdapterFactory::getStorage('file');
    								$client->store($torrent, $id, $tracker, $name, $torrent_id, $timestamp);
    								//обновляем время регистрации торрента в базе
    								Database::setNewDate($id, $date);
    								//отправляем уведомлении о новом торренте
    								$message = $name.' обновлён.';
    								Notification::sendNotification('notification', $date_str, $tracker, $message);
    							}
    						}
    						else
    						{
    							//устанавливаем варнинг
    							if (anidub::$warning == NULL)
    							{
    								anidub::$warning = TRUE;
    								Errors::setWarnings($tracker, 'not_available');
    							}
    							//останавливаем процесс выполнения, т.к. не может работать без кук
    							anidub::$exucution = FALSE;
    						}
    					}
    					else
    					{
    						//устанавливаем варнинг
    						if (anidub::$warning == NULL)
    						{
    							anidub::$warning = TRUE;
    							Errors::setWarnings($tracker, 'not_available');
    						}
    						//останавливаем процесс выполнения, т.к. не может работать без кук
    						anidub::$exucution = FALSE;
    					}
    				}
    				else
    				{
    					//устанавливаем варнинг
    					if (anidub::$warning == NULL)
    					{
    						anidub::$warning = TRUE;
    						Errors::setWarnings($tracker, 'not_available');
    					}
    					//останавливаем процесс выполнения, т.к. не может работать без кук
    					anidub::$exucution = FALSE;
    				}
    			}			
    			else
    			{
    				//устанавливаем варнинг
    				if (anidub::$warning == NULL)
    				{
    					anidub::$warning = TRUE;
    					Errors::setWarnings($tracker, 'not_available');
    				}
    				//останавливаем процесс выполнения, т.к. не может работать без кук
    				anidub::$exucution = FALSE;
    			}
    		}

    Классическая лесенка пыхомакаки.

    Запостил: Stallman, 23 Марта 2013

    Комментарии (16) RSS

    • > Классическая лесенка пыхомакаки.

      ы? ты про что это? с каких это пор пыхомакаки обрабатывают ошибки??
      Ответить
    • anidub?О_о
      Ответить
    • В PHP давно есть нормальные библиотеки для парсинга HTML, зачем по-старинке разбирать его регулярками?
      Ответить
      • Если использовать SimpleXML, то в случае изменения вёрстки (например в <div> обернули) придётся каждый раз править путь к элементу. А что-то типа phpQuery проиграет по производительности, причём нехило так проиграет.
        Ответить
        • SimpleXML не является нормальной библиотекой для парсинга HTML.

          Вспомнилась классика: http://stackoverflow.com/a/1732454/484666
          Ответить
          • Для парсеринга более менее нормального HTML вполне подходит, для совсем кривого DOM подойдёт.
            Ответить
            • >парсеринга
              Записал.

              >более менее нормального HTML
              Вот пример парсеринга полностью валидного HTML
              $ php -r '$moreOrLessHTML = new SimpleXMLElement("<br>");'
              
              Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Premature end of data in tag br line 1 in Command line code on line 1
              
              Warning: SimpleXMLElement::__construct(): <br> in Command line code on line 1
              
              Warning: SimpleXMLElement::__construct():     ^ in Command line code on line 1
              
              Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in Command line code:1
              Stack trace:
              #0 Command line code(1): SimpleXMLElement->__construct('<br>')
              #1 {main}
                thrown in Command line code on line 1
              Ответить
              • А мне норм
                Ответить
              • Use tidy, Luke!
                $tidy = new tidy();
                        $tidy->parseString( $aHtml, array(
                            'output-xml'       => true,
                            'clean'            => true,
                            'numeric-entities' => true
                        ), 'utf8' );
                
                        $tidy->cleanRepair();
                        //echo tidy_get_output( $tidy );
                        
                        $xml = simplexml_load_string( tidy_get_output( $tidy ) );
                Ответить
        • Используй относительные пути, Люк!
          Ответить
      • Хотя у него регулярки такие, что тоже придётся править
        Ответить
    • Я тоже когда-то сделал парсер AniDub http://craftdev.ru/anidub/
      P.S. там код мой, не ваш
      Ответить
      • Какая прелесть нарушения авторских прав на ГК. вот к чему приводит жажда славы/дефицит внимания.
        Ответить
    • ну так ведь в мире пхп как принято: больше строк кода -- больше доширака!
      Ответить

    Добавить комментарий