5

MailChimpコントローラーで次のコードを使用して、簡単なニュースレターデータを送信しています。送信すると、「メソッドはこのサーバーによってエクスポートされません-90」というエラーが表示されます。以下にコントローラーコードを添付しました。私はこのコントローラーを簡単なニュースレターの申し込みフォームに使用しています。(名前、メール)

class MailchimpController < ApplicationController

  require "net/http"
  require "uri"

  def subscribe  
    if request.post?
      mailchimp = {}
      mailchimp['apikey']  =  'f72328d1de9cc76092casdfsd425e467b6641-us2'
      mailchimp['id']  =  '8037342dd1874'
      mailchimp['email_address']  =  "email@gmail.com"
      mailchimp['merge_vars[FNAME]']  =  "FirstName"
      mailchimp['output']  =  'json'

      uri = URI.parse("http://us2.api.mailchimp.com/1.3/?method=listSubscribe")
      response = Net::HTTP.post_form(uri, mailchimp)    
      mailchimp = ActiveSupport::JSON.decode(response.body)

      if mailchimp['error']
        render :text =>    mailchimp['error'] + "code:" + mailchimp['code'].to_s  
      elsif mailchimp == 'true'
        render :text => 'ok' 
      else
        render :text => 'error'
      end
    end
   end    

end
4

3 に答える 3

4

Hominidの宝石を強くお勧めします:https ://github.com/tatemae-consultancy/hominid

于 2011-03-09T05:50:19.913 に答える
2

問題は、Net::HTTP.post_formが「メソッド」GETパラメーターを渡していないことです。大きなルビーユーザーではないので、Net :: HTTPでそれを行う実際の適切な方法が何であるかはわかりませんが、これは機能します。

require "net/http"
data="apikey=blahblahblah"
response = nil
Net::HTTP.start('us2.api.mailchimp.com', 80) {|http|
  response = http.post('/1.3/?method=lists', data)
}
p response.body

これは(簡単にするために)lists()メソッドであり、単にハッシュを提供するのではなく、完全なPOSTパラメーターを構築する(そして値をurlencodeする)必要があります。

ルビーですでに入手可能な多くの宝石を見てみましたか?

http://apidocs.mailchimp.com/downloads/#ruby

より大きな問題、そして私がこれに返信する主な理由は、APIキーが十分に難読化されていないことです。確かに私は彼らと一緒に仕事をすることに慣れていますが、それをすぐに推測することができました。アカウントでそのキーをすぐに無効にしてから、投稿を編集して、正しいキーに近いものではなく、実際に完全に偽のデータを取得することをお勧めします。一方、リストIDはまったく関係ありません。

于 2011-03-08T16:53:49.543 に答える
1

Net :: HTTPに渡す前にハッシュをjsonに変換すると、ハッシュを使用できるようになります。結合されたコードは次のようになります。

  mailchimp = {}
  mailchimp['apikey']             =  'APIKEYAPIKEYAPIKEYAPIKEY'
  mailchimp['id']                 =  '8037342dd1874'
  mailchimp['email_address']      =  "email@gmail.com"
  mailchimp['merge_vars[FNAME]']  =  "FirstName"
  mailchimp['output']             =  'json'

  response = nil
  Net::HTTP.start('us2.api.mailchimp.com', 80) {|http|
    response = http.post('/1.3/?method=listSubscribe', mailchimp.to_json)
  }
于 2011-03-09T05:49:02.103 に答える