PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » API-запрос Google на перевод текста (?)


API-запрос Google на перевод текста (?)

Сообщений 1 страница 17 из 17

1

Скачать

https://i.imgur.com/IivaLXl.png https://i.imgur.com/eZOixT1.png

Есть желание написать переводчик текста

Столкнулся с тем, что веб-интерфейс не работает как раньше, грубо говоря получения страницы по ссылке не возвращает текст внутри некоторого блока, а возвращает подпрограмму джаваскрипт, которая выполняется браузером и получает перевод, ну то есть нужно веб-гаджет сооружать.
Немного почитал про API гугла, поискал на оф.форуме API-запрос, который должен содержать googleapis, ничего толкового не нашёл, ну и почитал аналогичную тему на AutoIt3, так как ранее я тоже уже писал аналогичную программу через веб-интерфейс, которая сейчас не работает и-за того что гугл меняет способы запросов.
Было бы не плохо если бы на линукс удалось написать прогу размером на несколько кб и сделать свой вариант управления программой.

Отредактировано AZJIO (30.07.2021 11:54:03)

0

2

AZJIO написал(а):

Немного почитал про API гугла, поискал на оф.форуме API-запрос

ну Translate API у гугла давно платный, можно конечно старые лазейки, найти но там танцы с проксями или капчами

AZJIO написал(а):

а возвращает подпрограмму джаваскрипт, которая выполняется браузером и получает перевод, ну то есть нужно веб-гаджет сооружать.

накостылить с translate.google.ru можно, но надо ждать от гугла палок в колёса, "подпрограмму джаваскрипт" можно попробовать переписать на пурик, генерацию tk вроде разобрали, хотя для использования улучшеного перевода надо ещё один параметр добавлять..

Отредактировано Lin (23.07.2021 18:47:25)

0

3

можно попробовать подсмотреть устройсво дополнения-переводчика для мозилы
https://disk.yandex.ru/d/DSaZzp5x1FOxbg
s3google@translator.xpi
оно в настоящее время работает. Надо переименовать в zip и копаться в js, например, translate.js.

0

4

bizdon написал(а):

и копаться в js, например, translate.js.

ну тут тоже интерес к генератору:
s3gt.utils.google_value_tk = function(text)  который в utils.js, но мне .js тяжеловат для понимания, мне проще в реализациях на .php или .py разобраться

0

5

Перезалил,  теперь исходник в комплекте

Благодаря примеру Lin удалось получить задуманное.

1. Опять же благодаря примеру Lin в плане JSON удалось получить данные без использования костылей рег.выр. Ну и далее сам уже разобрался как получить массив данных, так как несколько предложений переводятся отдельно, каждое предложение отдельный блок JSON данных. Ну и далее таким же методом удалось  получить данные при переводе одного слова, когда возвращает множество вариантов.

2. Добавил горячие клавиши.
3. Поддержка Windows и Linux на одном исходнике, т.е. функционал одинаковый.
4. Подбил мелочи, ресайз окна.
5. Отсутствие рег.выр. сократило прогу с 500 кб до 300 кб.

ссылка на скачивание в первом посте.

Перезалил,  теперь исходник в комплекте

Отредактировано AZJIO (29.07.2021 21:17:35)

0

6

AZJIO
url$ = SetURLPart(url$, "sl", "auto")
лучше всё-таки заменить на
url$ = SetURLPart(url$, "sl", LangFrom$)
а то получается и предыдущее условие лишнее и выпадающий список в интерфейсе

0

7

Добавил языки и частичное автоопределение исходного текста, чтобы правильно определять направление перевода без необходимости его переключать.

Погуглил YandexApiKey, в общем у них в документах указано, что нельзя делать программу использующую яндекс-переводчик.

2.7. При использовании Сервиса обязательно указание на технологию Яндекса путём размещения в описании программного продукта, в соответствующем разделе помощи, на официальном сайте программного продукта, а также на всех страницах/экранах, где используются данные сервиса «Яндекс.Переводчик» непосредственно над или под результатом перевода, текста «Переведено сервисом «Яндекс.Переводчик» с активной гиперссылкой на страницу http://translate.yandex.ru. Данное указание должно быть выполнено шрифтом, размер которого не менее размера шрифта основного текста, и цвет которого не отличается от цвета шрифта основного текста.

2.8. Пользователь не имеет права использовать Сервис для создания программ для ЭВМ или иных сервисов, функциональное и целевое назначение которых аналогично или схоже с сервисом «Яндекс.Переводчик» или программой «Яндекс.Переводчик» для мобильных устройств.

а для получения ключа, чтобы использовать API для себя надо указывать ФИО, телефон, цели ключа.

Отредактировано AZJIO (30.07.2021 06:50:23)

0

8

