feat: implement missing features for multirange interest, historical hourly interest, trending searches, realtime trends, top charts, and suggestions in google_trends_researcher.py

This commit is contained in:
ajaysi (aider)
2024-09-14 19:17:27 +05:30
parent 93075dc833
commit cef400039e

View File

@@ -23,7 +23,7 @@ Note: Ensure that the required libraries are installed using 'pip install pytren
""" """
import os import os
import time # I wish import time
import random import random
import requests import requests
import numpy as np import numpy as np
@@ -45,6 +45,7 @@ from urllib.parse import quote_plus
from tqdm import tqdm from tqdm import tqdm
from tabulate import tabulate from tabulate import tabulate
from pytrends.request import TrendReq from pytrends.request import TrendReq
from datetime import datetime
from loguru import logger from loguru import logger
# Configure logger # Configure logger
@@ -55,7 +56,155 @@ logger.add(sys.stdout,
) )
def fetch_google_trends_interest_overtime(keyword): def fetch_multirange_interest_over_time(keywords, timeframes):
"""
Fetch multirange interest over time for given keywords and timeframes.
Args:
keywords (list): List of keywords.
timeframes (list): List of timeframes.
Returns:
pd.DataFrame: DataFrame containing interest over time data.
"""
try:
pytrends = TrendReq(hl='en-US', tz=360)
pytrends.build_payload(keywords, timeframe=timeframes)
data = pytrends.multirange_interest_over_time()
data = data.reset_index()
# Visualization using Plotly
fig = px.line(data, x='date', y=keywords, title='Multirange Interest Over Time')
fig.show()
return data
except Exception as e:
logger.error(f"Error in fetch_multirange_interest_over_time: {e}")
return pd.DataFrame()
def fetch_historical_hourly_interest(keywords, start_date, end_date):
"""
Fetch historical hourly interest for given keywords.
Args:
keywords (list): List of keywords.
start_date (str): Start date in 'YYYY-MM-DD' format.
end_date (str): End date in 'YYYY-MM-DD' format.
Returns:
pd.DataFrame: DataFrame containing historical hourly interest data.
"""
try:
pytrends = TrendReq(hl='en-US', tz=360)
data = pytrends.get_historical_interest(keywords, year_start=int(start_date[:4]), month_start=int(start_date[5:7]), day_start=int(start_date[8:10]), hour_start=0, year_end=int(end_date[:4]), month_end=int(end_date[5:7]), day_end=int(end_date[8:10]), hour_end=0)
data = data.reset_index()
# Visualization using Plotly
fig = px.line(data, x='date', y=keywords, title='Historical Hourly Interest')
fig.show()
return data
except Exception as e:
logger.error(f"Error in fetch_historical_hourly_interest: {e}")
return pd.DataFrame()
def fetch_trending_searches(region='united_states'):
"""
Fetch trending searches for a given region.
Args:
region (str): Region for which to fetch trending searches.
Returns:
pd.DataFrame: DataFrame containing trending searches.
"""
try:
pytrends = TrendReq(hl='en-US', tz=360)
data = pytrends.trending_searches(pn=region)
# Display using tabulate
table = tabulate(data, headers='keys', tablefmt='fancy_grid')
print(table)
return data
except Exception as e:
logger.error(f"Error in fetch_trending_searches: {e}")
return pd.DataFrame()
def fetch_realtime_search_trends(region='US'):
"""
Fetch realtime search trends for a given region.
Args:
region (str): Region for which to fetch realtime search trends.
Returns:
pd.DataFrame: DataFrame containing realtime search trends.
"""
try:
pytrends = TrendReq(hl='en-US', tz=360)
data = pytrends.realtime_trending_searches(pn=region)
# Display using tabulate
table = tabulate(data, headers='keys', tablefmt='fancy_grid')
print(table)
return data
except Exception as e:
logger.error(f"Error in fetch_realtime_search_trends: {e}")
return pd.DataFrame()
def fetch_top_charts(year, region='GLOBAL'):
"""
Fetch top charts for a given year and region.
Args:
year (int): Year for which to fetch top charts.
region (str): Region for which to fetch top charts.
Returns:
pd.DataFrame: DataFrame containing top charts.
"""
try:
pytrends = TrendReq(hl='en-US', tz=360)
data = pytrends.top_charts(year, geo=region)
# Display using tabulate
table = tabulate(data, headers='keys', tablefmt='fancy_grid')
print(table)
return data
except Exception as e:
logger.error(f"Error in fetch_top_charts: {e}")
return pd.DataFrame()
def fetch_suggestions(keyword):
"""
Fetch suggestions for a given keyword.
Args:
keyword (str): Keyword for which to fetch suggestions.
Returns:
list: List of suggestions.
"""
try:
pytrends = TrendReq(hl='en-US', tz=360)
suggestions = pytrends.suggestions(keyword)
# Display using tabulate
table = tabulate(suggestions, headers='keys', tablefmt='fancy_grid')
print(table)
return suggestions
except Exception as e:
logger.error(f"Error in fetch_suggestions: {e}")
return []
try: try:
pytrends = TrendReq(hl='en-US', tz=360) pytrends = TrendReq(hl='en-US', tz=360)
pytrends.build_payload([keyword], timeframe='today 1-y', geo='US') pytrends.build_payload([keyword], timeframe='today 1-y', geo='US')