Skip to content

Instantly share code, notes, and snippets.

@jheidt
Forked from paractmol/bingy.rb
Created October 24, 2016 11:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jheidt/04dbcf7137972f559ae9b7f761c7d256 to your computer and use it in GitHub Desktop.
Save jheidt/04dbcf7137972f559ae9b7f761c7d256 to your computer and use it in GitHub Desktop.
require 'open-uri'
class Bingy
LANDING_PAGE = 'http://www.bing.com/translator'.freeze
SPEAK_URL = LANDING_PAGE + '/api/language/Speak?locale=en-US&media=audio/mp3'
def initialize(text, gender = 'male')
@user_agent = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
@params = { text: text, gender: gender }
end
def params
URI.encode_www_form(@params)
end
def url
@url = SPEAK_URL + '&' + params
end
def cookies
open(LANDING_PAGE, 'User-Agent' => @user_agent).meta['set-cookie']
end
def token
cookies.scan(/(mtstkn=.+?);|(MUID=.+?);/).flatten.compact.join(';')
end
def request
open(url, 'Cookie' => token,
'Referer' => url,
'Connection' => 'keep-alive',
'Range' => 'bytes=0-',
'Accept-Encoding' => 'identity;q=1, *;q=0',
'Accept-Language' => 'en-US,en;q=0.8,uk;q=0.6')
end
def download(out)
File.write(out, request.read)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment