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

    +159

    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
    $link = 'http://www.logofon.ru/xml/ips.xml';
    
    $file = win_to_utf(file_get_contents($link));
    
    $file = trim(substr((substr($file,0,strripos($file,'</operators>'))),(stripos($file,'<operators>') + 11)));
    
    #echo substr_count($file,'<operator').'<br />';
    
    #preg_match_all('|\<operator(.*)\>(.*)\<\/operator\>|sUu',$file,$res);
    #array_dump($res);
    
    preg_match_all('|\<operator id="([0-9]*)" name="([[:space:]a-zA-Zа-яА-ЯёЁ0-9-(){}_.:]*)" label="([[:space:]a-zA-Z0-9]*)" tld="([a-zA-Z0-9]*)" country="([[:space:]a-zA-Zа-яА-Я0-9-(){}_.]*)" publish="([0-9]*)"\>(.*)\<\/operator\>|Usu',$file,$result);
    
    
    
    //-- Количество операторов
    $count_oper = count($result[0]);
    
    //-- Массив операторов
    $operators = array();
    
    //-- Запускаем цикл
     for($i = 0;$i < $count_oper; $i ++)
    {
    //-- Массив текущего оператора
    $operators[$i] = array();
    
    $operators[$i]['id'] = $result[1][$i];
    $operators[$i]['name'] = $result[2][$i];
    #$operators[$i]['label'] = $result[3][$i];
    $operators[$i]['tld'] = $result[4][$i];
    $operators[$i]['country'] = $result[5][$i];
    
    
    
    //-- Создаем базы IP
    $operators[$i]['ip'] = array();
    
    preg_match_all('|\<range ip1="([0-9]{10})" ip2="([0-9]{10})" mode="([0-9]*)" \/\>|Usu',$result[7][$i],$result2);
    #echo '<b>#'.($i + 1).'.</b>'.htmlspecialchars($result[7][$i]).'<br />';
    #array_dump($result2);
    
    //-- Количество диапазанов для текущего опера
    $count_ip = count($result2[0]);
    
    //-- Еще один цикл
      for($j = 0;$j < $count_ip; $j ++)
     {
     	query("INSERT INTO `$db[prefix]ips` SET `name`='{$operators[$i]['name']}',`id_op`='{$operators[$i]['id']}',`country`='{$operators[$i]['country']}',`tld`='{$operators[$i]['tld']}',`ip1`='{$result2[1][$j]}',`ip2`='{$result2[2][$j]}' ")or my_error();
    # $operators[$i]['ip'][$j] = array($result2[1][$j],$result2[2][$j]);
    #echo long2ip($result2[1][$j]).' --- '.long2ip($result2[2][$j]).'<br />';
     }
    
    }
    
    
    echo 'Операторов после : <b>'.($count_op_after = mysql_num_rows(query("SELECT COUNT(*) FROM `$db[prefix]ips` GROUP BY `id_op` "))).'</b><br />';
    echo 'Диапазонов после : <b>'.($count_di_after = mysql_result(query("SELECT COUNT(*) FROM `$db[prefix]ips` "),0)).'</b><br />';

    Парсинг диапазонов IP мобильных операторов

    Запостил: Morgan, 22 Декабря 2010

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

    • win_to_utf
      Победа уходит к UTF.
      Ответить
    • > //-- Массив операторов
      {{+,+,+,+,+,+,+,+,+,+,+,+,+,+,+},{+,+,+, +,+,+,+,+,+,+,+,+,+,+,+},{+,+,+,+,+,+,+, +,+,+,+,+,+,+,+}}
      Ответить
      • Вот блин, промазал по плюсу(попал в минус), а всё потому что юзабилити "как на хабре" хромает. Надо плюс и минус размещать по разные стороны от оценки, т.е. x +1 v
        Ответить
        • Зато отмазываться удобно.
          Если когда-нибудь сделают показ "кто менял отзывы".
          Ответить
        • Вот на коде так и сделано, а на коментах не так.
          Ответить
          • Тупо слизано с Хабра, там тоже на постах по разные стороны, а на коментах справа.
            Ответить
            • Хабр отстой, там скрипт открытия коментов ядрёный, браузер вешается весь, даже другие вкладки.
              Здесь этот скрипт намного адекватнее.
              Ответить
              • Скрипт открытия комментов? Это не Хабр глючит, а установленный вами говно-юзерскрипт, который грузит в фоне html'ку и парсит из неё каменты. Достаточно его отключить и будет норм, а если бас бесит, что вкладка вешает весь браузер, то для вас есть Хром, там все вкладки независимые.
                Тут же скрипт нативный и грузит только то что надо.

                P.S. толсто ;-)
                Ответить
                • Я ничего не устанавливал. То, что Опера не дружит с Хабром (и с ЖЖ) - давно известно.
                  Ответить
                  • В Хабре каменты не раскрываются, они показываются только на отдельной странице. А Опера со много чем не дружит, местами там , конечно, сделано грамотно, а местами разработчиков Оперы и IE собрать вместе и отправить на необитаемый остров.
                    Ответить
    • Парсить XML такими регулярками еще хуже, чем юзать simple_xml.
      Сколько ж оно памяти скушает на 16метровой XML'ке, не говоря уже о многосотметровой? Ладно ini_set('memory_limit', '100500M'); им в помощь.

      P.S. куда дели парсинг IPшек, там должно быть самое интересное, небось преобразовывают в php в строку и хранят её в базе.
      Ответить
    • хм, логофон это хорошее, годное название
      Ответить

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