Last active
December 10, 2015 16:29
-
-
Save hpneo/4461707 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| =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