Получение словоформ, или внутреннее апи текстру
Наверняка вы слышали что-то о таком ресурсе как текстру. Одна из основных его функций – это проверка уникальности текста. Но помимо уникальности в результатах проверки еще есть и другие параметры, в частности, используемые словоформы слова. Но когда забираешь информацию о проверенном тексте по апи – выдается только число повторений, но не сами словоформы слова. Однако, в вебинтерфейсе они есть – забираются по некому непубличному апи. Давайте и мы научимся забирать словоформы и все остальное, что есть в этом апи.
Введение
Один из моих заказчиков пользуется услугами копирайтеров и вот таких текстовых бирж. Ему понадобилось сделать сервис, который отправляет тексты на проверку и забирает их результаты, потом отображает у себя в удобном виде. Использованные слова, повторения и так далее. И вот, в частности ему нужны стали словоформы слова. Если смотреть результат проверки в браузере, то можно увидеть эти словоформы
Но вот в апи, которое дает текстру – их нет. Я написал в техподдержку – те подтвердили, что да, такое не предусмотрено. Но нам то они нужны! Может просто вытащить их из страницы, спарсив её? Начинаем изучать код, и как идет взаимодействие с сетью.
Работа
Долго изучать не пришлось, сразу стало видно, что результат проверки подгружается на страницу с помощью 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.