2013-12-20 4 views
2

Я использую классический ASP и пытаюсь использовать API JustGiving.Предоставление информации аутентификации через msxml2.ServerXMLHTTP

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

я могу видеть, что информация доступна через: https://api.justgiving.com/docs/resources/v1/Account/Retrieve

<% 
vurl = "http://api.justgiving.com/---myIDhere---/v1/account" 
Set http = Server.CreateObject("msxml2.ServerXMLHTTP") 
http.Open "GET", vurl, False 
http.Send 

Set dom = Server.CreateObject("msxml2.DOMDocument") 

dom.loadXML http.responseText 

Set items = dom.getElementsByTagName("account") 

For Each item In items 

    Set var_totalDonated = item.getElementsByTagName("totalDonated") 
    If NOT (var_totalDonated IS Nothing) Then 
     var_totalDonated = ap(totalDonated(0).Text) 
     response.write var_totalDonated 
    End If 

Next 
%> 

Однако времена страницы, когда я к нему доступ.

Я думаю, это потому, что мне нужно предоставить некоторую информацию аутентификации, как описано здесь: https://api.justgiving.com/docs/usage#protectedResources

Так я получил эту информацию аутентификации.

Но я не знаю, как «отправить» его API, чтобы он мог аутентифицировать меня как пользователя и предоставить информацию.

Он также упоминает информацию о заголовке по ссылке выше этой (я не могу опубликовать ссылку, поскольку у меня недостаточно репутации), но замените #protectedResources в конце URL с помощью #contentTypes.

Извините, я тоже что-то пропустил с этой стороны?

Прошу прощения, если я задаю глупые вопросы, но информация о API-документах предполагает некоторый уровень интеллекта со стороны пользователя, и у меня его не так много!

Любой совет, который очень ценится.

Благодарности


Благодаря Джону за ответ.

Исходя из этого, я изменил код:

<% 
vurl = "https://api.justgiving.com/API_KEY/v1/account" 
Set http = Server.CreateObject("msxml2.ServerXMLHTTP") 
http.Open "GET", vurl, False, "username", "pwd" 
http.setTimeouts 5000, 5000, 10000, 10000 ''ms - resolve, connect, send, receive 
http.setRequestHeader "Authorization", "Basic MY_AUTH_STRING" 
http.Send 

Set dom = Server.CreateObject("msxml2.DOMDocument") 

dom.loadXML http.responseText 

Set items = dom.getElementsByTagName("account") 

For Each item In items 

    Set var_totalDonated = item.getElementsByTagName("totalDonated") 
    If NOT (var_totalDonated IS Nothing) Then 
     var_totalDonated = (var_totalDonated(0).Text) 
     response.write var_totalDonated 
    End If 

Next 
%> 

Но, к сожалению, страницу еще раз вне.

Я проверяю также с помощью: groups.google.com/forum/#!topic/justgiving-api/Xhz5Fkxuy1s

Но нет ответа до сих пор.

Еще раз спасибо


Fixed Version

<% 

Sub debug(varName) 
    Dim varValue 
    varValue = Eval(varName) 
    response.write "<p style='margin:10px; border-bottom:2px solid #ccc;border-top:1px solid #eaeaea;background-color:white;padding:10px;color:red;text-align:left;'><strong>" & varName & "</strong>: " & varvalue & "</p>" & vbcrlf & vbcrlf 
End Sub 

vurl = "https://api.justgiving.com/AP_KEY/v1/account" 
Set http = Server.CreateObject("msxml2.ServerXMLHTTP") 
http.Open "GET", vurl, False, username, password 
http.setTimeouts 5000, 5000, 10000, 10000 'ms - resolve, connect, send, receive 
http.setRequestHeader "Authorization", "Basic AUTH_STRING" 
http.Send 

Response.ContentType = "application/xml" 

Set dom = Server.CreateObject("msxml2.DOMDocument") 

dom.loadXML http.responseText 

Set items = dom.getElementsByTagName("account") 

