Ruby on Rails XPath Json刮痧图像

我正试图从网站上抓取图片。 到目前为止,我正在使用Nokogiri和XPath,但收效甚微。 对于HTML有img和src的典型网站,我可以使用: tmp2 = Nokogiri::HTML(open(site_url)) tmp2.xpath(“//img/@src”).each do |src| …do whatever end 但是,像亚马逊和eBay这样的网站只能用javascript触发某些图像。 如果我查看代码,我可以在数组中看到数据。 例如,来自亚马逊(来源: http : //www.amazon.com/Threads-Thought-Womens-Dreams-X-Small/dp/B00T46V758/ref=sr_1_5? s=apparel&ie=UTF8&qid=1433555447&sr= 1-5 ) : P.when(‘jQuery’, ‘cf’).execute(function($, cf){ P.load.js(‘http://z-ecx.images-amazon.com/images/G/01/browser-scripts/imageBlock-udp-airy/imageBlock-udp-airy-4060168860._V1_.js’); }); P.when(‘A’, ‘jQuery’, ‘ImageBlockATF’, ‘cf’).register(‘ImageBlockBTF’, function(A, $, imageBlockATF, cf){ var data = {“indexToColor”:[],”burjImageBlock”:0,”isSwatchHoverConsistent”:1,”heroFocalPoint”:null,”visualDimensions”:[“color_name”],”productGroupID”:”apparel_display_on_website”,”newVideoMissing”:0,”useIV”:0,”useClickZoom”:null,”useChildVideos”:0,”numColors”:7,”logMetrics”:0,”defaultColor”:”initial”,”airyConfig”:{“enableContinuousPlay”:null,”installFlashButtonText”:”Install Flash Player”,”contentTitle”:null,”autoplayCutOffTimeSeconds”:null,”ageGate”:{“monthNames”:[“January”,”February”,”March”,”April”,”May”,”June”,”July”,”August”,”September”,”October”,”November”,”December”],”deniedPrompt”:”We’re sorry. You are not old enough to watch this video.”,”submitText”:”Submit”,”prompt”:”This video is not intended […]

ActionController :: RoutingError:未初始化的常量Api :: V1 :: ApiController

我有用于控制用户任务的Rails 5 API项目,我有以下错误,但并不总是对于相同的控制器和路由。 ActionController::RoutingError: uninitialized constant Api::V1::ApiController 我向您描述了一些我的项目,以更详细地解释错误。 应用结构 路线 scope module: ‘api’ do namespace :v1 do # => Login routes scope module: ‘login’ do match ‘login’, to: ‘sessions#login’, as: ‘login’, via: :post end # => Team routes scope module: ‘team’ do # => no admin routes resources :tasks, except: [:index] do collection do match […]

为了瘦小的控制器,轨道型号是否应该关注其他型号?

我到处读到业务逻辑属于模型而不是控制器但是限制在哪里? 我正在玩个人会计应用程序。 Account Entry Operation 创建操作时,只有创建相应的条目并将其链接到帐户才有效,以便操作平衡,例如购买6件装: o=Operation.new({:description=>”b33r”, :user=>current_user, :date=>”2008/09/15″}) o.entries.build({:account_id=>1, :amount=>15}) o.valid? #=>false o.entries.build({:account_id=>2, :amount=>-15}) o.valid? #=>true 现在,在基本操作的情况下向用户显示的表格被简化以隐藏条目细节,根据用户请求的操作类型(默认帐户 – >权益来计算,花费资产 – 选择帐户5) >费用,赚取收入 – >资产,借入负债 – >资产,支付债务资产 – >负债……)我想要从默认值创建的条目。 我还希望能够创建更复杂的操作(超过2个条目)。 对于第二个用例,我将有一个不同的forms,其中暴露了额外的复杂性。第二个用例使我无法在操作中包含借方和贷方字段并删除Entry链接。 哪种forms最好? 像我一样在SimpleOperationController中使用上面的代码,或者在Operation类上定义一个新方法,这样我就可以调用Operation.new_simple_operation(params [:operation]) 是不是打破了关注点的分离,实际上是从Operation类创建和操作Entry对象? 我不是在寻找关于我扭曲的会计原则的建议:) 编辑 – 似乎我没有太清楚地表达自己。 我不太关心validation。 我更关心创建逻辑代码应该去哪里: 假设控制器上的操作被称为花费,当使用花费时,params散列将包含:金额,日期,描述。 借方和贷方账户将从被调用的操作中获得,但之后我必须创建所有对象。 拥有它会更好吗? #error and transaction handling is left out for the sake of […]

Ruby:在将proc转换为块时提供参数

我们可以轻松定义一个方法并将其转换为带有一元&符号的块。 def my_method(arg) puts arg*2 end [‘foo’, ‘bar’].each(&method(:my_method)) # foofoo # barbar # or my_method = ->(arg) { puts arg*2 } [‘foo’, ‘bar’].each(&my_method) # same output 正如我们所看到的,当我们使用聚合时,第一个参数会自动传递。 但是,如果我们需要传递2个甚至更多的参数呢? my_method = ->(arg,num) { puts arg*num } [‘foo’, ‘bar’].each(&my_method) # ArgumentError: wrong number of arguments (1 for 2) [‘foo’, ‘bar’].each(&my_method(3)) # NoMethodError: undefined method `foo’ for main:Object […]

可以将匿名模块和类嵌套在Ruby中吗?

我可以在匿名模块中定义一个匿名类: c = nil m = Module.new do c = Class.new end m #=> # c #=> # 以上是否相当于: m = Module.new c = Class.new 换句话说:“嵌套”的概念是否真的适用于匿名模块?

使用omniauth的谷歌open_id连接失败

我正在尝试向我的应用添加open-idfunction,我正在使用omniauth和omniauth-openid gems。 我已经完成了安装步骤,将其作为中间件添加到初始化程序中, require ‘omniauth-openid’ require ‘openid/store/filesystem’ Rails.application.config.middleware.use OmniAuth::Builder do provider :open_id, :store => OpenID::Store::Filesystem.new(‘/tmp’) end 以及用于回调的路由 match ‘/auth/:provider/callback’ => ‘callback#myauthentication’ 当我尝试点击此url时,连接到谷歌提供商 http://[mydomain]/auth/open_id?openid_url=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid 我每次都得到连接失败错误 对于雅虎 http:// [mydomain] /auth/open_id?openid_url=http%3A%2F%2Fme.yahoo.com%2F 如果我尝试使用yahoo open id,即使正确validation后我也会收到invalid_credentials错误更新1:我正在使用apache web服务器和thin / webrick应用服务器。 我validation了如果我不在apache web服务器后面并直接以localhost:3000运行它可以正常工作。 为什么omniauth表现不同

Heroku和Web抓取

我有一个nokigiri web scraper,它发布到我试图发布到heroku的数据库。 我有一个sinatra应用程序前端,我想从数据库中提取。 我是Heroku和Web开发的新手,并不知道处理这类事情的最佳方法。 我是否必须将上传到Web数据库的Web scraper脚本放在sinatra路径下(例如mywebsite.com/scraper)并且只是让它变得模糊不清以至于没有人访问它? 最后,我想让sinatra部分成为从数据库中提取的restapi。 感谢所有输入

Railsvalidation虚拟属性

我这个型号: class Bunny < ActiveRecord::Base attr_accessor :number validates_presence_of :number validates_numericality_of :number end 每当我提交表单来创建此模型时,我都会收到以下错误: 未定义的方法`number_before_type_cast’用于#

mongo db中的tailable游标超时

我正在尝试在ruby中创建一个oplog观察器。 到目前为止,我已经在下面提出了一个小脚本。 require ‘rubygems’ require ‘mongo’ db = Mongo::Connection.new(“localhost”, 5151).db(“local”) coll = db.collection(‘oplog.$main’) loop do cursor = Mongo::Cursor.new(coll, :tailable => true) while not cursor.closed? if doc = cursor.next_document puts doc else sleep 1 end end end 这个问题是,在5或6秒之后它吐出大量数据时会超时并且我得到一个错误 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/mongo-1.4.0/lib/../lib/mongo/connection.rb :807:in `check_response_flags’: Query response returned CURSOR_NOT_FOUND. Either an invalid c ursor was specified, or the cursor may […]

EventMachine和循环

这是我的代码: EventMachine.run { conn = EM::Protocols::HttpClient2.connect request.host, 80 req = conn.get(request.query) req.callback { |response| p(response.status) p(response.headers) p(response.content) } } 回调触发,也就是说,我得到状态的字符串输出等。 但我想要做的就是触发回调,然后重复。 我计划实施更多逻辑,例如每次调整URL,但就目前而言,我只想要: 检索URL 解雇回调 重复… 我对这种模式的理解是,该循环中的所有内容都会触发,然后返回,然后一直持续到我执行EM.stop 。 现在,它检索URL数据,似乎挂起了。 我需要做某种返回才能继续吗? 它为什么悬挂,而不是一遍又一遍地循环? 如果我用循环包围整个上面的代码块…结束它按预期工作..这是实现这个的正确方法吗? 我想我很困惑,因为我认为EM.run所有内容在完成后EM.run重复。