New: AI SEO tools, Rich snippet, AI product description
This commit is contained in:
115
lib/ai_seo_tools/twitter_opengraph_generator.py
Normal file
115
lib/ai_seo_tools/twitter_opengraph_generator.py
Normal file
@@ -0,0 +1,115 @@
|
||||
import streamlit as st
|
||||
import openai
|
||||
from bs4 import BeautifulSoup
|
||||
import requests
|
||||
import os
|
||||
|
||||
# Set up OpenAI API key
|
||||
openai.api_key = os.getenv('OPENAI_API_KEY') # Assuming you have it in a .env file
|
||||
|
||||
# Placeholder function for web scraping the URL (to be replaced with your mechanism)
|
||||
def scrape_webpage(url):
|
||||
try:
|
||||
response = requests.get(url)
|
||||
response.raise_for_status() # Raise an exception for bad status codes
|
||||
soup = BeautifulSoup(response.content, 'html.parser')
|
||||
|
||||
# Extract the title
|
||||
title = soup.find('title').text.strip() if soup.find('title') else None
|
||||
|
||||
# Extract the description
|
||||
description = soup.find('meta', attrs={'name': 'description'})['content'] if soup.find('meta', attrs={'name': 'description'}) else None
|
||||
|
||||
# Extract the image URL
|
||||
image_url = soup.find('meta', attrs={'property': 'og:image'})['content'] if soup.find('meta', attrs={'property': 'og:image'}) else None
|
||||
|
||||
return title, description, image_url
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
st.error(f"An error occurred while scraping the webpage: {e}")
|
||||
return None, None, None
|
||||
|
||||
# Function to generate OpenGraph meta tags
|
||||
def generate_opengraph_meta_tags(url, html_content=None, title=None, description=None, image_url=None):
|
||||
ai_prompt = f"""
|
||||
Generate OpenGraph meta tags for a Twitter Card for the following webpage: {url}
|
||||
|
||||
Here is the HTML content of the page:
|
||||
```html
|
||||
{html_content}
|
||||
```
|
||||
|
||||
Optional Customizations:
|
||||
* Title: {title if title else "Infer from the page content"}
|
||||
* Description: {description if description else "Infer from the page content"}
|
||||
* Image URL: {image_url if image_url else "Infer from the page content"}
|
||||
|
||||
Best practices:
|
||||
- Title: Should be concise and informative.
|
||||
- Description: Provide a brief summary of the content.
|
||||
- Image URL: Use a high-quality image.
|
||||
- URL: Ensure the URL is correct.
|
||||
- Type: Specify the content type (e.g., article, website).
|
||||
- Site Name: Provide the name of the site.
|
||||
|
||||
Output the generated OpenGraph meta tags as a series of HTML meta tags in the following format:
|
||||
|
||||
<meta property="og:title" content="Extracted or provided title" />
|
||||
<meta property="og:description" content="Extracted or provided description" />
|
||||
<meta property="og:image" content="Extracted or provided image URL" />
|
||||
<meta property="og:url" content="{url}" />
|
||||
<meta property="og:type" content="Infer from the URL" />
|
||||
<meta property="og:site_name" content="Extract site name from the URL" />
|
||||
"""
|
||||
|
||||
response = openai.Completion.create(
|
||||
engine="text-davinci-003",
|
||||
prompt=ai_prompt,
|
||||
max_tokens=150
|
||||
)
|
||||
|
||||
return response.choices[0].text.strip()
|
||||
|
||||
# Function to display the Streamlit UI
|
||||
def display_ui():
|
||||
st.title('OpenGraph Meta Tags Generator for Twitter 🐦')
|
||||
st.write('Generate OpenGraph meta tags for Twitter cards with ease. Just provide a URL and let our tool do the rest!')
|
||||
|
||||
# User inputs
|
||||
url = st.text_input('Content URL', help="🔗 Paste the URL of the page you want to share on Twitter.", placeholder="e.g., https://example.com")
|
||||
title = st.text_input('Title (optional)', help="📝 Optionally, provide a custom title for your Twitter card.", placeholder="e.g., Amazing Blog Post")
|
||||
description = st.text_area('Description (optional)', help="✍️ Optionally, provide a custom description for your Twitter card.", placeholder="e.g., This blog post covers...")
|
||||
image_url = st.text_input('Image URL (optional)', help="📸 Optionally, provide a URL to an image for your Twitter card.", placeholder="e.g., https://example.com/image.jpg")
|
||||
|
||||
if st.button('Generate Meta Tags'):
|
||||
if url:
|
||||
# Scrape the webpage for missing information if not provided
|
||||
if not title or not description or not image_url:
|
||||
scraped_title, scraped_description, scraped_image_url = scrape_webpage(url)
|
||||
title = title or scraped_title
|
||||
description = description or scraped_description
|
||||
image_url = image_url or scraped_image_url
|
||||
|
||||
# Fetch HTML content
|
||||
html_content = requests.get(url).text
|
||||
|
||||
# Generate OpenGraph meta tags
|
||||
meta_tags = generate_opengraph_meta_tags(url, html_content=html_content, title=title, description=description, image_url=image_url)
|
||||
|
||||
st.subheader('Generated OpenGraph Meta Tags')
|
||||
st.code(meta_tags, language='html')
|
||||
else:
|
||||
st.error('Please provide a content URL.')
|
||||
|
||||
# Instructions and preview
|
||||
st.write('### Instructions')
|
||||
st.write('1. Enter the URL of the content you want to share on Twitter.')
|
||||
st.write('2. Optionally, provide a custom title, description, and image URL.')
|
||||
st.write('3. Click "Generate Meta Tags" to see the generated OpenGraph meta tags.')
|
||||
|
||||
st.write('### Preview')
|
||||
st.write('A preview of how the Twitter card will look with the generated meta tags will be shown here (Feature to be implemented).')
|
||||
|
||||
# Run the Streamlit UI
|
||||
if __name__ == '__main__':
|
||||
display_ui()
|
||||
Reference in New Issue
Block a user