Skip to content

Instantly share code, notes, and snippets.

@johnhamelink
Created March 28, 2015 21:23
Show Gist options
  • Save johnhamelink/33bab077efa8e456faf0 to your computer and use it in GitHub Desktop.
Save johnhamelink/33bab077efa8e456faf0 to your computer and use it in GitHub Desktop.
Ruby CLI Client for Papa Johns' API
require 'rubygems'
require 'bundler/setup'
require 'faraday'
require 'pry'
require 'json'
@conn = Faraday.new(url: 'https://api.papajohns.co.uk') do |faraday|
faraday.adapter Faraday.default_adapter
end
def login(email, password)
login = @conn.post do |req|
req.url '/Login.asmx/DoLogin'
req.headers['Content-Type'] = 'application/json;charset=UTF-8'
req.headers['Accept'] = 'application/json, text/plain, */*'
req.headers['User-Agent'] = 'Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36'
req.headers['Accept-Language'] = 'en-GB,en-US;q=0.8'
req.headers['X-Requested-With'] = 'uk.co.papajohns.ppjqg'
req.body = JSON.generate({ 'loginRequest' => {
email: email,
password: password,
deviceid: 'b4c40cefa8e46ddd',
devicetype: 'Android / Nexus 5 / 5.0.1'
}
})
end
login = JSON.parse login.body
login = login['d']['authentication']
@token = login['token']
end
def get_orders(token)
orders = @conn.post do |req|
req.url '/Order.asmx/GetOrders'
req.headers['Content-Type'] = 'application/json;charset=UTF-8'
req.headers['Accept'] = 'application/json, text/plain, */*'
req.headers['User-Agent'] = 'Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36'
req.headers['Accept-Language'] = 'en-GB,en-US;q=0.8'
req.headers['X-Requested-With'] = 'uk.co.papajohns.ppjqg'
req.body = JSON.generate({ 'authenticationRequest' => {
deviceid: 'b4c40cefa8e46ddd',
token: token
}
})
end
# [{"OrderId"=>9300756,
# "OrderDateTime"=>"2015-03-28 19:09:11",
# "StatusLevel"=>8,
# "ShipmentMethod"=>2,
# "StoreId"=>479,
# "OrderItems"=>
# [{"ProductId"=>452,
# "ProductName"=>"Hawaiian BBQ (Extra Extra Large/Authentic Thin Crust)",
# "ItemGuid"=>"75259e86-5a9a-4603-b174-89d93d6e78a4",
# "ItemId"=>0}]}]
orders = JSON.parse orders.body
return orders['d']['orders']
end
def shipment_method(shipment_id)
return [
'unknown',
'Collection',
'Delivery'
][shipment_id]
end
def order_status(status_id)
return [
"Thank you for your order, we're making your pizza",
"Thank you for your order, we're making your pizza",
"Thank you for your order, we're making your pizza",
"Thank you for your order, we're making your pizza",
"Thank you for your order, we're making your pizza",
"Now we're cookin'",
"It's on the road",
"Thank you for your order, we're making your pizza",
'Tuck In',
"Sorry, we could not process your order",
][status_id]
end
login(ENV['email'], ENV['password'])
orders = get_orders(@token)
puts "Orders:"
orders.each do |order|
puts " => Order ##{order['OrderId']}:"
puts " - Shipment: #{shipment_method(order['ShipmentMethod'])}"
puts " - Order Status: #{order_status(order['StatusLevel'])}"
puts " - Product Items:"
order['OrderItems'].each do |item|
puts " - #{item['ProductName']}"
end
end
@johnmap
Copy link

johnmap commented Apr 17, 2016

Happy to see I'm not the only one who thought of this :) Did you get any further than this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment