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