61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
import streamlit as st
|
|
import pandas as pd
|
|
from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode
|
|
from lib.ai_marketing_tools.ai_backlinking import find_backlink_opportunities, compose_personalized_email
|
|
|
|
|
|
# Streamlit UI function
|
|
def backlinking_ui():
|
|
st.title("AI Backlinking Tool")
|
|
|
|
# Step 1: Get user inputs
|
|
keyword = st.text_input("Enter a keyword", value="technology")
|
|
|
|
# Step 2: Generate backlink opportunities
|
|
if st.button("Find Backlink Opportunities"):
|
|
if keyword:
|
|
backlink_opportunities = find_backlink_opportunities(keyword)
|
|
|
|
# Convert results to a DataFrame for display
|
|
df = pd.DataFrame(backlink_opportunities)
|
|
|
|
# Create a selectable table using st-aggrid
|
|
gb = GridOptionsBuilder.from_dataframe(df)
|
|
gb.configure_selection('multiple', use_checkbox=True, groupSelectsChildren=True)
|
|
gridOptions = gb.build()
|
|
|
|
grid_response = AgGrid(
|
|
df,
|
|
gridOptions=gridOptions,
|
|
update_mode=GridUpdateMode.SELECTION_CHANGED,
|
|
height=200,
|
|
width='100%'
|
|
)
|
|
|
|
selected_rows = grid_response['selected_rows']
|
|
|
|
if selected_rows:
|
|
st.write("Selected Opportunities:")
|
|
st.table(pd.DataFrame(selected_rows))
|
|
|
|
# Step 3: Option to generate personalized emails for selected opportunities
|
|
if st.button("Generate Emails for Selected Opportunities"):
|
|
user_proposal = {
|
|
"user_name": st.text_input("Your Name", value="John Doe"),
|
|
"user_email": st.text_input("Your Email", value="john@example.com")
|
|
}
|
|
|
|
emails = []
|
|
for selected in selected_rows:
|
|
insights = f"Insights based on content from {selected['url']}."
|
|
email = compose_personalized_email(selected, insights, user_proposal)
|
|
emails.append(email)
|
|
|
|
st.subheader("Generated Emails:")
|
|
for email in emails:
|
|
st.write(email)
|
|
st.markdown("---")
|
|
|
|
else:
|
|
st.error("Please enter a keyword.")
|