import gradio as gr import requests from bs4 import BeautifulSoup from huggingface_hub import HfApi,create_repo,upload_file,get_full_repo_name import re import os token_self=os.environ.get("HF_TOKEN") default_repo_name="collection" ''' from selenium import webdriver from bs4 import BeautifulSoup url = 'https://www.wikipedia.org/' driver = webdriver.Chrome() driver.get(url) html_page = driver.page_source soup = BeautifulSoup(html_page, 'html.parser') title = soup.title.string print(title) driver.quit()''' def search_fn(query,count): if count>40: count = 40 page = requests.get(f"https://www.google.com/search?q={query}&num={count}") soup = BeautifulSoup(page.content) #links = soup.findAll("a") links = soup.findAll("a") file = open("myfile.txt", "w") for link in soup.find_all("a",href=re.compile("(?<=/url\?q=)(htt.*://.*)")): out = (re.split(":(?=http)",link["href"].replace("/url?q=","").split("&sa",1)[0])) out = out[0] rr=requests.get(f"{out}") x_opt = (dict(rr.headers).get("x-frame-options")) if x_opt == None: frame_l=f'
{out}
' file.writelines(frame_l) else: pass #print(file1.read()) print (out) print(dict(rr.headers).get("x-frame-options")) file.close() with open("myfile.txt", "r") as file1: html_out = file1.read() out = format_t(html_out) return out def details_fn(query): link_list=[] page = requests.get(f"{query}") #links = soup.findAll("a") soup = BeautifulSoup(page.content, 'html.parser') try: title = soup.title.string except Exception as e: title = query try: description = soup.find('meta', attrs={'name':'description'}) description = description['content'] except Exception as e: description = title out = f"""

{title}


{description}
""" try: image_out="""
""" images = soup.findAll('img') if query.startswith("https://"): q_beg="https://" if query.startswith("http://"): q_beg="http://" query_src=query.split("//",1)[1] if "/" in query_src: query_src=query_src.split("/",1)[0] query_comp=f'{q_beg}{query_src}' for i,img in enumerate(images): if not img['src'].startswith("data:"): print(query_comp) imga=img['src'] print(imga) if imga.startswith("/"): imga = f'{query_comp}{imga}' print(imga) im_id = f'img_{i}' link_list.append(imga) image_out += f"""
""" #print (img['src']) format_out = f"""{image_out}
""" except Exception as e: format_out = "None" print (e) return out,format_out,title,description def first(): out = '''

Loading''' return out def test(out): return format_t(f'
') def test_single(out): return format_t(f'
') def format_t(inp): style = ''' .put-on-top{ align-contents:center; border-style: solid; border-width: 3px; border-radius: 5px; background: none; padding: 0.5em; margin-top:1em; margin-bottom:0.3em; } .grid-mee { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-evenly; align-items: stretch; align-content: space-evenly; } .container-mee { position: relative; overflow: hidden; width: 48%; height: 60em; margin-top:1em; } .container-single { position: relative; overflow: hidden; width: 100%; height: 60em; margin-top:1em; } .responsive-iframe-mee { position: relative; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100%; } ''' out = f'''
{inp}
''' return out def build_space(file_content,file_name,repo_name=None,token=None): if repo_name==None or repo_name=="": model_id = default_repo_name else: model_id = repo_name if token==None or token=="": token = token_self else: token = token pass api = HfApi(token=token) repo_name = get_full_repo_name(model_id=model_id, token=token) try: repo_url = api.create_repo( repo_id=model_id, repo_type="space", space_sdk="static", exist_ok=True, private=False, ) print(f"""Space Built at {repo_name}""") except Exception as e: return gr.HTML(f"""{str(e)}""") try: api_url = f'https://huggingface.co/api/spaces/{model_id}' t_link3= f"https://{repo_name.replace('/','-').replace('_','-')}.static.hf.space/{file_name}-masto.html" t_link2= f"https://{repo_name.replace('/','-').replace('_','-')}.static.hf.space/{file_name}-gab.html" t_link = f"https://{repo_name.replace('/','-').replace('_','-')}.static.hf.space/{file_name}-main.html" ########## norm with open("main.html", "w") as f: f.write(file_content) api.upload_file( path_or_fileobj="main.html", path_in_repo=f"{file_name}-main.html", repo_id=repo_name, token=token, repo_type="space", ) ######## gab api.upload_file( path_or_fileobj="main.html", path_in_repo=f"{file_name}-gab.html", repo_id=repo_name, token=token, repo_type="space", ) ######## masto api.upload_file( path_or_fileobj="main.html", path_in_repo=f"{file_name}-masto.html", repo_id=repo_name, token=token, repo_type="space", ) return gr.HTML(f'''
Your Interactive Twitter Card Embed Link is:
{t_link}
Your Interactive Mastodon Card Embed Link is:
{t_link3}
Your Interactive Gab Card Embed Link is:
{t_link2}

''') except Exception as e: return gr.HTML(f"""{str(e)}""") load_js = """ func = function(a,b) { console.log(a); console.log(b); var vv = document.getElementById("txt_box"); vv.innerHTML=a; var ii = document.getElementById("im_up"); ii.src=a; } """ link_js=""" function() { const link_url = document.getElementById('txt_box').innerHTML; console.log(link_url); return [link_url]; } """ def preview_img(im): print (im) if not im.startswith("https:"): im = f'https:{im}' out = f"""
""" print(out) return out,im def prepare_card(url,title,description,img): filename=url if "//" in filename: filename=url.split("//",1)[1] if "?" in filename: if len(filename) > 100: filename=filename.split("?",1)[0] else: filename=filename.replace("?","-").replace("=","-") filename = filename.replace(".","-").replace("/","-").replace("?","-").replace("=","-") #filename = f'{filename}.html' with open("template.html", "r") as f: app = f.read() app = app.replace("$space", url) app = app.replace("$title", title) app = app.replace("$description", description) app = app.replace("$image", img) app = app.replace("$redirect", url) #with open("ai.html", "w") as f: # f.write(app) #files.append("ai.html") return(app,filename) with gr.Blocks() as app: gr.HTML("""

