Skip to content

Instantly share code, notes, and snippets.

@b1nary
Last active December 18, 2015 14:28
Show Gist options
  • Save b1nary/5797154 to your computer and use it in GitHub Desktop.
Save b1nary/5797154 to your computer and use it in GitHub Desktop.
Wrapper around the Peerbet.org API a bitcoin raffle trading plattform.

Peerbet.org API wrapper (Ruby gem)

Wrapper around the Peerbet.org API a bitcoin raffle trading plattform.

  • Depencies: json, [net/http, uri]
  • All functions as of 17.06.2013 with all parameters
Gem::Specification.new do |s|
s.name = 'peerbet'
s.version = '0.0.1'
s.date = '2013-06-17'
s.summary = "Peerbet API wrapper"
s.description = "Wrap the api to Peerbet.org (Bitcoin raffles)"
s.authors = ["Roman Pramberger"]
s.email = 'VORNAME@NACHNAME.ch'
s.files = ["lib/peerbet.rb"]
s.homepage = 'http://rubygems.org/gems/peerbet'
end
require 'net/http'
require 'uri'
require 'json'
PEERBET_API_BASE = "https://peerbet.org/api.php?method="
# ~~
# Full docs about all fields:
# https://peerbet.org/developers.php
# ~~
class Peerbet
attr_accessor :use_ssl, :key, :latest_error
@@use_ssl = true
@@key = nil
@@latest_error = nil
# Initializer (Triggers a login if username & password are not empty)
#
# Example:
# >> pb = Peerbet.new "Username", "Password"
# >> pb = Peerbet.new
# => nil
#
# Arguments:
# [username]: (String)
# [password]: (String)
#
# Limit:
# 0/5 seconds
def initialize username = nil, password = nil
self.login username, password if !username.nil? and !password.nil?
end
# Login
#
# Example:
# >> pb.login "Username", "Password"
# => true
#
# Arguments:
# username: (String)
# password: (String)
#
# Limit:
# 5 seconds
def login username, password
data = read_url(PEERBET_API_BASE+"login&username=#{username}&password=#{password}")
if data["success"] == 1
@@key = data["key"]
true
end
false
end
# Create new account
#
# Example:
# >> pb.create_account "Username", "Email@example.com", "Password"
# => true
#
# Arguments:
# username: (String)
# email: (String)
# password: (String)
#
# Limit:
# 5 seconds
def create_account username, email, password
true if read_url(PEERBET_API_BASE+"signup&username=#{username}&email=#{email}&password=#{password}")["success"] == 1
false
end
# Get current user info
#
# Example:
# >> pb.get_user_info
# => {"username":"tester","balance":"0.2126948","spent_total":"0.00000000","won_total":"0.00000000","deposits_total":"0.00000000","withdrawals_total":"0.00000000","profit":0,"profit_today":0}
#
# Arguments:
# stats: (Boolean) shows extra stats (ex. "spent_total")
#
# Limit:
# none
def get_user_info stats = false
add = "&stats=1" if stats == true
if !@@key.nil?
read_url(PEERBET_API_BASE+"getuserinfo&key=#{@@key}#{add}")
end
end
# Get current user balance
#
# Example:
# >> pb.get_balance
# => 0.123123
#
# Limit:
# none
def get_balance
if !@@key.nil?
read_url(PEERBET_API_BASE+"getuserinfo&key=#{@@key}")["balance"].to_i
end
end
# Get current user deposit adress
#
# Example:
# >> pb.get_deposit_address
# => 0.123123
#
# Limit:
# none
def get_deposit_address
if !@@key.nil?
read_url(PEERBET_API_BASE+"getdepositaddress&key=#{@@key}")["address"].to_s
end
end
# Get all raffles
#
# Example:
# >> pb.get_raffles
# => [{ 'raffle_id': 123123, ... }, { .. }]
#
# Limit:
# 1 second
def get_raffles
read_url(PEERBET_API_BASE+"getactiveraffles")
end
# Each raffle (block)
#
# Example:
# >> pb.each_raffle do |raffle|
# >> p raffle
# >> end
# => { 'raffle_id': 123123, ... }
# => { 'raffle_id': 134624, ... }
#
# Limit:
# 1 second
def each_raffle
read_url(PEERBET_API_BASE+"getactiveraffles").each do |raffle|
yield raffle
end
end
# Get raffle info
#
# Example:
# >> pb.get_raffle_info raffle_id
# => { 'raffle_id': 123123, ... }
#
# Arguments:
# raffle_id: (Integer)
#
# Limit:
# 1 second
def get_raffle_info raffle_id
if !@@key.nil?
read_url(PEERBET_API_BASE+"getraffleinfo&raffle=#{raffle_id}&key=#{@@key}")
end
end
# Get current user raffle count
#
# Example:
# >> pb.get_current_user_raffle_count
# => {"count":"42"}
#
# Limit:
# none
def get_current_user_raffle_count
read_url(PEERBET_API_BASE+"getmyrafflecount&key=#{@@key}")
end
# Get current user raffles
#
# Example:
# >> pb.get_current_user_raffles
# => [{ 'raffle_id': 123123, ... }, { .. }]
#
# Arguments:
# page: (Integer) [default: 0]
#
# Limit:
# 1 second
def get_current_user_raffles page = 0
read_url(PEERBET_API_BASE+"getmyraffles&key=#{@@key}")
end
# Create new raffle
#
# Example:
# >> pb.create_raffle
# => [{ 'raffle_id': 123123, ... }, { .. }]
#
# Arguments:
# tickets: (Integer)
# price: (Float)
# [instant]: (Integer) 1 = yes, 0 = no [default: 1]
# [password]: (String) [default: none]
# [expire]: (Integer) in days [default: none]
#
# Limit:
# 1 second
def create_raffle tickets, price, instant = 1, password = nil, expire = nil
_call = PEERBET_API_BASE+"createraffle&key=#{@@key}&tickets=#{tickets}&price=#{price}&instant=#{instant}"
_call += "&password=#{password}" if !password.nil?
_call += "&expire=#{expire}" if !expire.nil?
data = read_url(_call)
if !data["raffle_id"].nil?
data["raffle_id"].to_i
end
false
end
# Buy ticket(s)
#
# Example:
# >> pb.buy_tickets 123123, 2
# => true
#
# Arguments:
# raffle_id: (Integer)
# count: (Integer)
#
# Limit:
# 1 second
def buy_tickets raffle_id, count
data = read_url(PEERBET_API_BASE+"buytickets&key=#{@@key}&raffle=#{raffle_id}&tickets=#{count}")
if !data["success"].nil? and data["success"].to_i === 1
true
end
false
end
# Refund ticket(s)
#
# Example:
# >> pb.refund_tickets 123123
# => true
#
# Arguments:
# raffle_id: (Integer)
#
# Limit:
# 1 second
def refund_tickets raffle_id
data = read_url(PEERBET_API_BASE+"refund&key=#{@@key}&raffle=#{raffle}")
if !data["success"].nil? and data["success"].to_i === 1
true
end
false
end
# Authorize player for private raffle
#
# Example:
# >> pb.authorize 123123, "password"
# => true
#
# Arguments:
# raffle_id: (Integer)
# password: (String)
#
# Limit
# 5 seconds
def authorize raffle_id, password
data = read_url(PEERBET_API_BASE+"authorize&key=#{@@key}&raffle=#{raffle}&password=#{password}")
if !data["success"].nil? and data["success"].to_i === 1
true
end
false
end
# Transfer funds to another account
#
# Example:
# >> pb.transfer "AccountName", 0.0111
# => true
#
# Arguments:
# recipient: (String)
# amount: (Float)
#
# Limit
# 1 second
def transfer recipient, amount
data = read_url(PEERBET_API_BASE+"transfer&key=#{@@key}&recipient=#{recipient}&amount=#{amount}")
if !data["success"].nil? and data["success"].to_i === 1
true
end
false
end
# Get all chat messages
#
# Example:
# >> pb.get_chat
# => [{ ... }, { ... }]
#
# Arguments:
# lastmessageid: (Integer) Start list from here
#
# Limit
# 1 second
def get_chat lastmessageid = nil
last = ""
last = "&lastmessageid=#{lastmessageid}" if !lastmessageid.nil?
read_url(PEERBET_API_BASE+"getchatmessages&key=#{@@key}#{last}")
end
# Each chat message
#
# Example:
# >> pb.each_chat { |msg| p msg }
# => { ... }
#
# Arguments:
# lastmessageid: (Integer) Start list from here
#
# Limit
# 1 second
def each_chat lastmessageid
last = ""
last = "&lastmessageid=#{lastmessageid}" if !lastmessageid.nil?
read_url(PEERBET_API_BASE+"getchatmessages&key=#{@@key}#{last}").each do |msg|
yield msg
end
end
# Post chat msg
#
# Example:
# >> pb.post "Yay ich bin kein bot"
# >> pb.post "Aber ich bin ein bot", true
# => true
#
# Arguments:
# message: (String) maximal 140 chars
# bot: (Boolean)
def post message, bot = 1
if bot == true
bot = 1
else
bot = 0
end
data = read_url(PEERBET_API_BASE+"postchatmessage&key=#{@@key}&message=#{message}&bot=#{bot}")
if !data["message_id"].nil?
data["message_id"].to_i
end
false
end
# Private message
#
# Example:
# >> pb.private_post "Yay ich bin kein bot"
# >> pb.private_post "Aber ich bin ein bot", true
# => true
#
# Arguments:
# receiver:(String) Other account
# message: (String) maximal 140 chars
# bot: (Boolean)
def private_post receiver, msg, bot
self.post "%#{receiver}, #{msg}", bot
end
private
# Reads url into JSON object (http & https, collects last error)
#
# Example:
# >> self.read_url("https://meh.meh/meh.json")
# => { ... }
def read_url url
if @@use_ssl
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
data = JSON.parse( http.get(uri.request_uri).body )
else
data = JSON.parse( Net::HTTP.get(URI.parse(url.gsub('https://','http://'))) )
end
if !data["error"].nil?
@@latest_error = data["error"]
end
data
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment