Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2016, 14:20   #1
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию Перевод текста в google.com

Макрос с сайта: http://excelvba.ru/node/305/backlinks

На данный момент - не рабочий

Код:
Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, _
                    Optional ByVal sourceLanguageCode$ = "")
    Application.Volatile True
    Set ADOStream = CreateObject("ADODB.Stream") 
    With ADOStream
        .Charset = "utf-8": .Mode = 3: .Type = 2: .Open
        .WriteText TextToBeTranslated: .Flush: .Position = 0 
        .Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close 
    End With
    For i = 0 To UBound(ByteArrayToEncode)
        iAsc = ByteArrayToEncode(i)
        Select Case iAsc
            Case 32: sTemp$ = "+"    
            Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i))
            Case Else: sTemp$ = "%" & Hex(iAsc)
        End Select
        txt$ = txt$ & sTemp$
    Next ' 
  
    URL$ = "https://translate.google.ru/?hl=en&authuser=0#" & sourceLanguageCode$ & "/" & resultLanguageCode$ & "/" & _
    txt$
    Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")    
    XMLHTTP.Open "GET", Replace(URL$, "\", "/"), "False": XMLHTTP.send
    If XMLHTTP.statustext = "OK" Then
        LocalPath$ = Environ("TMP") & "\google.txt"
        With ADOStream 
            .Type = 1: .Open: .Write XMLHTTP.responseBody
            .SaveToFile LocalPath$, 2
            .Close: .Type = 2: .Charset = "utf-8": .Open:
            .LoadFromFile LocalPath$ 
            Translate$ = .ReadText  
        End With
        On Error Resume Next   
Translate$ = Split(Translate$, """trans"":""")(1)
        Translate$ = Split(Translate$, """,""orig")(0)
        Translate$ = Replace(Translate$, "quot;", Chr(39))
        If Translate$ = " null, " Then Translate$ = "Не переведено" 
    End If
    Set XMLHTTP = Nothing: Set ADOStream = Nothing
End Function
Надеюсь, подскажете:

1) как выписать содержание переменной txt$ в текстовый файл;
2) Replace(URL$, "\", "/") - зачем делать замену;
3) что представляют два подряд Translate$ = Split(Translate$, """trans"":""")(1)
Translate$ = Split(Translate$, """,""orig")(0)
4) в готовом текстовом файле через Ctrl+F искал переведенный текст, но не смог найти, аналогично искал разделители, которые также не смог найти, где ошибся и правильно ли понимаю то, что нужно искать ответ в виде utf-8 как готовое переведенное слово (например, переводим "добро", ищем через Ctrl+F "good")
5) быть может, кто-либо сразу увидит ошибку или подскажет другой вариант перевода


Заранее спасибо!


_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
http://imageshack.com/a/img922/5707/6yizfA.gif

Последний раз редактировалось Serge_Bliznykov; 24.08.2016 в 14:57.
Lama Under Cover вне форума Ответить с цитированием
Старый 24.08.2016, 14:31   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

поскольку макрос мой, - мне и отвечать

Цитата:
как выписать содержание переменной txt$ в текстовый файл;
на сайте у меня есть код
http://excelvba.ru/code/txt
http://excelvba.ru/code/SaveTextToFile

Цитата:
Replace(URL$, "\", "/") - зачем делать замену;
не помню, зачем это делал
возможно, от другого макроса осталось
можете убрать

Цитата:
что представляют два подряд Translate$ = Split(Translate$, """trans"":""")(1)
Translate$ = Split(Translate$, """,""orig")(0)
сначала берем кусок текста ПОСЛЕ "trans":"
а потом берем кусок текста ДО ","orig"

т.е. мы взяли текст МЕЖДУ "trans":" и ","orig"
(в таком виде гугл раньше ответ выдавал)

Цитата:
быть может, кто-либо сразу увидит ошибку
ошибок там нет
макрос успешно работал несколько лет
потом гугл поменял сервис (там капча выскакивает)
т.е. макрос надо сильно усложнять (переделывать)
я как-то начал править этот макрос, потратил пару часов, и бросил это занятие

ищите в интернетах другой макрос, который недавно опубликован и недавно проверен (может, кто уже сделал и выложил)
EducatedFool вне форума Ответить с цитированием
Старый 24.08.2016, 17:46   #3
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию

И все же, как грамотно анализировать содержание файла google.txt?
http://imageshack.com/a/img922/5707/6yizfA.gif
Lama Under Cover вне форума Ответить с цитированием
Старый 26.08.2016, 03:29   #4
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию

Спасибо Всем!

На данный момент обошел коллизию с использованием ФИЛЬТР.XML, ВЕБСЛУЖБА и бесплатного API-ключа (https://tech.yandex.ru/translate/) =/
http://imageshack.com/a/img922/5707/6yizfA.gif
Lama Under Cover вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод текста в изображение ozazat C# (си шарп) 6 25.03.2016 23:18
перевод текста с Pascal V1rus.25 Visual C++ 1 29.03.2013 11:18
Перенос даты из формы Google в календарь Google. (Google Apps) katalnikov Фриланс 2 24.11.2012 22:42
Перевод текста... Ar][ange1 Общие вопросы Delphi 1 06.01.2009 06:56
Закончен перевод документации платформы Google App Engine на русский язык widgetii PHP 1 01.08.2008 16:52