Для получения полного доступа
зарегистрируйтесь

jumper423    58   5 595

Открыт к предложениям по работе

Роллер)

  • Санкт-Петербург
  • ООО Оксар
  • PHP
  • ТТИиП
  • АСЕМ
  • Зарегистрирован год назад

GitHub

Описание

Пакет создан для стандартизации всех сервисов по разгадыванию капч. У каждого сервиса есть свои особенности и теперь Вам надо будет всего лишь взглянуть на документацию конкретного сервиса чтобы правильно всё сделать. Так же пакет покрывает всю функциональсть сервисов. Если же Вам будет чего-то нехватать или будут предложения, я буду только рад их услышать.

Особенности

  • Подходит для всех сервисов по распознаванию капч
  • Можно легко добавить новый сервис, используя уже готовый движок
  • Быстрая и интуительно понятная настройка
  • Распознавание как по пути до файла, так и по ссылки
  • ReCaptcha v2 без браузера
  • Полная документация
  • Покрыт тестами

Продолжение

File Iterator

Build Status

Ссылка GitHub

Установка

php composer.phar require --prefer-dist jumper423/file-iterator

или

"jumper423/yfile-iterator": "*"

в файле composer.json.

Использование

$fileIterator = new \jumper423\FileIterator(__DIR__ . '/file');
$fileIterator->rewind();
$fileIterator->next();
$fileIterator->next();
$fileIterator->seek(3);
$fileIterator->next();
echo $fileIterator->current();
$fileIterator->next();
echo $fileIterator->current();
$fileIterator->seek(9);
$fileIterator->next();
$fileIterator->next();
if ($fileIterator->valid()) {
    ...
}

Покрыт тестами

vendor/bin/phpunit 

Ссылка GitHub

Продолжение

SMS-2-770x285.jpg

yii2-sms

Приём смс сообщений

Ссылка на проект GitHub

Компонент позволяет объединить несколько сервисов по приёму смс сообщений.

Сервисы

На данные момент разработано api для сервисов

Особенности

  • Сразу несколько сервисов по приёму смс сообщений
  • Лёгкая возможность добавить пользовательский сервис
  • Анализ на каком из сервисов есть доступные номера
  • Выбор самого выгодного сервиса для определённого сайта

Продолжение

Smoothsort.gifGitHub / Демо

Плавная сортировка вертикальных элементов.

Главной задачей было добиться максимальной быстрой скорости сортировки и отрисовки, без лишних действий. Данный плагин предназначен для узкого списка задач, по этому на супер функциональность в нём можете не рассчитывать.

Так же есть AssetBundle для Yii2 SmoothSortAsset

Продолжение

Yii2 VK

Компонент для расширенной работы с ВК API в YII2. Загрузка изображений, распознавание капчи, постановка очередей и многое другое.

Сайт с подробным описанием yii2 api vk GitHub

Особенности

  • Задержка выполнения
  • Разделины post и get
  • Загрузка изображений
  • Добавление в очереди
  • Запись задач и выполнению их по cron-у
  • Интеграция с распознованием капчи
  • Запись в атрибуты token-а

Продолжение

Компонент предоставляет возможность лёгкой работы со всеми сервисами по распознаванию капч работающих по общим стандартам. Я лично использую ruCaptcha(цены вполне устраивают от 13 до 44 рублей за 1000 капч).

Настройка

...
'components' => [
    'captcha' => [
        'class' => 'jumper423\Captcha', //Компонент который мы будем использовать
        'pathTmp' => '@common/captcha', //Если мы в качестве капчи будем использовать ссылку на нём, то необходимо указать куда будут складироваться файлы
        'apiKey' => '42eab4119020dbc729f657fef178r546', // API ключ
    ],
],
...

Ссылки: — GitHubPackagistСайт

$path = 'path/to/captcha.png';
if (\Yii::$app->captcha->run($path)) {
   $captcha = \Yii::$app->captcha->result();
} else {
   throw new Exception(\Yii::$app->captcha->error());
}

// или для ссылок

$url = 'https://vk.com/captcha.php?sid=698254154192&s=1';
if (\Yii::$app->captcha->run($url)) {
   $captcha = \Yii::$app->captcha->result();
} else {
   throw new Exception(\Yii::$app->captcha->error());
}

Использование

if ($('#subcategories').view()) {
   alert('Виден');
} else {
   alert('Не виден');
}
jQuery.fn.view = function () {
    'use strict';
    if (!this.length) {
        return false;
    }
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = this.offset().top;
    var elemBottom = elemTop + this.height();

    return ((docViewTop < elemTop) && (docViewBottom > elemBottom));
};

Простой шаблонизатор.

Выложил на GitHub https://github.com/jumper423/SimpleTemplate/

Пример шаблона

<ul class="eight columns">
   <!-- BEGIN menu_row -->
     <li>
         <a href="{href}">
             {text}
         </a>
     </li>
   <!-- END menu_row -->
</ul>

Пример кода

$t->block_temlate(SITE_PATH . "templates/menu.html");
$t->set_var("href", 'index.php');
$t->set_var("text", 'Главная');
$t->parse("menu_row");
$t->set_var("href", 'string.php');
$t->set_var("text", 'Вещи');
$t->parse("menu_row");
$t->set_var("href", 'npc.php');
$t->set_var("text", 'NPC');
$t->parse("menu_row");
$t->set_var("href", 'market.php');
$t->set_var("text", 'Магазины');
$t->parse("menu_row");
$t->insert_block('menu');
<?php

namespace jumper423\SimpleTemplate;

/**
 * Class SimpleTemplate
 * @package jumper423\SimpleTemplate
 */
class SimpleTemplate
{
    public $mainFields = [];
    public $mainTemplate = [];
    public $mainFile = null;
    public $blockFields = [];
    public $blockTemplate = [];
    public $blockFile = null;

    /**
     * Задаём путь до главного шаблона
     * @param $path
     */
    public function mainTemplate($path)
    {
        $this->mainFile = file_get_contents($path);
        preg_match_all('/{([^{}]*)}/', $this->blockFile, $matches);
        if (count($matches[1]) > 0) {
            //Проходимся по ним
            foreach ($matches[1] as $marker) {
                //Перестраиваем массив
                $this->mainFields[$marker] = null;
            }
        }
    }

    /**
     * Вставляем в метку главного шаблона текуший блок или строку
     * @param $marker
     * @param null $html
     */
    public function insertBlock($marker, $html = null)
    {
        if (is_null($html)) {
            $html = $this->blockOutput();
        }
        if (array_key_exists($marker, $this->mainFields)) {
            $this->mainFields[$marker] .= $html; //Записываем получившийся html  в метку
        } else {
            $this->mainFields[$marker] = $html; //Записываем получившийся html  в метку
        }
    }

    /**
     * Задаём путь до блока
     * @param $path
     */
    public function blockTemplate($path)
    {
        $this->blockFile = file_get_contents($path);
        while (preg_match('/<!-- BEGIN ([^BEGIN|END]*) -->([^BEGIN|END]*)\<!-- END ([^BEGIN|END]*) -->/', $this->blockFile, $matches)) {//Если есть строка со скобками в скоторой нет скобок, то записываем её в массив
            $name = $matches[1];
            $html = trim($matches[2]);
            $this->blockTemplate[$name] = $html;
            $this->blockFile = str_replace($matches[0], "{" . $name . "}", $this->blockFile);
        }
    }

    /**
     * Задаём знчение метки
     * @param $field
     * @param $value
     */
    public function setVar($field, $value)
    {
        $this->blockFields[$field] = $value;
    }

    /**
     * Парсим блок
     * @param $block
     */
    public function parse($block)
    {
        //достаём шаблон
        $template = $this->blockTemplate[$block];
        //Заменяем все метки
        if (!array_key_exists($block, $this->blockFields)) {
            $this->blockFields[$block] = '';
        }
        $this->blockFields[$block] .= $this->conversion($template, $this->blockFields); //Записываем получившийся html  в метку
    }

    /**
     * Блок
     * @return string
     */
    public function blockOutput()
    {
        $result = $this->conversion($this->blockFile, $this->blockFields);
        unset($this->blockFile);
        unset($this->blockTemplate);
        unset($this->blockFields);
        return $result;
    }

    /**
     * Млаынй шаблон
     * @param bool|true $view
     * @return string
     */
    public function mainOutput($view = true)
    {
        $result = $this->conversion($this->mainFile, $this->mainFields);
        unset($this->mainFile);
        unset($this->mainTemplate);
        unset($this->mainFields);
        if ($view) {
            echo $result;
        }
        return $result;
    }

    /**
     * @param string $template
     * @param array $fields
     * @return string
     */
    private function conversion($template, $fields)
    {
        while (preg_match_all('/{([^{}]*)}/', $template, $matchesTags)) {
            if (count($matchesTags[1]) > 0) {
                //Проходимся по ним
                foreach ($matchesTags[1] as $marker) {
                    //Перестраиваем массив
                    if (array_key_exists($marker, $fields)) {
                        $template = str_replace("{" . $marker . "}", $fields[$marker], $template);
                    } else {
                        $template = str_replace("{" . $marker . "}", null, $template);
                    }
                }
            }
        }
        return $template;
    }
}

Пример шаблона: (Здравствуйте|Добрый день), Евгений.(| Сегодня (прекрасная|плохая|ужасная) погода, не так ли?| Как Вы (поживаете|себя чувствуете)?)

В круглых скобках(группах) фразы разделены символом |. Из группы выбирается одна случайная фраза. Группы могут содержать неограниченное количество подгрупп. Таким образом из примера-шаблона могут получиться лишь следующие фразы:

  • Здравствуйте, Евгений.
  • Добрый день, Евгений.
  • Здравствуйте, Евгений. Сегодня прекрасная погода, не так ли?
  • Добрый день, Евгений. Как Вы поживаете? и т.д.
<?php

function strTemplate($enter)
{
    while(preg_match_all('/\\(([^()]*)\\)/', $enter, $matches))//Если есть строка со скобками в скоторой нет скобок, то записываем её в массив
    {
        $list = explode("|",substr($matches[0][0], 1, strlen ($matches[0][0])-2));//массив вариантов
        $enter = substr($enter, 0, strpos($enter, $matches[0][0])).$list[rand(0, substr_count(substr($matches[0][0], 1, strlen ($matches[0][0])-2),"|"))].substr($enter, strlen ($enter) - strrpos(strrev ($enter), strrev ($matches[0][0])));//собираем строку
    }
    echo $enter;
}
 
$a = strTemplate("(Здравствуйте|Добрый день), Евгений.(| Сегодня (прекрасная|плохая|ужасная) погода, не так ли?| Как Вы (поживаете|себя чувствуете)?)");
echo ($a);