2012-12-12 6 views
1

쿼리에 대한 Bing 검색 결과를 얻으려고합니다. Ruby와 curb을 사용하고 있지만 API 서버에서 결과를 얻을 수 없습니다. 나는 항상 400 Bad Request을 얻는다.Ruby curb를 통한 Bing Search API

* About to connect() to api.datamarket.azure.com port 443 (#0) 
* Trying 157.55.194.132... 
* Connected to api.datamarket.azure.com (157.55.194.132) port 443 (#0) 
* Connected to api.datamarket.azure.com (157.55.194.132) port 443 (#0) 
* SSL connection using AES128-SHA 
* Server certificate: 
* subject: C=US; ST=WA; L=Redmond; O=Microsoft; OU=STBOS-Clouddb; CN=api.datamarket.azure.com 
* start date: 2012-08-31 18:37:12 GMT 
* expire date: 2013-07-31 21:26:57 GMT 
* common name: api.datamarket.azure.com (matched) 
* issuer: DC=com; DC=microsoft; DC=corp; DC=redmond; CN=Microsoft Secure Server Authority 
* SSL certificate verify ok. 
> GET /Bing/Search/Web?$format=json&Query=%27Xbox%27& HTTP/1.1 
Host: api.datamarket.azure.com 
Accept: */* 
request_fulluri: true 
ignore_errors: false 
Authorization: Basic ... 

< HTTP/1.1 400 Bad Request 
< Content-Type: text/html; charset=us-ascii 
< Server: Microsoft-HTTPAPI/2.0 
< Date: Wed, 12 Dec 2012 13:30:22 GMT 
< Connection: close 
< Content-Length: 339 
< 
* Closing connection #0 

무엇이 잘못 갈 것 : 여기

require 'curb' 
require 'base64' 

acctKey = "something" 
authKey = Base64.encode64("#{acctKey}:#{acctKey}") 
http = Curl.get("https://api.datamarket.azure.com/Bing/Search/Web?$format=json&Query=%27Xbox%27") do |http| 
    http.headers['Authorization'] = "BasiC#{authKey}" 
    http.headers['request_fulluri'] = true 
    http.headers['ignore_errors'] = false 
    http.verbose = true 
end 

결과입니다

이것은 API 문서는 PHP 여기 enter image description here

에 대해 말한다 내 코드는 무엇입니까?

답변

2

이 시도 :

require 'curb' 
require 'base64' 

acctKey = "<YOUR KEY>" 
authKey = Base64.strict_encode64("#{acctKey}:#{acctKey}") 
http = Curl.get("https://api.datamarket.azure.com/Bing/Search/Web", {:$format => "json", :Query => "'Xbox'"}) do |http| 
    http.headers['Authorization'] = "BasiC#{authKey}" 
    http.verbose = true 
end 

puts http.body_str 

참고 몇 가지 :

  1. Base64.encode64는 줄 바꿈이있는 문자열을 반환합니다. strict_encode64이 문제를 피할 수 있습니다. (개행을 그냥 지울 수도 있습니다.)
  2. URL에 검색어 매개 변수를 직접 넣는 데 어려움이 있습니다. 방금 매개 변수를 해시로 옮겼습니다. 아마도 해싱을 수행하는보다 일반적인 방법 일 것입니다.
  3. (EDIT) 두 개의 가짜 헤더 인 "request_fulluri"와 "ignore_errors"도 가져 왔습니다. 필자는 그것들이 Perl 코드의 실제 헤더라고 생각하지 않습니다. 나는 그 (것)들을 남겨두기 위하여 시도하지 않았다, 그래서 아마 무해하다, 그러나 나는 너를 그 (것)들을 원한 ㄴ다고 생각하지 않는다.