2014-02-22 2 views
1

Spotify oEmbed API에서 JSON 응답을 가져 오기 위해 작동하던 다음 코드 스 니펫을 사용하고있었습니다.열린 원격 URL이 빈 문자열을 반환합니까?

내가이 일을했다 :

response = JSON.parse(open("https://embed.spotify.com/oembed/?url=http://open.spotify.com/album/5Mxj65mCzxUjDkoqz7JXPJ").read) 

을하지만 지금,이 때문에 작동이 중지 : 컬을 사용하여,

2.0.0p247 :017 > open("https://embed.spotify.com/oembed/?url=http://open.spotify.com/album/5Mxj65mCzxUjDkoqz7JXPJ").read 
=> "" 

, 나는 얻을 :

$curl https://embed.spotify.com/oembed/\?url\=http://open.spotify.com/album/5Mxj65mCzxUjDkoqz7JXPJ 
{"provider_url":"https:\/\/www.spotify.com","version":"1.0","thumbnail_width":300,"height":380,"thumbnail_height":300,"title":"Illum Sphere - 13. Embryonic","width":300,"thumbnail_url":"https:\/\/d3rt1990lpmkn.cloudfront.net\/cover\/d4f5d8624752eeae3dc8bc3d58e2155d095181c1","provider_name":"Spotify","type":"rich","html":"<iframe src=\"https:\/\/embed.spotify.com\/?uri=spotify:album:5Mxj65mCzxUjDkoqz7JXPJ\" width=\"300\" height=\"380\" frameborder=\"0\" allowtransparency=\"true\"><\/iframe>"} 

어떤 조언을?

답변

4

User-Agent 통과하십시오 :

require 'open-uri' 
puts open("https://embed.spotify.com/oembed/?url=http://open.spotify.com/album/5Mxj65mCzxUjDkoqz7JXPJ", "User-Agent" => "Ruby/#{RUBY_VERSION}").read 

결과 :

{"provider_url":"https:\/\/www.spotify.com","version":"1.0","thumbnail_width":300,"height":380,"thumbnail_height":300,"title":" 
Illum Sphere - 13. Embryonic","width":300,"thumbnail_url":"https:\/\/d3rt1990lpmkn.cloudfront.net\/cover\/d4f5d8624752eeae3dc8b 
c3d58e2155d095181c1","provider_name":"Spotify","type":"rich","html":"<iframe src=\"https:\/\/embed.spotify.com\/?uri=spotify:al 
bum:5Mxj65mCzxUjDkoqz7JXPJ\" width=\"300\" height=\"380\" frameborder=\"0\" allowtransparency=\"true\"><\/iframe>"} 
+0

감사합니다! 그게 효과가 있었어. 하지만이 행동에 대한 설명이 있습니까? – simaofreitas

+1

확실하지 않습니다. 전에 (당신이 말했듯이) 작동했기 때문에, 이제는 어떤 종류의'user-agent' 검증을 강제하고 있다고 가정 할 수 있습니다 (curl에서 암시 적으로 하나의 User-Agent : curl/7.30.0'을 전송합니다). 예). 그건 물론, 그냥 야생 추측입니다. – fmendez

+2

그건 아주 유효한 추측입니다. 스파이더 링 또는 API 사용 여부에 상관없이 코드를 식별하지 않고 사이트에 요청을 보내는 것은 나쁜 형식으로 간주됩니다. 그들에게 당신을 식별 할 수있는 무엇인가를주십시오. 그래서 당신의 코드가 잘못하면 당신에게 연락 할 수 있습니다; 그것은 전체적으로 금지 된 박동입니다. –