Я правильно понимаю, что официальной страницы описания параметров сервиса -> [ https://translate.googleapis.com/translate_a/single ] нет?

0

9

useful
да, это же не Google Translate API

0

10

Помучился с Linux, сделал временно файл захвата текста и вставки в окно, но проблема, когда я вызываю хоткей ctrl+enter, он почему то ждет обработку событий ctrl+a -> delete -> ctrl+v, но перед завершением переводит предыдущий текст, который был до вставки и увеличение задержки до 1000мс не помогают, он просто ждёт и в конце выдаёт результат перевода предыдущего слова. Уже была идея обмена данными через ini, то есть прога запустилась, создала структуру и сохранила указатель в ini, код захвата выделенного прочитал указатель и управляет флагами данных. Ну и можно конечно использовать пример с хоткеями который я встречал ранее, просто не дошел до него, хотел вставками обеспечить, так как иначе придётся разделять исходники на линуксовый и виндовый ввиду полного различия в способе прописки глобальных горячих клавиш.

0

11

AZJIO написал(а):

Немного почитал про API гугла, поискал на оф.форуме API-запрос, который должен содержать googleapis, ничего толкового не нашёл,

Вот так выглядит базовый запрос:

Код:
Text$ = "Hello world"
url$ = "https://www.googleapis.com/language/translate/v2"
url$ = SetURLPart(url$, "key", "GOOGLE_TRANSLATE_API_KEY") ; ваш Cloud Translation API-key 
url$ = SetURLPart(url$, "source", "en")                    ; с какого языка переводим: auto (автоопределение); en (English)
url$ = SetURLPart(url$, "target", "ru")                    ; на какой язык переводим: ru (Русский);
url$ = SetURLPart(url$, "format", "text")                  ; Формат исходного текста: HTML (по умолчанию) или обычный текст. Значение html указывает на HTML, а значение text указывает на простой текст.
url$ = SetURLPart(url$, "model", "nmt")                    ; Модель перевода. Можно base использовать модель машинного перевода на основе фраз (PBMT) или nmt модель нейронного машинного перевода (NMT). 
url$ = SetURLPart(url$, "q", URLEncoder(Text$))
Debug url$

0

12

Я дико извиняюсь, но чем это лучше перевода непосредственно в браузере?
Код коротенький, и фишек больше, копирование одной кнопкой, чтение текста голосом, виртуальная клава и т.п. плюшки от производителя:

Код:
Procedure Translator(text.s)
;  Google & Bing 5,000 character limit for translation.
If OpenWindow(20, 0, 0, 850, 600, "Перевод", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget  | #PB_Window_ScreenCentered)
   StickyWindow(20, #True):gad = 20
   WebGadget(20, 0, 0, 850, 600,  "http://www.bing.com/translator?from=&to=ru&setlang=ru&text=" + URLEncoder(text));"http://www.bing.com/translator/#auto/" + URLEncoder(GetClipboardText()))
   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
   CloseWindow(20)
EndIf
EndProcedure

text.s +"PureBasic is a modern BASIC programming language. The key features of PureBasic are portability (Windows, Linux And OS X supported With the same source code),"
text.s +" the production of very fast And optimized native 32-bit Or 64-bit executables And, of course, the very simple BASIC language syntax. PureBasic has been created "
text.s +"For the beginner And expert alike. We have put a lot of effort into its conception To produce a fast, reliable system And friendly BASIC compiler."
text.s +" The full documentation can be found here."

Translator(text.s)

0

13

ВиниПур
Выхлоп в в переменную пурика можно завернуть в данном случае?
А через прокси работать умеет?

Отредактировано Lin (01.08.2021 18:46:45)

0

14

Lin написал(а):

Выхлоп в в переменную пурика можно завернуть в данном случае?
А через прокси работать умеет?

В переменную? Через Буфер обмена, это если совсем ни чего не делать, доступно из коробки.
Ну или написать простейший парсер из исходника HTML, который добывается одной строкой:
Result$ = GetGadgetItemText(20, #PB_Web_HtmlCode )

Перевод ищется между двумя тегами:

placeholder="Перевод" readonly="readonly"> Тут перевод </TEXTAREA>

Как запустить WebGadget через прокси легко найти на Оф. форуме. Хотя для чего это надо в переводчике?

0

15

ВиниПур
Ну работа в браузере требует больше ресурсов, в том числе и трафика, ведь чтобы получить перевод это надо загрузить всю страницу, у гугла это 1Мб, у бинга ~200кб, а ведь это ещё и время, ладно на примере из шапки это не заметно, а если надо перевести 1к-5к строк...
у подобных сервисов есть ограничения, количество символов или запросов в определённом участке времени, если выходишь за рамки - временный бан, тогда и нужен прокси

AZJIO написал(а):

что нельзя делать программу использующую яндекс-переводчик.

так я уверен что это касается и гугло-переводчика.. :)

Отредактировано Lin (02.08.2021 05:39:41)

0

16

Lin написал(а):

это касается и гугло-переводчика

ну например deepl имеет бесплатный доступ для западных стран. Конечно мне хотелось бы анонимные легальные способы.

ВиниПур
Через браузер не во всех Linux будет работать, а я нацеливаю на Linux, в данном случае сейчас на арче пример мне выдаёт ошибки отсутствия веб-гаджета. Ранее я использовал ссылку и получение страницы в переменную, без веб-гаджета и такой запрос ограничивал длину текста где-то 370 символов, видимо есть ограничения на длину ссылки.

0

17

AZJIO
ну глянь ещё в сторону https://mymemory.translated.net
https://mymemory.translated.net/doc/spec.php

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » API-запрос Google на перевод текста (?)