За последние 24 часа нас посетили 5946 программистов и 555 роботов. Сейчас ищут 263 программиста ...

Как заменить ТИЦ на ИКС

Тема в разделе "Сделайте за меня", создана пользователем sherxan-g, 13 окт 2018.

  1. sherxan-g

    sherxan-g Новичок

    С нами с:
    11 июн 2018
    Сообщения:
    3
    Симпатии:
    0
    Помогите пожалуйста.
    PHP:
    1. function getYandexTic($url){
    2.     $ans=-1;
    3.  
    4.     $str=send_packet('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.urlencode((substr(strtolower($url),0,7)!="http://")?"http://".$url:$url));
    5.     if($str){
    6.         if(preg_match("#value=\"(.\d*)\"#", $str, $tic)){
    7.             $ans=$tic[1];
    8.         }
    9.     }
    10.  
    11.     return $ans;
    12. }

    НУЖНО ЗАМЕНИТЬ НА ИКС

    PHP:
    1. /**
    2. * Получение численного значения параметра Яндекс ИКС с картинки
    3. *
    4. * URI: https://a-panov.ru/massovaya-proverka-iks-skript-na-php/
    5. * Version: 1.0
    6. * Author: Andi Panov <a@a-panov.ru>
    7. * Author URI: http://a-panov.ru/
    8. * License: GPLv2
    9. */
    10.  
    11. class YandexIks
    12. {
    13.     private static $reference = [
    14.         '..xxxxxx....xxxxxxxxx.xxxxxxxxxxxxx.......xxxx.......xxxxx.....xxxxxxxxxxxxxx.xxxxxxxx..',
    15.         '..xx........xxx.......xxx........xxxxxxxxxxxxxxxxxxxxxx',
    16.         '.........xxxx......xxxxx......xxxxx.....xxxxxx...xxxx.xxxx.xxxx..xxxxxxxx...x.xxxx.....x',
    17.         'x........xxxx.......xxxx...x...xxxx...x...xxxx..xxx..xxxxxxxxxxxxxxxxxxxxxxxx......xxxx.',
    18.         '......xx.......xxxx......xxxxx....xxxx..x...xxxx...x...xxxxxxxxxxxxxxxxxxxxxx.......x...',
    19.         '..........xxxxxxx...xxxxxxxx...xxx...xx...xxx...xx...xxx...xxxxxxxx...xxxxxxx.....xxxx..',
    20.         '....xxxxx....xxxxxxxxx.xxxxxx.xxxxxxxxx...xxxxx.xx...xxxx..xx...xxx...xxxxxxxx....xxxxx.',
    21.         'x..........x.........xx.......xxxx....xxxxxxx..xxxxxx..xxxxxxx....xxxxx......xxx........',
    22.         '......xxxx.xxxxxxxxxxxxxxxxxxxxxxxx..xxx..xxxx..xxx..xxxxxxxxx..xxxxxxxxxxxxx.xxxx.xxxx.',
    23.         '.xxxxx.....xxxxxxx...xxxx.xxx...xxx...xx..xxxx...xx.xxxxxx..xxxxx.xxxxxxxxx...xxxxxxx...',
    24.     ];
    25.    
    26.     /**
    27.     * Получение значения ИКС для указанного домена
    28.     *
    29.     * Данный метод не должен приводить к бану по IP при слишком частых запросов,
    30.     * не выводится капча.
    31.     */
    32.     public static function getValueFromImage($domain) {
    33.         $yaurl = 'https://www.yandex.ru/cycounter?' . $domain;
    34.         $img = @imagecreatefrompng($yaurl);
    35.        
    36.         return $img ? self::parseImg($img) : '-';
    37.     }
    38.    
    39.     private static function parseImg(&$src_img) {
    40.         // где могут размещаться данные по ИКС
    41.         $iks_x = 26;
    42.         $iks_y = 10;
    43.         $iks_w = 56;
    44.         $iks_h = 11;
    45.        
    46.         // сюда вырезается нужная часть изображения
    47.         $dst_img = imagecreatetruecolor($iks_w, $iks_h);
    48.        
    49.         // нужна часть изображения, на которой могут быть цифры
    50.         imagecopy($dst_img, $src_img, 0, 0, $iks_x, $iks_y, $iks_w, $iks_h);
    51.        
    52.         $arr = [];
    53.         for ($i = 0; $i < $iks_w; ++$i) {
    54.             $arr[$i] = '';
    55.             for ($j = 0; $j < $iks_h; ++$j) {
    56.                 $arr[$i] .= 8882055 == imagecolorat($dst_img, $i, $j) ? '.' : 'x';
    57.             }
    58.         }
    59.        
    60.         // подчистить пустые ряды
    61.         for ($i = 0; $i < $iks_w; ++$i) {
    62.             if ('...........' == $arr[$i])  unset($arr[$i]);
    63.         }
    64.        
    65.         $iks = '';
    66.         $current_symbol = '';
    67.         $current_len = 0;
    68.        
    69.         foreach ($arr as $v) {
    70.             $current_symbol .= $v;
    71.             $current_len += 11;
    72.            
    73.             if (88 == $current_len) { // все символы имеют ширину 8
    74.                 foreach (self::$reference as $num => $symb) {
    75.                     if (similar_text($symb, $current_symbol) > 80) {
    76.                         $iks .= $num;
    77.                         break;
    78.                     }
    79.                 }
    80.                 $current_symbol = '';
    81.                 $current_len = 0;
    82.             } elseif (55 == $current_len) { // кроме 1 — у него ширина 5
    83.                 if (similar_text(self::$reference[1], $current_symbol) > 50) {
    84.                     $iks .= 1;
    85.                     $current_symbol = '';
    86.                     $current_len = 0;
    87.                 }
    88.             }
    89.         }
    90.         return $iks;
    91.     }
    92. }