Jeangg's picture
Upload 3 files
0c55ffe verified
import gradio as gr
import requests
import json
import line_fucntion as LINE
import pandas as pd
LINE_AUDIENCE_UPLOAD = "https://api.line.me/v2/bot/audienceGroup/upload"
LINE_NARROWCAST = "https://api.line.me/v2/bot/message/narrowcast"
LINE_REQUEST_DATA = "https://api.line.me/v2/bot/insight/message/event?requestId="
LINE_AUDIENCE_DATA = "https://api.line.me/v2/bot/audienceGroup/"
LINE_DELETE_AUDIENCE = "https://api.line.me/v2/bot/audienceGroup"
LINE_PUSH = "https://api.line.me/v2/bot/message/push"
def push_manneger(line_access_token, file_option, list_uid, line_uid_file, option, image_address, image_alt, image_width, image_height, text_message=None, endpoint_url=None, dynamic_parameter=None):
if file_option == "Text":
list_uid_to_push = list_uid.split("\n")
else:
if line_uid_file is None:
return "Error: No LINE UID file uploaded."
else:
file_path = line_uid_file.name
df = pd.read_csv(file_path)
list_uid_to_push = df['line_uid'].unique()
if list_uid_to_push:
headers = LINE.line_header(line_access_token)
amount_to_push = len(list_uid_to_push)
push_result = 0
if "?" in endpoint_url:
final_url = endpoint_url + "&"
else:
final_url = endpoint_url + "?"
if option == "Single Image map":
for uid in list_uid_to_push:
final_url_with_uid = final_url + f"{dynamic_parameter}=" + str(uid)
image_object = LINE.image_map_single(altText=image_alt,
imageLink=image_address,
ladingpage=final_url_with_uid,
width=image_width,
height=image_height
)
push_message = LINE.message_push(to=uid, messageObject=[image_object])
res = requests.post(LINE_PUSH, headers=headers, json=push_message)
if res.status_code == 200:
push_result += 1
message_result = f'''Total LINE UID: {amount_to_push}\nTotal push success: {push_result}'''
return message_result
elif option == "Image map with text":
for uid in list_uid_to_push:
final_url_with_uid = final_url + f"{dynamic_parameter}=" + str(uid)
image_object = LINE.image_map_single(altText=image_alt,
imageLink=image_address,
ladingpage=final_url_with_uid,
width=image_width,
height=image_height
)
text_object = LINE.single_message(text_message)
push_message = LINE.message_push(to=uid, messageObject=[image_object, text_object])
res = requests.post(LINE_PUSH, headers=headers, json=push_message)
if res.status_code == 200:
push_result += 1
message_result = f'''Total LINE UID: {amount_to_push}\nTotal push success: {push_result}'''
return message_result
elif option == "Text with Image map":
for uid in list_uid_to_push:
final_url_with_uid = final_url + f"{dynamic_parameter}=" + str(uid)
image_object = LINE.image_map_single(altText=image_alt,
imageLink=image_address,
ladingpage=final_url_with_uid,
width=image_width,
height=image_height
)
text_object = LINE.single_message(text_message)
push_message = LINE.message_push(to=uid, messageObject=[text_object, image_object])
res = requests.post(LINE_PUSH, headers=headers, json=push_message)
if res.status_code == 200:
push_result += 1
message_result = f'''Total LINE UID: {amount_to_push}\nTotal push success: {push_result}'''
return message_result
else:
return '''Out of condition, Please select message object in "Single Image", "Image with text", "Text with Image"'''
def reset_inputs():
return "", None, "Single Image", "", "", "" # Reset inputs to default values
# Gradio UI Layout
def main():
with gr.Blocks() as ui:
# Set page title and favicon using HTML
gr.HTML("""
<head>
<title>LINE Audience Manager</title>
<link rel="icon" href="https://media.licdn.com/dms/image/v2/C560BAQE6RcoYoG2AKw/company-logo_200_200/company-logo_200_200/0/1631385097016?e=1736380800&v=beta&t=KjZtErojYcSYLGCH1OskFpEAUMXsfqSMTbnmbRdETXU" type="image/x-icon">
</head>
""")
gr.Markdown("# YDM RDA: LINE Push message dynamic URL link")
# User input fields
line_access_token = gr.Textbox(label="LINE Channel Access Token")
audience_main_id = gr.Textbox(label="Main LINE Audience")
option = gr.Radio(label="Select Option", choices=["Single message","Single Image map", "Image map with text", "Text with Image map"])
gender = gr.CheckboxGroup(["Male", "Female"], label="Gender")
age = gr.Slider(15, 70, value=5, label='Age', info="Choose age range")
system = gr.CheckboxGroup(["ios", "Android"], info="Select Mobile system", label='Mobile System')
region = gr.CheckboxGroup(['Bangkok', 'Pattaya', 'Northern', 'Central', 'Southern', 'Eastern', 'NorthEastern', 'Western'], label="Thailand Region", info="Select Thailand Region")
friend_duration = gr.Slider(30, 180, label="Friend Duration", value=30, info="Choose friend duration")
# Message Conditional Inputs
image_address = gr.Textbox(label="Your Image address", visible=False)
image_alt = gr.Textbox(label="Your Image ALT", visible=False)
image_width= gr.Textbox(label="Your Image Width", visible=False)
image_height= gr.Textbox(label="Your Image Height", visible=False)
text_message = gr.Textbox(label="Your Text message", visible=False)
endpoint_url = gr.Textbox(label="Your Endpint URL", visible=False)
dynamic_parameter = gr.Textbox(label="Your dynamic LINE UID parameter name", visible=False)
def toggle_inputs_file(option):
if option == "Text":
return (
gr.update(visible=True), gr.update(visible=False)
)
else:
return (
gr.update(visible=False), gr.update(visible=True)
)
def toggle_inputs(option):
if option == "Single Image map":
# Show only image-related fields
return (
gr.update(visible=True), gr.update(visible=True), gr.update(visible=True),
gr.update(visible=True), gr.update(visible=False), gr.update(visible=True),
gr.update(visible=True)
)
elif option == "Image map with text":
# Show all fields
return (
gr.update(visible=True), gr.update(visible=True), gr.update(visible=True),
gr.update(visible=True), gr.update(visible=True), gr.update(visible=True),
gr.update(visible=True)
)
elif option == "Text with Image map":
# Show only text-related fields
return (
gr.update(visible=True), gr.update(visible=True), gr.update(visible=True),
gr.update(visible=True), gr.update(visible=True), gr.update(visible=True),
gr.update(visible=True)
)
# file_option.change(fn=toggle_inputs_file, inputs=file_option, outputs=[list_uid, line_uid_file])
# option.change(fn=toggle_inputs, inputs=option, outputs=[image_address, image_alt, image_width, image_height, text_message, endpoint_url, dynamic_parameter])
# # Submit button and output
# submit_btn = gr.Button("Submit")
# reset_btn = gr.Button("Reset")
# output = gr.Textbox(label="Result", interactive=False)
# submit_btn.click(fn=push_manneger,
# inputs=[line_access_token, file_option, list_uid, line_uid_file, option, image_address, image_alt, image_width, image_height, text_message, endpoint_url, dynamic_parameter],
# outputs=output)
# # Connect the reset function to Gradio UI
# reset_btn.click(fn=reset_inputs,
# inputs=[],
# outputs=[line_access_token, file_option, list_uid,line_uid_file, option, image_address, image_alt, image_width, image_height, text_message, endpoint_url, dynamic_parameter, output])
ui.launch(share=True)
if __name__ == "__main__":
main()