1
iYu 2013-03-18 16:43:30 +08:00
请问 这些信息是人工编辑还是爬虫自己爬的阿。
|
2
lpisces OP 用ruby调用淘宝rest api
|
4
huyipeng 2013-03-18 23:38:10 +08:00
你好,能请教一下你是如何用ruby处理淘宝API的?
|
5
lyhapple 2013-03-19 11:00:23 +08:00
问一下,前期准备工作有哪些,要怎么才能申请到淘宝API, 比哪网站域名或空间是否需要备案等等.
再讲讲API的处理方式吧。 |
6
lpisces OP @acpp 之前搞过php,python之类的
花了两个礼拜把ror guide看了一遍 @lyhapple 这个是实验性质的,很多地方很粗糙,打算重构。 vps是香港的 api调用 def sign(app_secret, params) str = [] str << app_secret str << params.sort.join str << app_secret Digest::MD5.hexdigest(str.join).upcase end def api_url api_url = 'http://gw.api.taobao.com/router/rest' end def url(params) url = [] params.sort.each {|k, v| url << (k.to_s << '=' << URI.encode(v.to_s).to_s)} api_url << '?' << (url.join '&') end def get(url) res = Net::HTTP.get_response(URI.parse(url)) res.body end def product_params(app_key, app_secret, cid) params = {} params[:format] = 'json' params[:timestamp] = (Time.now).strftime("%Y-%m-%d %H:%M:%S") params[:sign_method] = 'md5' params[:v] = '2.0' params[:method] = 'taobao.taobaoke.items.coupon.get' params[:fields] = ['item_imgs', 'num_iid', 'seller_id', 'nick', 'title', 'price', 'item_location', 'seller_credit_score', 'click_url', 'shop_click_url', 'pic_url', 'taobaoke_cat_click_url', 'keyword_click_url', 'coupon_rate', 'coupon_price', 'coupon_start_time', 'coupon_end_time', 'commission_rate', 'commission', 'commission_num', 'commission_volume', 'volume', 'shop_type'].join ',' params[:cid] = cid params[:keyword] = '' params[:sort] = 'volume_desc' params[:app_key] = app_key params[:page_no] = 1 params[:page_size] = 100 params[:shop_type] = 'b' params[:sign] = sign(app_secret, params) params end task :product => :environment do app_key = Setting.g 'app_key', 'taobao' app_secret = Setting.g 'app_secret', 'taobao' categories = Category.where("level = ? or id = ?", 2, 50008055).all categories.each do |c| next if TaobaoCategory.where(:cid => c.id).first.nil? params = product_params app_key, app_secret, c.id json = get(url(params)) p json products = ActiveSupport::JSON.decode(json) next if products.nil? || products['taobaoke_items_coupon_get_response'].nil? || products['taobaoke_items_coupon_get_response']['taobaoke_items'].nil? items = products['taobaoke_items_coupon_get_response']['taobaoke_items']['taobaoke_item'] next unless items.respond_to? :each items.each do |p| img_json = get(url(img_params app_key, app_secret, p['num_iid'])) imgs = ActiveSupport::JSON.decode(img_json) imgs = imgs['items_list_get_response']['items']['item'] unless imgs[0]['item_imgs'].empty? p['imgs'] = [] imgs[0]['item_imgs']["item_img"].each do |i| p['imgs'] << i['url'] end end save_product p, c.id, Product end end end 代码凑活看吧 |
7
insub 2013-03-19 12:37:46 +08:00
麻烦问下,从动手到上线花了多长时间呢?同为railser.
|
15
lpisces OP |
16
insub 2013-03-20 16:44:09 +08:00
@lpisces
thk! 不过其实我是一直为自己的不够敏捷所困扰,所以有那么一问....往往预估工作量也就一周,打算一个月上线的项目,常常要两个甚至三个月上线。目前虽有改善但还是比较苦恼。 有什么经验可以传授么? |
18
Mac 2013-03-20 18:48:38 +08:00
淘宝客现在不反现金了吧?反的是积分?
|
20
lpisces OP @insub 其实我跟你的问题一样,总是寻求一个敏捷的方式,但是总被各种因素干扰。
我现在觉得就是快速实现原型,然后推到重构。这样最少可以有一个直观的东西让人看到,自己也可以在实现原型的过程中发现问题,便于在重构时避免跳进重复的坑。这就是传说中的快速迭代。 关于rails,我觉得快速开发是其最大的特点之一,但是其与众不同之处是bdd这种模式,很可惜,我对unit test,RSpec这样的东西不是很了解,但觉得是很好的东西,应该用起来提高代码质量。不能总是用smoking ping模式来调试代码。然后用bdd模式写代码可以让自己目标性更加强一点。 现在这个demo完全没有test代码,可见一斑。 粗浅见解,见笑了~ |
22
insub 2013-03-21 16:57:51 +08:00
@lpisces
至今基本上还是 原型 -》 代码 -》 ps稿 -》上线的流程,现在感觉这流程没法快速迭代。。。 一直没胆做推倒重构的准备,主要是觉得成本太高,怕做着做着发现业务上走不通,觉得粗粒度原型还是有必要的,不管在纸上还是axure 我也不写test,主要是觉得不必担心bug,但会担心安全问题怕有遗漏 原型的话会用纸张或axure,但常常画到一半就不画了,因为设计也是我自己做,经常就会ps稿当原型琢磨,现在几个项目下来感觉这样还是不靠谱,常常因为设计导致原型拖延 现在是设计上卡的比较多,有点强迫症,太难看实在接受不了就这么上线,苦求设计师而不得啊 |
23
lpisces OP @insub 我觉得还有一条纠结的原因就是 “造轮子” 的问题,不知道你怎么看这个。
打个比方说,基本上每个项目都要写后台,于是rails有了rails_admin,active_admin这种东西。每个项目都要有认证,于是有了divise这种东西。ruby china上的观点说rails_admin这种东西都是玩具,都得自己写。不然遇到不满足需求然后自己搞不定或者搞定成本大于自己搞就完蛋了。 但是我觉得rails之所以敏捷,是因为它把很多开发中要用到东西都集成进框架了。 我说的重构不是每一行代码都重写。我觉得在原型设计阶段要定义好数据结构的大方向,这部分在后面的重构是不应该动大刀子的,除非应用的负载上涨到了质变。 重构的是vc层面的东西。 |