social_lead.rb 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. class SocialLead < ActiveRecord::Base
  2. validates_uniqueness_of :profile_url, scope: :user_id
  3. belongs_to :website #, :foreign_key => :domain, :primary_key => :domain
  4. belongs_to :user
  5. alias_attribute :display_name, :username
  6. alias_attribute :location, :state
  7. scope :by_user, lambda {|user| where(:user_id => user) }
  8. scope :by_domain, lambda {|domain| where(:domain => domain) }
  9. scope :is_facebook, lambda { where(:social_network => "facebook")}
  10. scope :is_pinterest, lambda { where(:social_network => "pinterest")}
  11. scope :is_twitter, lambda { where(:social_network => "twitter")}
  12. scope :is_linkedin, lambda { where(:social_network => "linkedin")}
  13. scope :is_instagram, lambda { where(:social_network => "instagram")}
  14. scope :is_pinterest, lambda { where(:social_network => "pinterest")}
  15. scope :is_google, lambda { where(:social_network => "google-plus")}
  16. scope :is_okcupid, lambda { where(:social_network => "okcupid")}
  17. scope :is_yelp, lambda { where(:social_network => "yelp")}
  18. scope :is_github, lambda { where(:social_network => "github")}
  19. scope :by_user_from_facebook, lambda {|user| where(:user_id => user, :social_network => "facebook") }
  20. scope :by_user_from_twitter, lambda {|user| where(:user_id => user, :social_network => "twitter") }
  21. scope :by_user_from_pinterest, lambda {|user| where(:user_id => user, :social_network => "pinterest") }
  22. scope :by_user_from_github, lambda {|user| where(:user_id => user, :social_network => "github") }
  23. scope :by_user_from_facebook, lambda {|user| where(:user_id => user, :social_network => "facebook") }
  24. scope :from_state, lambda {|state| where(:state => state) }
  25. scope :from_country, lambda {|country| where(:country => country) }
  26. scope :from_network, lambda {|network| where(:social_network => network) }
  27. scope :by_user_from_network, lambda {|user, network| where(:user_id => user, :social_network => network) }
  28. searchkick callbacks: :async # , word_start: [:username, :domain], suggest: [:username] #, wordnet: true
  29. # after_create :get_page_text
  30. after_create :linkedin_scraper
  31. def self.okcupid
  32. file = File.open("/home/ubuntu/users.txt", "rb")
  33. file.each_line do |line|
  34. social = SocialLead.new(:username => line,
  35. :profile_url => "https://2-instant.okcupid.com/profile/#{line}",
  36. :source_url => "https://2-instant.okcupid.com/profile/#{line}",
  37. :social_network => "okcupid", :user_id => 1)
  38. if social.save
  39. puts social.id
  40. ExtractWorker.perform_async("SocialLead", social.id)
  41. end
  42. end
  43. end
  44. def scrape_okc(usernames=[], user_id=1, filename="/home/ubuntu/users.txt")
  45. unless filename.blank?
  46. file = File.open(filename, "rb")
  47. file.each_line do |line|
  48. usernames << line
  49. end
  50. end
  51. usernames.each do |username|
  52. profile = SocialLead.new(:user_id => user_id, :social_network => "okcupid",
  53. :username=> username,
  54. :profile_url => "https://2-instant.okcupid.com/profile/#{username}",
  55. :source_url => "https://2-instant.okcupid.com/profile/#{username}")
  56. if profile.save
  57. ExtractWorker.perform_async("SocialLead", profile.id)
  58. end
  59. end
  60. end
  61. def display_name
  62. "#{self.social_network}: #{self.username}"
  63. end
  64. def get_page_text
  65. ExtractWorker.perform_async("SocialLead", self.id)
  66. end
  67. def tags
  68. self.keywords.delete("[").delete("]").delete('"')
  69. end
  70. def icon
  71. "hashtag"
  72. end
  73. def match_type
  74. "social media profile"
  75. end
  76. def event_name
  77. ["discovered on ", self.social_network].join
  78. end
  79. def ux_color
  80. "purple"
  81. end
  82. def linkedin_scraper
  83. if self.social_network == "linkedin" and Rails.env.production?
  84. LinkedinWorker.perform_async(self.id)
  85. end
  86. end
  87. def fa_icon
  88. self.social_network
  89. end
  90. def index_path
  91. "/social_leads"
  92. end
  93. def username
  94. self.profile_url.split("/").last.downcase
  95. end
  96. def score
  97. missing = self.attributes.values.select(&:nil?).count
  98. total = self.attributes.count
  99. (((total.to_f - missing.to_f) / total.to_f) * 100).round(1)
  100. end
  101. def color
  102. "purple"
  103. end
  104. def self.to_csv(options = {})
  105. csv_string = CSV.generate(options) do |csv|
  106. csv << ["Username", "Social Network", "Tags", "Source", "Date"]
  107. all.each do |record|
  108. csv << [record.username, record.social_network, record.keywords, record.domain, record.created_at.to_date]
  109. end
  110. end
  111. csv_string
  112. end
  113. end