На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

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



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

Введение

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



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

Работа

Долго изучать не пришлось, сразу стало видно, что результат проверки подгружается на страницу с помощью 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: сворачивание в трей
Что плохого в классах-обертках чисел на Java?


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.