Interactive Social Media Card Maker

""") gr.HTML("""

Step 1: Enter a URL with Iframe capability

""") with gr.Row(): search_box=gr.Textbox(label = "Enter a search topic here to find URL's",scale=2) num_return=gr.Number(label= "Number of URL's to return", value=20, scale=1) search_btn=gr.Button(value= "Search", scale=1) with gr.Row(): input = gr.Textbox(label = "URL") btn = gr.Button("Preview") details = gr.HTML("""""") with gr.Accordion("Iframe"): output = gr.HTML("""""") gr.HTML("""

Step 2: Select the Image to use on the Card

""") with gr.Accordion("Images"): images = gr.HTML("""""") gr.HTML("""

Step 3: Build the Card

""") with gr.Row() as im_row: with gr.Column(): title=gr.Textbox(label="Title") description=gr.Textbox(label="Description") link_list=gr.Textbox(label="Image URL") with gr.Accordion("Image Preview"): img_card=gr.HTML("""""") #img_card=gr.Image() with gr.Column(): grab_im_url_btn=gr.Button("Load Image URL") preview_image_btn=gr.Button("Preview Image") prepare_btn=gr.Button("Prepare Card") bld_btn=gr.Button("Build Card") links_html=gr.HTML() filename_box = gr.Textbox(label="File Name") prepared_html = gr.Textbox(max_lines=50) #preview_html = gr.HTML("""""") app.load(None,None,link_list,js=load_js) app.load(None,None,link_list,js=link_js) grab_im_url_btn.click(None,None,[link_list],js=link_js) preview_image_btn.click(preview_img,link_list,[img_card,link_list]) prepare_btn.click(prepare_card,[input,title,description,link_list],[prepared_html,filename_box]) #images.change(update_im,None,link_list,trigger_mode="multiple",js=link_js) search_btn.click(search_fn,[search_box,num_return],output) btn.click(first,None,output).then(test_single,input,output).then(details_fn,input,[details,images,title,description]) bld_btn.click(build_space,[prepared_html,filename_box],links_html) app.launch()