tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルみんなの自動翻訳WebAPIをVB6またはVBAから利用したい
記事No16140
投稿日: 2015/04/17(Fri) 09:59
投稿者IMA
お世話になります。 IMAと申します。
Windows8.1や7での利用で最近はExcelVBAをよく利用します。

みんなの自動翻訳
https://mt-auto-minhon-mlt.ucri.jgn-x.jp/
にはWebAPIが提供されています。

例えば、サンプルがPHPで載っており、私もPHPでは動作確認が出来ました。

include("lib/OAuth/OAuthStore.php");
include("lib/OAuth/OAuthRequester.php");
  
define("NAME", "");
define("KEY", "");
define("SECRET", "");
define("URL", "");
  
$options = array("consumer_key" => KEY, "consumer_secret" => SECRET);
OAuthStore::instance("2Leg", $options);
  
$method = "POST";
$params = array(
     "key" => KEY,
     "name" => NAME,
     "text" => "Hello World!!",
     "type" => "xml",
     "data" => "Logging Data",
);
  
try {
     $request = new OAuthRequester(URL, $method, $params);
     $result = $request->doRequest();
     print_r($result);
} catch(OAuthException2 $e) {
     echo $e->getMessage();
}

結果 XXXXXはダミーデータです。
OAuthRequester Object
(
     [files:protected] =>
     [request:protected] =>
     [store:protected] => OAuthStore2Leg Object
         (
             [consumer_key:protected] => de530109a8946afc5f0daa28be6b656c0550XXXXX
             [consumer_secret:protected] => d6446346aff9d5cb118de1d6e57XXXXX
             [signature_method:protected] => Array
                 (
                     [0] => HMAC-SHA1
                 )
             [token_type:protected] =>
         )
     [usr_id:protected] => 0
     [signed:OAuthRequestSigner:private] =>
     [realm:protected] =>
     [param:protected] => Array
         (
             [key] => de530109a8946afc5f0daa28be6b656c0550XXXXX
             [name] => hogehoge
             [text] => Fontless%20structured%20document%20image%20representations%20for%20efficient%20rendering
             [type] => xml
             [data] => Logging%20Data
         )
     [uri_parts:protected] => Array
         (
             [scheme] => https
             [host] => mt-auto-minhon-mlt.ucri.jgn-x.jp
             [path] => /api/mt/patent_en_ja/
             [port] => 443
             [user] =>
             [pass] =>
             [query] =>
             [fragment] =>
         )
     [uri:protected] => hhttps://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/patent_en_ja/
     [headers:protected] => Array
         (
         )
     [method:protected] => POST
     [body:protected] =>
)
Array
(
     [code] => 200
     [headers] => Array
         (
             [date] => Wed, 15 Apr 2015 03:22:12 GMT
             [server] => Apache
             [expires] => Thu, 19 Nov 1981 08:52:00 GMT
             [cache-control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
             [pragma] => no-cache
             [content-length] => 415
             [content-type] => application/xml
             [set-cookie] => PHPSESSID=5otv47e5d8e758s2prmnotqpn0; path=/; secure
             [connection] => close
         )
     [body] => <?xml version="1.0" encoding="UTF-8"?>
<resultset>
   <code>0</code>
   <message></message>
   <request>
     <url>hhttps://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/patent_en_ja/</url>
     <text>Fontless structured document image representations for efficient rendering</text>
   </request>
   <result>
     <text>fontless効率的なレンダリングのために構造化文書画像表現</text>
   </result>
</resultset>
  
)
  
これをVBAで動かそうとしているのですが、523:リクエストnameエラーなどでどん詰まり状態です。
oauth 2legged認証になると思いますが、下記のHPなども参考にしているのですが???状態です。
http://d.hatena.ne.jp/n-3104/20110718/1311002173
  
現状のテストコードは、以下の様な感じです。(一部省略しています)
    Set XMLHTTP = New MSXML2.XMLHTTP
     Set param = New Scripting.Dictionary
     param("oauth_consumer_key") = "de530109a8946afc5f0daa28be6b656c0550XXXXX"
     param("oauth_signature_method") = "HMAC-SHA1"
     timeStamp = DateDiff("s", #1/1/1970#, Now)
     param("oauth_timestamp") = CStr(DateDiff("s", #1/1/1970#, Now()))
     param("oauth_nonce") = param("oauth_timestamp") * 333333
     param("oauth_version") = "1.0"
     '電子署名の作成
    MakeSign "POST", urlRequestToken, param
     sPostData = "key=de530109a8946afc5f0daa28be6b656c0550XXXXX" & _
                 "&name=hogehoge&text=" & EncodeURL(stext)
     PostData = StrConv(sPostData, vbFromUnicode)
     XMLHTTP.Open "POST", urlRequestToken, False
     XMLHTTP.setRequestHeader "Authorization", "OAuth " & BuildHeader(param)
     XMLHTTP.send (PostData)
     OAuthStatus = XMLHTTP.statusText 'リクエスト成否の状態を取得
    Debug.Print XMLHTTP.responseText
  
皆様のアドバイスを頂ければ幸いです。

[ツリー表示へ]
タイトルRe: みんなの自動翻訳WebAPIをVB6またはVBAから利用したい
記事No16141
投稿日: 2015/04/17(Fri) 11:06
投稿者魔界の仮面弁士
> これをVBAで動かそうとしているのですが、523:リクエストnameエラーなどでどん詰まり状態です。

Fiddler2 なり Microsoft Network Monitor なりを併用して、
PHP の場合と VBA の場合とで、リクエストの内容が
どのように違っているのかを調べてみてださい。

[ツリー表示へ]
タイトルRe^2: みんなの自動翻訳WebAPIをVB6またはVBAから利用したい
記事No16142
投稿日: 2015/04/18(Sat) 06:46
投稿者IMA
魔界の仮面弁士様

中間報告です。

Fiddler2、 Microsoft Network Monitor のヒントありがとうございました。
ただ残念ながら、知識・技量不足で
私が想像している、Eclipseでの OAuthRequester Object情報の
OAuthStore::instance("2Leg", $options); 部分?のリクエスト内容が取得できません。

もう少しトライしてみます。

OAuthRequester Object
(
     [files:protected] =>
     [request:protected] =>
     [store:protected] => OAuthStore2Leg Object
         (
             [consumer_key:protected] => de530109a8946afc5f0daa28be6b656c0550XXXXX
             [consumer_secret:protected] => d6446346aff9d5cb118de1d6e57XXXXX
             [signature_method:protected] => Array
                 (
                     [0] => HMAC-SHA1
                 )
             [token_type:protected] =>
         )
     [usr_id:protected] => 0
     [signed:OAuthRequestSigner:private] =>
     [realm:protected] =>

[ツリー表示へ]
タイトルRe^2: リクエスト取得出来ました。
記事No16143
投稿日: 2015/04/19(Sun) 10:00
投稿者IMA
魔界の仮面弁士様

お世話になります。なんとかデータの取得ができるようになりました。
以下はFiddler2でrowデータ取得したものです

PHPの場合
POST https://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/patent_en_ja/ HTTP/1.1
User-Agent: anyMeta/OAuth 1.0 - ($LastChangedRevision: 174 $)
Host: mt-auto-minhon-mlt.ucri.jgn-x.jp
Accept: */*
Authorization: OAuth realm="", oauth_signature_method="HMAC-SHA1", oauth_signature="WYhnJ6FscaFuQhpdxBHgidkKxMs%3D", oauth_nonce="5532f63f3605b", oauth_timestamp="1429403199", oauth_token="", oauth_consumer_key="de530109a8946afc5f0daa28be6b656c0550XXXXX", oauth_version="1.0"
Content-Type: application/x-www-form-urlencoded
Content-Length: 101

key=de530109a8946afc5f0daa28be6b656c0550935a0&name=hogehoge&text=test&type=xml&data=Logging%20Data

ExcelVBAの場合
POST https://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/patent_en_ja/ HTTP/1.1
Accept: */*
User-Agent: anyMeta/OAuth 1.0 - ($LastChangedRevision: 174 $)
Authorization: OAuth realm="", oauth_signature_method="HMAC-SHA1", oauth_signature="UTuiF0hevhxakAJ4gMS1cGzf8wY%3D", oauth_nonce="4288309833", oauth_timestamp="1429436611", oauth_token="", oauth_consumer_key="de530109a8946afc5f0daa28be6b656c0550XXXXX", oauth_version="1.0"
Content-Type: application/x-www-form-urlencoded
Accept-Language: ja
Accept-Encoding: gzip, deflate
Host: mt-auto-minhon-mlt.ucri.jgn-x.jp
Content-Length: 101
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: PHPSESSID=m2iqsir3d9ugcrl8rsj9lfqn01

key=de530109a8946afc5f0daa28be6b656c0550XXXXX&name=hogehoge&text=test&type=xml&data=Logging%20Data

Excelからだとエラーコード510(OAuth認証エラー)が返ります。

なお、Excelではoauth_nonceはoauth_timestamp*3とし、

oauth_signatureは概略以下の方法で作成しています。
    strBase = httpMethod & "&" & UrlEncode(URL) & "&" & UrlEncode(SortedParams(param))
    cryptKey = consumer_secret & "&"
    param("oauth_signature") = UrlEncode(Base64_HMACSHA1(cryptKey, strBase))

Private Function Base64_HMACSHA1(ByVal sTextToHash As String, ByVal sSharedSecretKey As String)
Dim asc As Object, enc As Object
Dim TextToHash() As Byte
Dim SharedSecretKey() As Byte
Dim bytes() As Byte
    Set asc = CreateObject("System.Text.UTF8Encoding")
    Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")
    TextToHash = asc.Getbytes_4(sTextToHash)
    SharedSecretKey = asc.Getbytes_4(sSharedSecretKey)
    enc.key = SharedSecretKey
    bytes = enc.ComputeHash_2((TextToHash))
    Base64_HMACSHA1 = EncodeBase64(bytes)
    Set asc = Nothing
    Set enc = Nothing
End Function

なにかアドバイスを頂ければ幸いです。


> > これをVBAで動かそうとしているのですが、523:リクエストnameエラーなどでどん詰まり状態です。
>
> Fiddler2 なり Microsoft Network Monitor なりを併用して、
> PHP の場合と VBA の場合とで、リクエストの内容が
> どのように違っているのかを調べてみてださい。

[ツリー表示へ]