Jeangg's picture
test dynamic
de93fff
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:
gr.Markdown("# Happy LINE Service: LINE Personlaized boardcast")
# User input fields
line_access_token = gr.Textbox(label="LINE Channel Access Token")
audience_main_id = gr.Textbox(label="Main LINE Audience ID")
with gr.Row():
age_min = gr.Dropdown([15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70],label="อายุขั้นต่ำ: ปี")
age_max= gr.Dropdown([15 ,20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70],label="อายุสูงไม่เกิน: ปี")
# age = gr.Slider(minimum=15, maximum=70, step=15,label='Age', info="Choose age range", interactive=True)
with gr.Row():
friend_duration_min = gr.Dropdown([7, 30, 90, 180, 365],label="ระยะเวลาที่เพิ่มเพื่อนขั้นต่ำ: วัน")
friend_duration_max = gr.Dropdown([7, 30, 90, 180, 365],label="ระยะเวลาที่เพิ่มเพื่อนไม่เกิน: วัน")
# friend_duration = gr.Slider(minimum=30, maximum=180, step=30, label="Friend Duration", info="Choose friend duration", randomize=True)
with gr.Row():
gender = gr.CheckboxGroup(["Male", "Female"], label="เพศ")
system = gr.CheckboxGroup(["ios", "Android"], label='ระบบปฏิบัติการ')
region = gr.CheckboxGroup(['Bangkok', 'Pattaya', 'Northern', 'Central', 'Southern', 'Eastern', 'NorthEastern', 'Western'], label="ภูมิภาค")
with gr.Row():
option = gr.Radio(label="Select Option", choices=["ข้อความแบบเดี่ยว","รูปภาพแบบเดี่ยว", "รูปภาพ ตามด้วยข้อความ", "ข้อความ ตามด้วยรูปภาพ"])
# 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)
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 == "ข้อความแบบเดี่ยว":
return (
gr.update(visible=False), gr.update(visible=False), gr.update(visible=False),
gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
)
elif option == "รูปภาพแบบเดี่ยว":
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)
)
elif option == "รูปภาพ ตามด้วยข้อความ":
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)
)
elif option == "ข้อความ ตามด้วยรูปภาพ":
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)
)
option.change(fn=toggle_inputs, inputs=option, outputs=[image_address, image_alt, image_width, image_height, text_message, endpoint_url])
# # 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()
if __name__ == "__main__":
main()