main code

This commit is contained in:
Madhu 2025-01-12 00:20:25 +05:30
parent 20c49d8f72
commit 2aec0e2ed5

View file

@ -1,37 +1,113 @@
from firecrawl import FirecrawlApp
from pydantic import BaseModel, Field
from typing import Optional
from exa_py import Exa
from phi.agent import Agent
from phi.tools.firecrawl import FirecrawlTools
from phi.model.openai import OpenAIChat
# Define a simple schema for testing
class SimpleSchema(BaseModel):
title: Optional[str] = Field(description="Title of the webpage.")
description: Optional[str] = Field(description="Meta description of the webpage.")
exa = Exa(api_key="50a85")
# Initialize the FirecrawlApp with your API key
app = FirecrawlApp(api_key='fc-') # Replace with your API key
firecrawl_tools = FirecrawlTools(
api_key="f2",
scrape=False,
crawl=True,
limit=5
)
firecrawl_agent = Agent(
model=OpenAIChat(id="gpt-4o-mini", api_key="s"),
tools=[firecrawl_tools, ],
show_tool_calls=True,
markdown=True
)
analysis_agent = Agent(
model=OpenAIChat(id="gpt-4o-mini", api_key="s"),
show_tool_calls=True,
markdown=True
)
def get_competitor_urls(url=None, description=None):
if url:
result = exa.find_similar(
url=url,
excludeDomains=[url],
num_results=3,
exclude_source_domain=True,
category="company"
)
elif description:
result = exa.search(
description,
type="neural",
category="company",
use_autoprompt=True,
num_results=3
)
else:
raise ValueError("Please provide either a URL or a description.")
competitor_urls = [item.url for item in result.results]
return competitor_urls
def extract_competitor_info(competitor_url: str):
try:
# Use Firecrawl to scrape and extract data
data = app.scrape_url(competitor_url, {
'formats': ['extract'],
'extract': {
'schema': SimpleSchema.model_json_schema(),
}
})
return data.get("extract", {})
except Exception as e:
return {"error": str(e)}
crawl_response = firecrawl_agent.run(f"Crawl and summarize {competitor_url}")
crawled_data = crawl_response.content
structured_info = firecrawl_agent.run(
f"""Extract the following information from the crawled data:
- Product pricing and features: Extract exact pricing numbers from their pricing page.
- Technology stack information
- Marketing messaging/positioning
- Customer testimonials/case studies
- Latest news and developements
Crawled Data:
{crawled_data}
"""
)
return {
"competitor": competitor_url,
"data": structured_info.content
}
except Exception as e:
return {
"competitor": competitor_url,
"error": str(e)
}
def generate_analysis_report(competitor_data: list):
combined_data = "\n\n".join([str(data) for data in competitor_data])
report = analysis_agent.run(
f"""Analyze the following competitor data and generate a detailed report:
{combined_data}
Tasks:
1. Compare pricing and identify opportunities for competitive pricing.
2. Analyze features and highlight unique or missing features.
3. Evaluate marketing messaging and suggest positioning strategies.
4. Summarize customer testimonials and case studies.
5. Provide actionable insights for market positioning.
"""
)
return report.response
def main():
competitor_urls = get_competitor_urls(url="https://jenni.ai")
print(f"Competitor URLs: {competitor_urls}")
competitor_data = []
for url in competitor_urls:
print(f"\nAnalyzing Competitor: {url}")
competitor_info = extract_competitor_info(url)
competitor_data.append(competitor_info)
analysis_report = generate_analysis_report(competitor_data)
print("\nCompetitor Analysis Report:")
print(analysis_report)
# Example usage
if __name__ == "__main__":
# Competitor URL to analyze
competitor_url = "https://www.equal.in" # Replace with your competitor URL
# Extract competitor information
competitor_info = extract_competitor_info(competitor_url)
# Print the structured information
print(f"Competitor: {competitor_url}")
print(competitor_info)
main()