Mercurial Hosting > linkmystyle
view src/lib/Facebook.luan @ 0:8f4df159f06b
start public repo
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 11 Jul 2025 20:57:49 -0600 |
parents | |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local to_string = Luan.to_string or error() local stringify = Luan.stringify or error() local String = require "luan:String.luan" local trim = String.trim or error() local to_lower = String.lower or error() local digest_message = String.digest_message or error() local Time = require "luan:Time.luan" local time_now = Time.now or error() local Number = require "luan:Number.luan" local long = Number.long or error() local Parsers = require "luan:Parsers.luan" local json_string = Parsers.json_string or error() local json_parse = Parsers.json_parse or error() local Io = require "luan:Io.luan" local uri = Io.uri or error() local Config = require "site:/private/Config.luan" local access_token = Config.facebook.access_token or error() local Shared = require "site:/lib/Shared.luan" local is_test = not Shared.is_production local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Facebook" local pixel_id = "667025338202310" local url = "https://graph.facebook.com/v17.0/"..pixel_id.."/events" local Facebook = {} local function call(events) local user_data = events[1].user_data -- assume they are all the same local em = user_data.em if em ~= nil then em = to_lower(trim(em)) user_data.em = digest_message("SHA-256",em) end local external_id = user_data.external_id if external_id ~= nil then external_id = to_string(external_id) if is_test then external_id = "test_"..external_id end user_data.external_id = digest_message("SHA-256",external_id) end if is_test then for _, event in ipairs(events) do event.event_name = "test_"..event.event_name end end logger.info(json_string(events)) local parameters = { access_token = access_token data = json_string(events) } if is_test then parameters.test_event_code = "TEST" end local options = { method = "POST" parameters = parameters } return uri(url,options).read_text() end Facebook.call = call function Facebook.track_visit(user) local user_data = { em = user.email or error() external_id = user.id or error() } local event_time = long( time_now() // 1000 ) local events = { { event_name = "Contact" event_time = event_time user_data = user_data action_source = "other" } { event_name = "Purchase" event_time = event_time user_data = user_data action_source = "other" custom_data = { value = 1 currency = "USD" } } } try local result = call(events) logger.info(result) catch e logger.error(e.."\n"..e.response_content.."\nevents = "..stringify(events)) end end return Facebook