2013-05-11 2 views
0

Microsoft 번역 서비스를 호출하기 전에 토큰이 필요합니다. step 3 of these instructions을 따르려고합니다. 토큰을 받으려면 토큰 서비스에 대한 호출이 필요합니다. 나는 clientId와 비밀 패스를 가지고있다. 서비스 http://api.microsofttranslator.com/V2/soap.svc의 서명을 살펴 봤습니다. GetAppIdToken 방법을 볼 수 있습니다. 그 서명은 문서에서 암시 된 것과는 아주 다릅니다.Microsoft 번역 서비스에 전화 : 토큰 서비스를받는 방법?

지침 페이지에서 어떤 서비스 작업이 언급되는지 알고 있습니까? WSDL과 문서가 일치하지 않는 것 같습니다. 다른 서비스가 있습니까? 문제를

EDIT를 해결하는 방법에


설명

The instructions

: 나는
http://oauthdevconsole.cloudapp.net/PartialOAuth

EDIT2를 작동해야 트래픽을 추적 할 수 있도록 웹에서이 도구를 발견 : 여기에 등록하는 방법에 대한 더 나은 설명 http://blogs.msdn.com/b/translation/p/gettingstarted1.aspx

답변

2

문서에 포함 된 코드 샘플에서는이 작업을 수행하는 방법을 보여줍니다. 간단히 살펴보면 모두의 "POST"메소드를 사용하고 POST에서 4 개의 필수 값을 전달합니다. 나는 샘플 코드를 찾고 제안하지만,이 같은 것을 보일 수의 기본 요소로 아래로 증류 : 위의 코드의

string request = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret)); 
WebRequest webRequest = WebRequest.Create("https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"); 
webRequest.ContentType = "application/x-www-form-urlencoded"; 
webRequest.Method = "POST"; 
byte[] bytes = Encoding.ASCII.GetBytes(request); 

webRequest.ContentLength = bytes.Length; 

using (Stream outputStream = webRequest.GetRequestStream()) 
{ 
    outputStream.Write(bytes, 0, bytes.Length); 
} 

using (WebResponse webResponse = webRequest.GetResponse()) 
{ 
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AdmAccessToken)); 
    //Get deserialized object from JSON stream 
    AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream()); 
    return token; 
} 

대부분은 샘플에서 private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails) 방법입니다.

AdmAccessToken

은 반환 된 값에 대한 속성이 샘플에 정의 된 클래스 :

 
access_token 
token_type 
expires_in 
scope 

그것은 매우 포괄적 인 샘플의 및 관련 부품을 얻기 위해 파고의 소량이 필요하지만 그 모든 거기에 내가 말할 수있는 것처럼 가까이에. 내가 간행 한 발췌 문장은 단순화를 위해 샘플의 다른 곳에서 수행 된 몇 가지 작업을 간단하게 결합했습니다.

import requests 
import urllib 

data = dict(
    client_id='client_id', 
    client_secret='client_secret', 
    scope='http://api.microsofttranslator.com', 
    grant_type='client_credentials' 
) 
resp = requests.post(url='https://datamarket.accesscontrol.windows.net/v2/OAuth2-13', data=urllib.urlencode(data)) 

참고 :

+0

+1 이것이 올바른 접근 방법 인 것 같습니다. yoru 게시물을 기반으로 일부 검색 않았다. http://forums.asp.net/t/1830114.aspx/1에서도 동일한 문제가 발견되었습니다. 코드가 다음을 반환합니다. 원격 서버에서 오류를 반환했습니다 : (400) 잘못된 요청입니다. 계속 노력하겠습니다 –

+0

GutHub에서 찾은 AdmAccessToken https://github.com/matthiasxc/WinPhone-AzureTranslation/blob/master/My_Translation_App/Models/AdmAccessToken.cs –

+0

감사의 말 Tim에게 세부 정보를 찾았습니다. 아주 이상한 MS 방법. –

0

파이썬 코드는 토큰을 얻기 위해 당신이 왜 requests 한 지정을 사용하고 다음과 같은 설명을 ACS90004: The request contains 1 tokens separated by \u0027=\u0027 instead of a single key value pair.이 함께 Bad Request (400)를 얻을 것이다 요청하는 POST를하고있는 URL의 매개 변수를 보낼 경우 data이 아니라 params입니다.

관련 문제