joshfrench / rakismet Goto Github PK
View Code? Open in Web Editor NEWEasy Akismet and TypePad AntiSpam integration for Rails
License: MIT License
Easy Akismet and TypePad AntiSpam integration for Rails
License: MIT License
I got uninitialised constant MyController::Rakismet
Also the generator didn't work, I had to create the initialiser manually.
No biggy I'll roll my own Akismet solution, just thought it might be helpful if you mention what versions this gem works with.
Hi Josh:
I'm trying to implement Rakismet 0.4.2 in my Rails 2.3.14 app. I'm getting the following error after clicking "submit request" from my offerings#show view, the page from which our clients submit ProjectRequests (analogous to a blog_post view from which readers would submit comments):
SocketError (getaddrinfo: nodename nor servname provided, or not known):
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in initialize' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in
open'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in connect' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:53:in
timeout'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:93:in timeout' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in
connect'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:553:in do_start' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:542:in
start'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:440:in start' rakismet (0.4.2) lib/rakismet.rb:39:in
akismet_call'
rakismet (0.4.2) lib/rakismet/model.rb:45:in spam?' app/models/project_request.rb:59:in
check_for_spam'
app/controllers/users/project_requests_controller.rb:26:in `create'
....
I'm running the app on my development server (http://localhost:3000). I'm connected to the Internet.
I've got the following in my ProjectRequest.rb model:
class ProjectRequest < ActiveRecord::Base
include AccountingMethods
include CurrencyMethods
include Rakismet::Model
attr_accessible :title, :details, :budget, :provider_id, :offering_id, :offering_quantity, :request_type_id,
:accepted_date, :declined_date, :cancelled_date, :archived_by_user, :archived_by_provider, :workflow_state
validates_presence_of :title, :details, :request_type_id
validates_presence_of :budget, :if => :is_hourly?
validates_numericality_of :budget_number, :greater_than_or_equal_to => 1, :if => :is_hourly?,
:message => "must be at least 0.01."
has_one :project
has_one :payable_item
belongs_to :user
belongs_to :provider
belongs_to :offering
belongs_to :offering_type, :foreign_key => :request_type_id
before_create :check_for_spam
def author
self.user.login || "John Smith"
end
def author_email
self.user.email || "[email protected]"
end
def comment_type
"project_request"
end
def content
self.title + ' ' + self.details
end
def permalink
base = 'http://www.genlighten.com'
if self.offering_id
offering_title = self.offering.title.slugorize
base + '/offerings/' + offering_title
else
provider_login = self.provider.login
base + '/provider_profiles/' + provider_login
end
end
# following two methods from Ryan Bates' Railscast #65 "Stopping Spam with Akismet"
def request=(request)
self.user_ip = request.remote_ip
self.user_agent = request.env['HTTP_USER_AGENT']
self.referrer = request.env['HTTP_REFERER']
end
def check_for_spam
self.akismet_approved = !self.spam?
puts "akismet response = #{self.akismet_response}"
true
end```
And the following snippet comes from the top of my project_requests_controller.rb: (the if @project_request.save line is line 26 in the error message above). This controller processes creation of a project request when the user clicks "submit request" on the offerings#show request submission form.
```Ruby/Rails
class Users::ProjectRequestsController < ApplicationController
include UserMethods
include CartMethods
include ProjectRequestMethods
include ProviderMethods
layout 'new_default'
before_filter :login_required
before_filter :get_user_from_user_id
before_filter :check_user_access
before_filter :recover_cart, :only => :update
before_filter :get_project_request, :only => [ :convert, :show, :update ]
before_filter :get_offering_from_offering_id, :only => [ :create ]
before_filter :get_provider_for_project_request, :only => :show
before_filter :get_provider_from_provider_id, :only => [ :create ]
before_filter :get_project_for_project_request, :only => [ :show, :update ]
helper_method :sort_column, :sort_direction
def create
@project_request = @user.project_requests.build(params[:project_request])
@project_request.request = request
if @project_request.save
if @project_request.akismet_approved?
redirect_to convert_user_project_request_path(@user,@project_request)
else
# email admin that we've received a spam project_request
flash[:error] = "We were unable to submit your request. Please contact Genlighten Support at (302)566-5871."
redirect_to root_path
end
else
flash[:error] = "Failed to submit your request #{@project_request.title}."
get_offering_for_project_request
@page_title = "#{@offering.title} | Genlighten"
get_provider_for_project_request
get_provider_feedback_summary
render 'offerings/show'
end
end```
And my config/initializers/rakismet.rb file contains these lines:
Rakismet::KEY = GlobalConfig.rakismet_key
Rakismet::URL = GlobalConfig.rakismet_url
Rakismet::HOST = GlobalConfig.rakismet_host
while my global_config.yml file contains the following:
# Key and url for use with rakismet gem and Akismet anti-spam API access
rakismet_key: 'my_akismet_key'
rakismet_url: 'http://www.genlighten.com'
rakismet_host: 'http://akismet.com/'
Can you offer any advice or suggestions? I'm guessing I haven't given rakismet the right parameters to find akismet to process the API there?
Thanks very much!
Dean Richardson (still a Rails novice, obviously)
Genlighten.com
I am using Rakismet(1.5.3) gem in my Rails(3.2.22) project. Rakismet validates attributes such as author, author_email, author_url, content by default.
My question: I want to validate extra columns in model like post tile, post summary, post content.I tried to merge the post title, post content and post summary and assigned to content field.
post.rb
class Post < ActiveRecord::Base
include Rakismet::Model
belongs_to :user
rakismet_attrs :author => proc { user.full_name },
:author_email => proc { user.email }
:content => :post_detail
#Virtual attribute
def post_detail
"#{title} #{summary} #{content}"
end
end
It didn't work as expected viz didn't throw any spam errors even though title, content and summary had spam text(viagra-test-123).
I have also tried Proc :content => proc { "#{title} #{summary} #{content}" }
, but no result.
It is working only when we assign title/summary separately to rakismet's content attribute as :content => :title
I don't know Ruby all that well, but it appears that the permalink
parameter is actually being sent as comment_permalink
, based on its inclusion in arrays like the one at
it "should have default mappings" do
[:comment_type, :author, :author_email, :author_url, :content, :permalink].each do |field|
fieldname = field.to_s =~ %r(^comment_) ? field : "comment_#{field}".intern
AkismetModel.akismet_attrs[fieldname].should eql(field)
end
AkismetModel::akismet_attrs[:user_role].should eql(:user_role)
end
Can you confirm whether this is the case, and if so, just send the value in the permalink
argument?
Error happens on this line, when I'm trying to call .spam? on a comment:
@post.comments << @comment unless @comment.spam?
Only happens on comments with UTF-8 characters.
Stack trace:
/home/monk/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/cgi/util.rb:7:in `gsub'
/home/monk/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/cgi/util.rb:7:in `escape'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet.rb:65:in `block (2 levels) in akismet_call'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet.rb:65:in `each'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet.rb:65:in `map'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet.rb:65:in `block in akismet_call'
/home/monk/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:627:in `start'
/home/monk/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:490:in `start'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet.rb:64:in `akismet_call'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet/model.rb:37:in `spam?'
app/controllers/blog_controller.rb:127:in `comment'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/abstract_controller/base.rb:150:in `process_action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal/rendering.rb:11:in `process_action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/abstract_controller/callbacks.rb:18:in `block in process_action'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/callbacks.rb:450:in `_run__2145909047847877237__process_action__3443656973696802015__callbacks'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/callbacks.rb:409:in `_run_process_action_callbacks'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/callbacks.rb:93:in `run_callbacks'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/abstract_controller/callbacks.rb:17:in `process_action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/notifications.rb:52:in `block in instrument'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/notifications.rb:52:in `instrument'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal/instrumentation.rb:29:in `process_action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal/rescue.rb:17:in `process_action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/abstract_controller/base.rb:119:in `process'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/abstract_controller/rendering.rb:41:in `process'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal.rb:138:in `dispatch'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_controller/metal.rb:178:in `block in action'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/routing/route_set.rb:62:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/routing/route_set.rb:62:in `dispatch'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/routing/route_set.rb:27:in `call'
[GEM_ROOT]/gems/rack-mount-0.6.13/lib/rack/mount/route_set.rb:148:in `block in call'
[GEM_ROOT]/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:93:in `block in recognize'
[GEM_ROOT]/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:89:in `optimized_each'
[GEM_ROOT]/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:92:in `recognize'
[GEM_ROOT]/gems/rack-mount-0.6.13/lib/rack/mount/route_set.rb:139:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/routing/route_set.rb:492:in `call'
[GEM_ROOT]/gems/rakismet-1.0.1/lib/rakismet/middleware.rb:10:in `call'
[GEM_ROOT]/gems/haml-3.0.25/lib/sass/plugin/rack.rb:41:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/head.rb:14:in `call'
[GEM_ROOT]/gems/rack-1.2.1/lib/rack/methodoverride.rb:24:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/params_parser.rb:21:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/flash.rb:182:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/cookies.rb:302:in `call'
[GEM_ROOT]/gems/activerecord-3.0.4/lib/active_record/query_cache.rb:32:in `block in call'
[GEM_ROOT]/gems/activerecord-3.0.4/lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache'
[GEM_ROOT]/gems/activerecord-3.0.4/lib/active_record/query_cache.rb:12:in `cache'
[GEM_ROOT]/gems/activerecord-3.0.4/lib/active_record/query_cache.rb:31:in `call'
[GEM_ROOT]/gems/activerecord-3.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:354:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/callbacks.rb:46:in `block in call'
[GEM_ROOT]/gems/activesupport-3.0.4/lib/active_support/callbacks.rb:415:in `_run_call_callbacks'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/callbacks.rb:44:in `call'
[GEM_ROOT]/gems/rack-1.2.1/lib/rack/sendfile.rb:107:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
[GEM_ROOT]/gems/actionpack-3.0.4/lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
[GEM_ROOT]/gems/railties-3.0.4/lib/rails/rack/logger.rb:13:in `call'
[GEM_ROOT]/gems/rack-1.2.1/lib/rack/runtime.rb:17:in `call'
[GEM_ROOT]/gems/rack-1.2.1/lib/rack/lock.rb:11:in `block in call'
:
[GEM_ROOT]/gems/rack-1.2.1/lib/rack/lock.rb:11:in `call'
[GEM_ROOT]/gems/railties-3.0.4/lib/rails/application.rb:168:in `call'
[GEM_ROOT]/gems/railties-3.0.4/lib/rails/application.rb:77:in `method_missing'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/rack/request_handler.rb:96:in `process_request'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_request_handler.rb:513:in `accept_and_process_next_request'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_request_handler.rb:274:in `main_loop'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:205:in `start_request_handler'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:170:in `block in handle_spawn_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/utils.rb:479:in `safe_fork'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:165:in `handle_spawn_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:180:in `start'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:128:in `start'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:253:in `block (2 levels) in spawn_rack_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server_collection.rb:132:in `lookup_or_add'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:246:in `block in spawn_rack_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server_collection.rb:82:in `block in synchronize'
:
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:244:in `spawn_rack_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:137:in `spawn_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:275:in `handle_spawn_application'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
/home/monk/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/helper-scripts/passenger-spawn-server:99:in `
'(hi Josh!)
The readme says:
This means that if you are not storing the request variables, you must call spam? from within the controller action that handles comment submissions. That way the IP, user agent, and referer will belong to the person submitting the comment.
I chased user_ip
around the code in a loop and am too stupid to figure out how a model can have access to the request environment. Where does this happen?
I'm wondering if it's possible to deactivate Rakismet in certain Rails environments. When running the test suite or when there's no internet connection available, I would like Rakismet just to return "not spam" all the time.
I've already looked through the code, but couldn't find a satisfying solution? An option in the environment files (such as config.rakismet.perform = :test # or :live
) would be a nice a solution.
What do you think?
I noticed the readme makes reference to sending the permalink:
permalink : the permanent URL for the entry the comment belongs to
But then it's never used in the actual code.
Is it possible to turnoff rakismet in tests so that it wouldn't connect to akismet for real, and just return what I explicitly want?
The railtie require doesn't work pre rails 3. Blows up as follows:
ruby-1.9.2-p0 :004 > require 'rakismet'
MissingSourceFile: no such file to load -- rails
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
Is it possible to list the required values in the README
? I'm not a regular Akismet user, so it took a little bit of work and looking and the akismet_response
s to figure out what fields were needed. As far as I can tell, the following values need to be populated:
author
author_email
content
user_ip
user_agent
Just thinking of how to make the gem more approachable from a novice's standpoint.
Hi, first of all cool gem !
I have some doubts about how or where define akismet attributes when dealing with these 2 models:
class Conversation < ActiveRecord::Base
has_many :messages
accepts_nested_attributes_for :messages
end
class Message < ActiveRecord::Base
belongs_to :conversation
attr_accessor :body, ...
end
My idea is to call spam? before calling Conversation.save in my ConversationsController.
The problem is that I don't know how match asktmet "content" attribute with Message.body
Should I do something like:
class Conversation < ActiveRecord::Base
has_many :messages
accepts_nested_attributes_for :messages
include Rakismet::Model
rakismet_attrs :content => => proc { message.body } # ??????????
end
Thanks in advance.
Hi,
I have forced spam? = true
by using :author => "viagra-test-123"
. That's ok, I'm getting true
Is there a way to set/force other comments as true
?
I have tried in the console:
@comment = Comment.find(1)
As you know I'm storing user_ip, user_agent and referrer in my model :)
@comment.spam? # false
@comment.spam! # true
@comment.akismet_response # "false"
Why do I get "false" here ???!!!
@comment.spam? # true
Ok, I'm happy with this true
, but:
@comment = Comment.find(1)
@comment.spam? # false
Ouch! WHY? I had set it to true
before using spam!
...
Thanks in advance.
ps: using raskimet 0.4.2, rails 2.3.5, ruby 1.8.7
It seems like rakismet don't work now.
I submit author to 'viagra-test-123' and get nothing!
It seems akismet API was changed: http://akismet.com/development/api/#comment-check
Now we need comment_author
instead of author
et.c.
Would be possible to inherit rakismet config to subclasses?
class Comment < ActiveRecord::Base
rakismet_attrs :author => proc { user.full_name }
end
class DiscussionTopic < Comment
end
DiscussionTopic.akismet_attrs
=> nil
Workaround:
class DiscussionTopic < Comment
self.akismet_attrs = base_class.akismet_attrs.dup
end
Right now akismet as a a service supports unicode urls but this gem doesn't support unicode URLs. This is happening because ruby's URI parse supports only ASCII characters
example: blog_url: "https://www.example.com/हिंदीकामकररहेहैंयानहीं"
I'm getting uninitialized constant Contact::Rakismet
Any clues?
Message me if you need additional info.
When using Rails libraries without rails itself, the Rails
top level constant is defined but Rails.version
is not, so the check on this line: https://github.com/joshfrench/rakismet/blob/master/lib/rakismet.rb#L45 causes NoMethodError.
This occurred for me and I had to reopen the Rails module and manually define self.version as a temporary workaround. I was using ActionMailer and ActiveRecord but not the Rails gem itself.
Hi,
I am using Rakismet plugin in my Rails application to check a comment is spam or not.
I am using typepad api for that.
Rakismet::KEY = '8ef8ccb04d9c1f0049041c86371982a6'
Rakismet::URL = 'http://www.postonline.co.uk/'
Rakismet::HOST = 'api.antispam.typepad.com'
has_rakismet
:author => :user_name,
:author_url => :author_url,
:author_email => :email,
:comment_type => :status,
:content => :description,
:permalink => :permalink,
:user_ip => :ip_address,
:referrer => :referrer
I felt that i am doing mistake some where, since i always got the spam response ( @comment.spam? => 'false' ) as false, even if i submit @comment as spam ( @comment.spam! ),
So i tried to trace the rakismet plugin. I got some results while tracing.
def validate_key
validate_constants
akismet = URI.parse(verify_url)
_, valid = Net::HTTP.start(akismet.host) do |http|
data = "key=#{Rakismet::KEY}&blog=#{Rakismet::URL}"
http.post(akismet.path, data, Rakismet::HEADERS)
end
self.valid_key = (valid == 'valid')
end
verify_url => "http://api.antispam.typepad.com/1.1/verify-key"
data => "key=8ef8ccb04d9c1f0049041c86371982a6&blog=http://www.postonline.co.uk/"
Rakismet::HEADERS => {"Content-Type"=>"application/x-www-form-urlencoded", "User-Agent"=>"Rails/2.2.2 | Rakismet/0.3.5"}
_, result = http.post(akismet.path, data, Rakismet::HEADERS)
result => 'valid'
As per my configuration in initializer i can sure that my api key is valid, since validate_key method returns true. And i have got this key from typepad site.
If i write wrong key ( like Rakismet::KEY = 'bangalore is a great city' ) also i am getting the same positive response ( validate_key => true )
also,
@comment.akismet_response => always 'false'
@comment.spam! => "Feedback received."
@comment.spam!? => 'false'
I am using Rails 2.2.2 and Rakismet 0.3.5.
Where i am doing mistake?
Thanks in advance.
With Regards,
Manoj
Hello,
I'm using rakismet with some customized parameters.
has_rakismet :author => proc { user.dispname },
:author_email => proc { user.email },
:author_url => proc { user.website },
:comment_type => proc { 'comment' },
However when I'm like that, I get the following error from Akismet : "Missing required field: user_ip.".
But I have a user_ip field in my model, which is appropriately filled.
When I declare the following in my model :
has_rakismet :author => proc { user.dispname },
:author_email => proc { user.email },
:author_url => proc { user.website },
:comment_type => proc { 'comment' },
:user_ip => :user_ip,
:user_agent => :user_agent,
:referrer => :referrer
It works well.
So I guess when we customize some elements, Rakismet isn't able to take the other ones by itself.
I tried to send user_role parameter to Askimet, but it actually sends 'comment_user_role'.
rakismet_attrs :author => proc { user.full_name },
:author_email => proc { user.email },
:content => :body,
:user_ip => proc { user.current_sign_in_ip },
:user_role => 'administrator',
:comment_type => 'blog-post'
Even I set user_role as 'administrator', it returns true. This is because of https://github.com/joshfrench/rakismet/blob/master/lib/rakismet/model.rb#L17, which converts 'user_role' to 'comment_user_role'.
Most other clients send "comment" in the "comment_type" field for comments; rakismet sends "comment_type" instead. This isn't technically an error, but for consistency it would be nice to fix.
From http://akismet.com/development/api/:
comment_type
May be blank, comment, trackback, pingback, or a made up value like "registration".
Hi,
I read that you have to store optional request variables if you want to process your comments in a later stage.
It means that I have to save user_ip, user_agent and referrer in one of my models.
Thanks !
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.