DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34559 / inTopicNo.1)  Google翻訳の結果の取得
  
□投稿者/ わん 一般人(3回)-(2020/10/14(Wed) 11:23:16)
  • アイコン環境/言語:[VisualStudio2017 VB.net,C#] 
    分類:[.NET] 

    重ね重ねの質問、失礼します。
    
    Google翻訳を使って、英文の翻訳結果を取得したいと考えています。
    (FormにWebBrowserを張り付けて、IE11に切り替えた状態です。)
    
    まず、第一段階として、Google翻訳の原文入力部への書き込み方法が判りません。
    下記のコードを実行すると、<div class="text-dummy"></div>のに原文を書き込むことができますが、画面に反映されません。よって、翻訳が起動しない。
    二つ目に、翻訳が完了したことをどのように検出すればいいのか?判らない。
    (翻訳が完了すると、<div class="text-wrap tlid-copy-target">が表れるので、ループで監視する?位しか思いつきません)
    
    どのようにすれば、実現できるのか?詳しい方イラッシャイましたら、ご指南の程宜しくお願い致します。
    
    Public Class FormMain
        Const Google翻訳Uri As String = "https://translate.google.co.jp/?hl=ja&tab=TT"
        Const 原文Str As String = "Two important properties of the Chart class are the Series and ChartAreas properties, both of which are collection properties. The Series collection property stores Series objects, which are used to store data that is to be displayed, along with attributes of that data. The ChartAreas collection property stores ChartArea objects, which are primarily used to draw one or more charts using one set of axes."
        Const 原文入力用Tag_Str As String = "text-dummy"
        Const 訳文出力用Tag_Str As String = "text-wrap tlid-copy-target"
    
        Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.WebBrowser1.Navigate(Google翻訳Uri)
        End Sub
        Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            If e.Url.ToString = Google翻訳Uri Then
                Dim MyElements As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("div")
                For Each LopElement As HtmlElement In MyElements
                    If LopElement.GetAttribute("className") = 原文入力用Tag_Str Then
                        LopElement.InnerText = 原文Str
                        MsgBox(LopElement.OuterHtml)
                    End If
                Next
            End If
        End Sub
    End Class
    

マルチポストを報告
違反を報告
引用返信 削除キー/
■34563 / inTopicNo.2)  Re[1]: Google翻訳の結果の取得
□投稿者/ 魔界の仮面弁士 大御所(1305回)-(2020/10/14(Wed) 16:13:16)
  • アイコンNo34559に返信(わんさんの記事)
    > Google翻訳を使って、英文の翻訳結果を取得したいと考えています。

    きちんと調べたわけではありませんが、API 利用時の無料枠は
    月間 500,000 文字までらしいです。

    https://cloud.google.com/translate/docs?hl=ja
    https://developers.google.com/api-client-library/dotnet/apis/translate/v3
    https://code.google.com/archive/p/google-language-api-for-dotnet/


    > <div class="text-dummy"></div>のに原文を書き込むことができますが、

    プログラムは組まずに IE11 を起動してみただけですが、
    手元の環境だと、"text-dummy" という class は出現しませんでした。
    二次利用防止のために、不定期に変更されていたりするのかな。

    ……というか、div タグは文章入力には無関係なのでは?


    > 画面に反映されません。
    ユーザー入力項目なのですから、
    getElementsByTagName("textarea") で列挙できるのではないでしょうか?

    ひとまず IE 上では getElementById("source") で掴めるようでしたが。


    > 二つ目に、翻訳が完了したことをどのように検出すればいいのか?判らない。

    翻訳結果のボックスの変化を捉えて、変化しなくなったら
    翻訳完了(または、タイムアウト)と見做せば良いのでは無いでしょうか。

    人間が利用する時も、そんな感じで判断することが多いでしょうし。

    コードだと、getElementsByClassName("translation") が拾えたら、
    innerText を読み取ってみるという感じかな…。


    > ループで監視する?位しか思いつきません
    メッセージループを回す必要があるでしょうから、DocumentCompleted を
    抜けた後で、Timer で定期監視するとか。

    タイマーではなくループで処理する場合は、
    Task.Delay を呼んでおくと良いかも。

    変化の終了をとらえきれなかったときのために、タイムアウトもしくは
    ループ回数の上限も設定しておくのが良いでしょう。
違反を報告
引用返信 削除キー/
■34564 / inTopicNo.3)  Re[2]: Google翻訳の結果の取得
□投稿者/ わん 一般人(4回)-(2020/10/14(Wed) 18:29:00)
  • アイコンNo34563に返信(魔界の仮面弁士さんの記事)

    魔界の仮面弁士さんご丁寧に有難うございます。

    方向性だけ示して頂ければ、検討すべき事項が絞り込めるので大変助かります。

    ご指摘頂いた内容を熟読、熟慮して、今一度考えます。
    その結果、また行き詰りましたら、お手数ですが宜しくお願い致します。

    本当に、有難う御座いました。
解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -