Mercurial Hosting > linkmystyle
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/Facebook.luan Fri Jul 11 20:57:49 2025 -0600 @@ -0,0 +1,101 @@ +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