patternrubyrailsMinor
Reverse-engineering with Filepicker API
Viewed 0 times
filepickerreversewithengineeringapi
Problem
I have this script to pull data out of the Filepicker API internal. It's mostly reverse-engineering and the code seems to be ugly to me. How can this be improved?
In case of some of you are against reverse engineering, I asked for a 'real' API to pull this data and they suggested me to do this until they provide an API.
yesterday = (Time.now - 1.day).to_i
start_date = "08/08/2013".to_time.to_i
url = URI.parse("https://developers.inkfilepicker.com/login/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = (url.scheme == "https")
request = Net::HTTP::Post.new(url.request_uri)
request.set_form_data({"email" => "my@email.com", "password" => "123456"})
response = http.request(request)
cookie = response.response['set-cookie'].split('; ')[0]
uri = URI("https://developers.inkfilepicker.com/apps/XXX/stats/file?startdate=#{start_date}&enddate=#{yesterday}")
req = Net::HTTP::Get.new(uri.request_uri)
req['Cookie'] = cookie
res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http|
http.request(req)
}
stats = JSON.parse res.body
stats = stats['data']['links.created']In case of some of you are against reverse engineering, I asked for a 'real' API to pull this data and they suggested me to do this until they provide an API.
Solution
Looks pretty good. Some notes:
(Time.now - 1.day)->1.day.ago
"08/08/2013".to_time: I'd be in doubt "is that day/month or month/day?". An alternative to avoid problems with the parsing format:Time.new(2013, 8, 8)
Net::HTTP: IMO this module is a pain to use for common tasks. I prefer something higher-level like the rest-client gem. It does a lot of boring things for you.
response.response['set-cookie'].split('; ')[0]. I wouldn't rely on this space after the semi-colon. Safer:response.response['set-cookie'].split(';')[0].strip
- Use
do/endfor multiline blocks.
JSON.parse res.bodyBe consistent, use parentheses like you did in the rest of the code.
stats = stats['data']['links.created']: don't reuse variables:links_created = stats['data']['links.created']
requestand laterreq,responseand laterres: Use more declarative names.
Context
StackExchange Code Review Q#49867, answer score: 2
Revisions (0)
No revisions yet.