Skip to content

Instantly share code, notes, and snippets.

@hpneo
Last active December 10, 2015 16:29
Show Gist options
  • Save hpneo/4461707 to your computer and use it in GitHub Desktop.
Save hpneo/4461707 to your computer and use it in GitHub Desktop.
=begin
<STX>00000000119960614080000ABCDDDS 000000000000000000000000004CO|1<ETX><SUM>
<SEQUENCENUMBER> : 000000001
<DATETIMESTAMP> : 19960614080000
<PROVIDERCODE> : ABCD
<CUSTOMERCODE> : DDS
<MARKETINSTRUMENTCODE> : 0000
<SEQUENCENUMBERINST> : 000000000
<OPCODE> : 0000
<LENGTHOFDATAROW> : 000000004
<DATAROW> : CO|1
<SEQUENCENUMBER> : 000000001
<DATETIMESTAMP> : 20130104194700
<PROVIDERCODE> : SEEC
<CUSTOMERCODE> : BVL
<MARKETINSTRUMENTCODE> : 0000
<SEQUENCENUMBERINST> : 000000000
<OPCODE> : 0000
<LENGTHOFDATAROW> : 000000000
<DATAROW> :
<STX>00000000120130104195200SEECBVL 00000000000000000000000000<ETX><SUM>
=end
require 'socket'
STX = 2
ETX = 3
def get_index_data(data)
index = {}
index[:ixticker] = data[0]
index[:type] = data[1]
index[:title] = data[2]
index[:close] = data[3]
index[:index_value] = data[4]
index[:change] = data[5]
index[:open] = data[6]
index[:high] = data[7]
index[:low] = data[8]
index
end
def get_stock_data(data)
stock = {}
stock[:ticker] = data[0]
stock[:code] = data[1]
stock[:status] = data[2]
stock[:type] = data[3]
stock[:issuer] = data[4]
stock[:nominal_value] = data[5]
stock[:significant_quantity] = data[6]
stock[:shares_issued_for_all_series] = data[7]
stock[:shares_issue_for_each_serie] = data[8]
stock[:maximum_daily_volume_as_percentage] = data[9]
stock[:volume_limit] = data[10]
stock[:spl] = data[11]
stock[:spl_last] = data[12]
stock[:spl_date] = data[13]
stock[:div] = data[14]
stock[:div_last] = data[15]
stock[:div_date] = data[16]
stock[:rights] = data[17]
stock[:rights_last] = data[18]
stock[:rights_date] = data[19]
stock[:info] = data[20]
stock[:gpc] = data[21]
stock[:ticker_size] = data[22]
stock[:trade_unit] = data[23]
stock[:cat] = data[24]
stock[:risk] = data[25]
stock[:curr] = data[26]
stock[:regdate] = data[27]
stock[:minqty] = data[28]
stock[:mindays] = data[29]
stock[:limpc] = data[30]
stock[:mmconf] = data[31]
stock[:loangrp] = data[32]
stock[:marginlimp] = data[33]
stock[:cpc] = data[34]
stock[:alertlimp] = data[35]
stock[:limpcah] = data[36]
stock[:vpcah] = data[37]
stock[:mpc] = data[38]
stock
end
def get_checksum(message)
message = message[1..-2]
sum = message.chars.map{ |c| c.object_id }.inject(:+)
while (!(sum & 127)) do
sum = (sum >> 7)
end
(sum & 127)
end
message = "#{STX}000000001#{Time.now.strftime("%Y%m%d%H%M%S")}SEECBVL 00010000000000000000000000#{ETX}"
checksum = get_checksum(message)
socket = TCPSocket.new('200.62.171.3', 17103)
socket.puts "#{message}#{checksum}"
response = socket.gets.unpack("C*").pack("U*")
lines = response.split("\u0002").map{ |line| line.gsub(/\u0003.*$/, '') }
lines.delete("")
rows = []
lines.each do |line|
data = line.split('|')
if data.length == 39
rows << get_stock_data(data)
elsif data.length == 9
rows << get_index_data(data)
end
end
rows
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment