Получение словоформ, или внутреннее апи текстру


Наверняка вы слышали что-то о таком ресурсе как текстру. Одна из основных его функций – это проверка уникальности текста. Но помимо уникальности в результатах проверки еще есть и другие параметры, в частности, используемые словоформы слова. Но когда забираешь информацию о проверенном тексте по апи – выдается только число повторений, но не сами словоформы слова. Однако, в вебинтерфейсе они есть – забираются по некому непубличному апи. Давайте и мы научимся забирать словоформы и все остальное, что есть в этом апи.

Введение

Один из моих заказчиков пользуется услугами копирайтеров и вот таких текстовых бирж. Ему понадобилось сделать сервис, который отправляет тексты на проверку и забирает их результаты, потом отображает у себя в удобном виде. Использованные слова, повторения и так далее. И вот, в частности ему нужны стали словоформы слова. Если смотреть результат проверки в браузере, то можно увидеть эти словоформы



Но вот в апи, которое дает текстру – их нет. Я написал в техподдержку – те подтвердили, что да, такое не предусмотрено. Но нам то они нужны! Может просто вытащить их из страницы, спарсив её? Начинаем изучать код, и как идет взаимодействие с сетью.

Работа

Долго изучать не пришлось, сразу стало видно, что результат проверки подгружается на страницу с помощью POST-запроса к некому поддомену plagiarism-archive



Результат отдается в формате JSON и самое главное в этом JSON-е есть словоформы:



Слово api в адресе недвусмысленно показывает, что у текстру есть еще какое-то апи, но предназначенное для внутреннего пользования, в частность для получения результатов проверки на фронте. Параметры этого запроса:



Так как мы не авторизованы на сайте, то получается некий нулевой пользователь с неким ключом. Если зарегистрироваться, то в этих полях будет ваш ид пользователя и ваш ключ (причем не тот, который дается для публичного апи). Это все хорошо, но мы планируем забирать информацию с другого сервера, не будет ли чинить препятствий в этом нам текстру? Пока не попробуешь – не узнаешь. Набрасываем функцию для получения

 
function get_text_check_inner($text_uid){
    global $user_id, $userkey_textru_in;

    $body = [
        'params' => ['text_uid' => $text_uid],
        'user_id' => $user_id,
        'user_key' => $userkey_textru_in
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://plagiarism-archive.text.ru/api/info_text');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-type: application/json']);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body));
    $rawResponse = curl_exec($ch);
    if (curl_errno($ch)) {
        throw new \Exception('Ошибка curl: ' . curl_error($ch));
    }

    curl_close($ch);

    $response = \json_decode($rawResponse, true);

    return $response;
}
И вызываем её:

$response = get_text_check_inner($text_uid);
var_dump($response);
Да, мы получили вывод массива на страницу. Отлично, теперь получить словоформы – это уже обычная задача программиста. Это можно сделать например так:

function build_html($list_keys){
	$table = "<table><thead><tr><th>Слово</th><th>Словоформы</th><th>Вхождений</th></tr></thead><tbody>";

    foreach ($list_keys as $key){
        $tr = "<tr>";
        $tr .= "<td>".$key['key_title']."</td><td>";

        foreach ($key['forms'] as $idx => $sub_key){
			if ($idx > 0){
				$tr .= ", ";
			}
            $tr .=  $sub_key['key_title'];
        }

        $tr .= "</td>";
        $tr .= "<td>".$key['count']."</td></tr>";
        $table .= $tr;
    }

    $table .= "</tbody></table>";
    return $table;
}
Проверяем:

$response = get_text_check_inner($text_uid);
$list_keys = $response['seo_check']['list_keys'];
echo build_html($list_keys);
Результат:



Итог

Мы получили то, что хотели – словоформы слова по выбранной проверке. При этом мы не лезем в код сайта и не пользуемся каким-то запрещенными приемами – по сути мы берем только то, что показывает браузер посетителя.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, php, текстру, парсинг, json




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Стек Java
Пара советов по приготовлению шашлыка
Простейшая SQL инъекция для чайников