require 'rubygems' require 'active_record' require 'protected_attributes' require 'shopify_api' require 'yaml' require 'mysql2' SHOPIFY_API_KEY = 'my-key' # To get an API Key, go to Apps > Private Apps SHOPIFY_PASSWORD = 'my-pass' STORE_NAME = 'my-store' # As in my-store.myshopify.com SENDY_LIST_ID = 4 ## CHANGE ME! # This has to be the send list ID from the database, that you can grab by going to the sendy list page: # http://my-sendy-install/subscribers?i=1&l=4 for SENDY_LIST_ID = 4 SENDY_USER_ID = 1 # You probably don't want to change this dbconfig = YAML.load(File.open('sendy_db.yml')) ActiveRecord::Base.establish_connection(dbconfig) shop_url = "https://#{SHOPIFY_API_KEY}:#{SHOPIFY_PASSWORD}@#{STORE_NAME}.myshopify.com/admin" ShopifyAPI::Base.site = shop_url class Subscriber < ActiveRecord::Base attr_accessible :name, :email, :join_date, :timestamp, :list, :unsubscribed, :userID, :custom_fields end ShopifyAPI::Customer.all.each do |customer| ## Unfortunately they don't support find_each name = "#{customer.first_name} #{customer.last_name}" custom_fields = "#{customer.first_name}"\ "%s%#{customer.last_name}"\ "%s%#{customer.orders_count}"\ "%s%#{customer.total_spent}"\ "%s%#{customer.last_order_name}"\ "%s%#{customer.default_address? ? customer.default_address.country : ''}" ## The order of the custom fields has to be the same than the order in which you created them ## Make it an empty string if you don't have any subscriber = Subscriber.find_or_initialize_by(email: customer.email) ## If the user was resubscribed/unsubscribed in Sendy, we keep Shopify informed. if subscriber.timestamp? && subscriber.timestamp > DateTime.parse(customer.updated_at).to_i customer.accepts_marketing = (subscriber.unsubscribed == 0) customer.save end subscriber.update name: name, userID: SENDY_USER_ID, custom_fields: custom_fields, list: SENDY_LIST_ID, unsubscribed: customer.accepts_marketing ? 0 : 1, join_date: DateTime.parse(customer.created_at), timestamp: DateTime.parse(customer.updated_at) end