For Each item In items 

    Set var_totalDonated = item.getElementsByTagName("totalDonated") 
    If NOT (var_totalDonated IS Nothing) Then 
     var_totalDonated = ap(var_totalDonated(0).Text) 
     debug "var_totalDonated" 
    End If 

    Set var_totalRaised = item.getElementsByTagName("totalRaised") 
    If NOT (var_totalRaised IS Nothing) Then 
     var_totalRaised = ap(var_totalRaised(0).Text) 
     debug "var_totalRaised" 
    End If 

    Set var_totalGiftAid = item.getElementsByTagName("totalGiftAid") 
    If NOT (var_totalGiftAid IS Nothing) Then 
     var_totalGiftAid = ap(var_totalGiftAid(0).Text) 
     debug "var_totalGiftAid" 
    End If 

Next 
%> 

Раньше я использовал:

vurl = "https://api.justgiving.com/AP_KEY/v1/account" 

Но когда я изменил его на протокол HTTPS он работал.

Мне показалось, что я пробовал это раньше, но, очевидно, нет.

Еще раз спасибо Джону, я очень ценю вашу помощь!

ответ

8

Попробуйте

http.Open "GET", vurl, False, "yourusername", "yourpassword" 

Я не знаю, если это работает на justgiving, но он делает с Bing API

Кроме того, этот вопрос может иметь отношение XmlHttp Request Basic Authentication Issue

Edit - с помощью Response.ContentType и Msxml2.ServerXMLHTTP.6.0

vurl = "https://api.justgiving.com/API_KEY/v1/account" 
Set http = Server.CreateObject("msxml2.ServerXMLHTTP.6.0") 
http.Open "GET", vurl, False, "username", "pwd" 
http.setTimeouts 5000, 5000, 10000, 10000 'ms - resolve, connect, send, receive' 
http.setRequestHeader "Authorization", "Basic MY_AUTH_STRING" 
http.Send 

Response.ContentType = "application/xml"  

Set items = http.responseXML.getElementsByTagName("account") 

etc

+0

Спасибо, Джон, за вашу помощь. Я обновил страницу снова на основе этого, но страница все еще не работает :-(Я опубликовал свой пост выше, чтобы показать обновления. Надеюсь, он почти у вас - я спросил на странице API Google Groups и посмотрю, могут ли они помогите тоже. Еще раз спасибо –

+0

Опять же, я не знаю, будет ли это иметь какое-то значение, но попробуйте «Msxml2.ServerXMLHTTP.6.0» и «Msxml2.DOMDocument.6.0» в ваших заявлениях Server.CreateObject, особенно если вы находитесь на IIS7 или 8 - это означает, что вы используете самую последнюю версию msxml. После того, как вы ее работаете, я рекомендую вам взглянуть на XSLT-преобразования на стороне сервера, которые классический ASP делает довольно красиво, вместо того, чтобы анализировать напрямую, но сначала получите ваш HTTP-запрос - один шаг за раз – John

+0

Кроме того, попробуйте Response.ContentType, а не создайте новый объект XML, я отредактировал свой ответ, чтобы показать вам, что я имею в виду – John

0

Извините, что добавил в сообщение. Однако это постоянно появляется, когда Googling помогает в MailChimp API V3.0 и VBA.

Это исправление я использовал:

ret = objhttp.Open("POST", sURL, False) 
objhttp.setRequestHeader "Content-Type", "application/json" 
objhttp.setRequestHeader "Accept", "application/json" 

'V3 API uses HTTP Basic Authorisation inside an https: wrapper. 
'The standard windows method does not seem to work however the 
'following hack does. 
'In summary the user name and APIkey are seperated with a Colon: and 
'base 64 encoded and added to a Http RequestHeader 


objhttp.setRequestHeader "Authorization", "Basic " & Base64Encode(APIUser & ":" & ApiKey) 

objhttp.send (sJson) 

Вам нужно будет кодировать функцию Base64Encode. Я взял код от http://pastie.org/1192157 (Ex StackOverflow) и вставил его в модуль VBA.

Надеюсь, это поможет.

Смежные вопросы