项目记录38--tolua 股市网络爬虫软件解析json,html

来源:互联网 发布:java重写的作用 编辑:程序博客网 时间:2024/05/11 02:56

找工作,找工作....不顺啊。停吧实现自己的一个小idea先,被比打击了,一个主城问到我slua和tolua,ulua的区别哪个比较好,优化性能上哪个比较好,好在哪里,打包有多大?我蒙圈了想想还真没真研究过,貌似自己也就把这些东西当做一个插件来用,就算是coco又或者unity一直都只是工具,没有很好的去研究底层的东西,悲剧了,只能根据自己的感觉说tolua好咯,必须的因为自己也在使用,性能嘛就说快(因为之前看了一些对比数据但是自己没真实践过有点心虚),打包多大android自己实践过20多M左右,但是ios就没试过。最后问性能优化这块,貌似答得也不太好。只能说自己对新技术的攻克能力学习能力解决问题能力还是挺强,这个倒是有信心,不知道一到和人聊起来就不行,原因啊原因啊。

最近有个Idea,就是用tolua实现以个股市爬虫软件这样也算是有一个小小突破,发现市场上的一些股票软件没有热跟新,自己也搞搞试试看,反正有时间。做起来就没那么容易了。首先第一步你需要的是股市信息,这个一般开发股市软件的公司都有数据接口,我这小白哪里,呵呵,办法有的就是网络爬虫,通过在网上的留言查看搜索决定使用新浪的股票数据,原因就是比较稳定。第二就是解析,和忍耐,开发肯定会遇到新奇问题,因为之前没做过,也没试过。

经过一天的搜索数据,一天的框架搭建(之前的框架简约版),两天时间的解析和努力难点包括html的解析扥。。。。终于把第一个接口给搞好了把它所有接口都封装成sdk的形式。

龙虎榜信息接口面市。小小总结下用到的技术点,tolua:携程, http, cjson

上代码(只是开发阶段代码不做整理),这里只打印出一个股票的信息datatable[1]验证成功。

local json = require 'cjson'


local billboard = class("billboard")

local allURL = nil --完整的请求URL
local a = nil      --携程
local callBack = nil --携程回调
local call = nil --外部的回调


function billboard:ctor() end


function billboard:records(  )
if a ~= nil then StopCoroutine(a) end
a = nil
allURL = nil
call = nil
end
--启动携程
function billboard:SCoroutine(url,_callBack,_call)
self:records()
allURL = url
callBack = _callBack
call = _call
a = StartCoroutine(self.iBCoroutine)
end
--携程回调
function billboard:iBCoroutine()
print("URL------------ : "..allURL)
local www = UnityEngine.WWW(allURL)
Yield(www)
if www.error ~= nil then
        self:ERROR(www.error) 
        return 
    else
    if www.text == "None" then 
    self:ERROR("None") 
    return
    end
    callBack(www.text)
    end
end
--错误处理
function billboard:ERROR(error)
print("ERROR : "..error)
end


--[[
获取每日龙虎榜列表
date:string  明细数据日期 format:YYYY-MM-DD 如果为空,返回最近一个交易日的数据
code:代码
        name :名称
        pchange:涨跌幅     
        amount:龙虎榜成交额(万)
        buy:买入额(万)
        bratio:占总成交比例
        sell:卖出额(万)
        sratio :占总成交比例
        reason:上榜原因
    return  nil  table
]]
function billboard:to_list(_call,data)
--默认空请求最近一天(不包括假期:国庆,春节等)
if data == nil then
data = Get_data_withOut_holiday()
end

local URLformat ="%sdata.%s/DataCenter_V3/stock2016/TradeDetail/pagesize=200,page=1,sortRule=-1,sortType=,startDate=%s,endDate=%s,gpfw=0,js=vardata_tab_1.html"


    local tempURL =  string.format(URLformat,P_TYPE.http,DOMAINS.em,data,data)
    --启动携程www请求http数据
    print(tempURL)
    self:SCoroutine(tempURL,handler(self,self.GetNetData),_call)
end


function billboard:GetNetData(tex)
    local res = tex
    res =  string.split(res, "_1=")
local jsonTxt = res[2]
jsonTxt = string.gsub(jsonTxt,"{pages:1,data:","{\"pages\":1,\"data\":")
jsonTxt = string.gsub(jsonTxt,"'url':","\"url\":")
jsonTxt = string.gsub(jsonTxt,"'http://","\"http://")
jsonTxt = string.gsub(jsonTxt,"lhbggdrtj'","lhbggdrtj\"")
local data = json.decode(jsonTxt)
if data == nil then
call()
return nil 
else
local datatable = data["data"]
print(#datatable)
--LHB_TMP_COLS = ['SCode', 'SName', 'Chgradio', 'ZeMoney', 'Bmoney', 'Smoney', 'Ctypedes', 'Turnover']
print("code : "..datatable[1]["SCode"])
print("name : "..datatable[1]["SName"])
print("pchange : "..datatable[1]["Chgradio"])
print("amount : "..datatable[1]["ZeMoney"])
print("buy : "..datatable[1]["Bmoney"])
print("sell : "..datatable[1]["Smoney"])
print("reason : "..datatable[1]["Ctypedes"])
print("bratio : "..datatable[1]["Bmoney"]/datatable[1]["Turnover"])
print("sratio : "..datatable[1]["Smoney"]/datatable[1]["Turnover"])
print("------------------------------")
call(datatable)
end
end

return billboard






看时间已经很晚很晚都早上了,做自己喜欢的东西时间真快,这是“加班”通宵节奏吗

0 0