Mercurial Hosting > linkmystyle
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:8f4df159f06b |
---|---|
1 local Luan = require "luan:Luan.luan" | |
2 local error = Luan.error | |
3 local ipairs = Luan.ipairs or error() | |
4 local to_string = Luan.to_string or error() | |
5 local stringify = Luan.stringify or error() | |
6 local String = require "luan:String.luan" | |
7 local trim = String.trim or error() | |
8 local to_lower = String.lower or error() | |
9 local digest_message = String.digest_message or error() | |
10 local Time = require "luan:Time.luan" | |
11 local time_now = Time.now or error() | |
12 local Number = require "luan:Number.luan" | |
13 local long = Number.long or error() | |
14 local Parsers = require "luan:Parsers.luan" | |
15 local json_string = Parsers.json_string or error() | |
16 local json_parse = Parsers.json_parse or error() | |
17 local Io = require "luan:Io.luan" | |
18 local uri = Io.uri or error() | |
19 local Config = require "site:/private/Config.luan" | |
20 local access_token = Config.facebook.access_token or error() | |
21 local Shared = require "site:/lib/Shared.luan" | |
22 local is_test = not Shared.is_production | |
23 local Logging = require "luan:logging/Logging.luan" | |
24 local logger = Logging.logger "Facebook" | |
25 | |
26 | |
27 local pixel_id = "667025338202310" | |
28 local url = "https://graph.facebook.com/v17.0/"..pixel_id.."/events" | |
29 | |
30 | |
31 local Facebook = {} | |
32 | |
33 local function call(events) | |
34 local user_data = events[1].user_data -- assume they are all the same | |
35 local em = user_data.em | |
36 if em ~= nil then | |
37 em = to_lower(trim(em)) | |
38 user_data.em = digest_message("SHA-256",em) | |
39 end | |
40 local external_id = user_data.external_id | |
41 if external_id ~= nil then | |
42 external_id = to_string(external_id) | |
43 if is_test then | |
44 external_id = "test_"..external_id | |
45 end | |
46 user_data.external_id = digest_message("SHA-256",external_id) | |
47 end | |
48 if is_test then | |
49 for _, event in ipairs(events) do | |
50 event.event_name = "test_"..event.event_name | |
51 end | |
52 end | |
53 logger.info(json_string(events)) | |
54 local parameters = { | |
55 access_token = access_token | |
56 data = json_string(events) | |
57 } | |
58 if is_test then | |
59 parameters.test_event_code = "TEST" | |
60 end | |
61 local options = { | |
62 method = "POST" | |
63 parameters = parameters | |
64 } | |
65 return uri(url,options).read_text() | |
66 end | |
67 Facebook.call = call | |
68 | |
69 function Facebook.track_visit(user) | |
70 local user_data = { | |
71 em = user.email or error() | |
72 external_id = user.id or error() | |
73 } | |
74 local event_time = long( time_now() // 1000 ) | |
75 local events = { | |
76 { | |
77 event_name = "Contact" | |
78 event_time = event_time | |
79 user_data = user_data | |
80 action_source = "other" | |
81 } | |
82 { | |
83 event_name = "Purchase" | |
84 event_time = event_time | |
85 user_data = user_data | |
86 action_source = "other" | |
87 custom_data = { | |
88 value = 1 | |
89 currency = "USD" | |
90 } | |
91 } | |
92 } | |
93 try | |
94 local result = call(events) | |
95 logger.info(result) | |
96 catch e | |
97 logger.error(e.."\n"..e.response_content.."\nevents = "..stringify(events)) | |
98 end | |
99 end | |
100 | |
101 return Facebook |