Brian Silverman | 8fa2aad | 2017-06-10 16:45:30 -0700 | [diff] [blame] | 1 | require 'net/http' |
| 2 | begin |
| 3 | require "sha1" |
| 4 | rescue LoadError |
| 5 | require "digest/sha1" |
| 6 | end |
| 7 | |
| 8 | require 'rubygems' |
| 9 | require 'nokogiri' |
| 10 | |
| 11 | def retrieve_url url |
| 12 | cache_file = '.url_cache/' + Digest::SHA1.hexdigest(url) |
| 13 | if File.exists? cache_file |
| 14 | server_response = YAML.load_file(cache_file) |
| 15 | else |
| 16 | uri = URI.parse(url) |
| 17 | resp = Net::HTTP.start(uri.hostname, uri.port) do |http| |
| 18 | path = uri.path |
| 19 | if uri.query |
| 20 | path += '?' |
| 21 | path += uri.query |
| 22 | end |
| 23 | if uri.host == 'www.digikey.com' |
| 24 | req = Net::HTTP::Post.new(path) |
| 25 | req.set_form_data( |
| 26 | 'TS01ddcca6_id' => '3', |
| 27 | 'TS01ddcca6_cr' => 'ce1fcbf6f531dc4315cd98214a898f01:jnlm:8Ij6i51F:267420643', |
| 28 | 'TS01ddcca6_76' => '0', |
| 29 | 'TS01ddcca6_86' => '0', |
| 30 | 'TS01ddcca6_md' => '1', |
| 31 | 'TS01ddcca6_rf' => '0', |
| 32 | 'TS01ddcca6_ct' => '0', |
| 33 | 'TS01ddcca6_pd' => '0', |
| 34 | ) |
| 35 | req['Referrer'] = 'http://www.digikey.com/product-search/en?keywords=CL21C271JBANNNC' |
| 36 | else |
| 37 | req = Net::HTTP::Get.new(path) |
| 38 | end |
| 39 | http.request(req) |
| 40 | end |
| 41 | if resp.code == '301' || resp.code == '302' |
| 42 | server_response = retrieve_url(uri.scheme + '://' + uri.host + resp['location']) |
| 43 | else |
| 44 | resp.value |
| 45 | server_response = resp.body |
| 46 | end |
| 47 | File.open(cache_file, 'w') do |f| |
| 48 | YAML.dump server_response, f |
| 49 | end |
| 50 | end |
| 51 | |
| 52 | server_response |
| 53 | end |