Задать вопрос

Как спарсить сайт с последующим переводом на другой язык?

Приветствую!

Подскажите, есть ли возможность налету перевести страницу полученную с помощью file_get_contents() или Simple HTML DOM Parser и т.п.?
Например использовать api яндекс или гугл переводчика.
Если передать в api всю страницу, то он переведет и html теги.. Есть какие-то более рабочие варианты?
  • Вопрос задан
  • 252 просмотра
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
artzolin
@artzolin
php, WordPress разработка сайтов artzolin.ru
Я тоже думал как это реализовать, но в целом задача выглядит не супер сложной. Допустим, если получить из текста все теги <p>, то мы можем ->innertext заменить переводом, после чего у нас в переменной $html будет уже переведенный текст

$paragraphs = $html->find( 'p' );
foreach ( $paragraphs as $key => $paragraph ) {
	$paragraph->innertext = get_translate($paragraph->innertext);
}


Конечно, абзацы могут содержать инлайновые теги типо <span>, <strong> и хуже всего <a>. С ними сложнее, но если знать в каком точно формате их переводит переводчик, то регуляркой можно заменить обратно

Что касается api переводчиков, то они вроде все платные, но с настройкой по документации не должно возникнуть много проблем. Кстати, в мае Яндекс запустили новый сервис Yandex Translate с переводом на нейронках. Стоит это 45 руб. за 100к. символов. Стоит тестить, я считаю
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Используйте виджет:
https://translate.yandex.ru/developers/website-widget

Алгоритм действий следующий:
1. Получайте html-код целевой страницы при помощи file_get_contents()
2. Внутрь полученного html перед закрывающим тегом body вставляйте JavaScript-код виджета
3. Затем выводите результат в браузер пользователя при помощи echo

P. S. Это в корне не правильный, но наиболее простой способ переводить страницы на лету. Если делать все по уму, нужно поднимать ревер-прокси и переводит тексты на стороне сервера используя непосредственно API переводчика.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы