Skip to main content
Glama
test_timeframes.py5.52 kB
#!/usr/bin/env python3 import os import sys import logging import time from dotenv import load_dotenv import argparse # Add current directory to path to import the scraper sys.path.insert(0, os.path.dirname(__file__)) import importlib.util import sys import os # Load the scraper module dynamically (same as main.py) scraper_path = os.path.join(os.path.dirname(__file__), 'tview-scraper.py') spec = importlib.util.spec_from_file_location("tview_scraper", scraper_path) scraper_module = importlib.util.module_from_spec(spec) sys.modules["tview_scraper"] = scraper_module spec.loader.exec_module(scraper_module) TradingViewScraper = getattr(scraper_module, 'TradingViewScraper') TradingViewScraperError = getattr(scraper_module, 'TradingViewScraperError') # Load environment variables load_dotenv() # Configure logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) def test_timeframes(headless=True, use_save_shortcut=False): """Test different timeframes to see which ones work. Note: The save shortcut method (Shift+Ctrl/Cmd+S) works well for TradingView in both headless and non-headless modes, providing direct base64 image data URLs instead of HTTP URLs. """ ticker = "BYBIT:BTCUSDT.P" # Test timeframes from TradingView: '1', '5', '15', '30', '60', '240', 'D', 'W', 'M' timeframes_to_test = [ # None, # Default (would use scraper default) '1', # 1 minute '5', # 5 minutes '15', # 15 minutes '30', # 30 minutes '60', # 1 hour '240', # 4 hours 'D', # Daily 'W', # Weekly # 'M', # Monthly (uncomment if supported) ] results = {} for timeframe in timeframes_to_test: timeframe_str = timeframe or "default" logger.info(f"\n{'='*50}") logger.info(f"Testing timeframe: {timeframe_str}") logger.info(f"{'='*50}") try: with TradingViewScraper(headless=headless, use_save_shortcut=use_save_shortcut) as scraper: if use_save_shortcut: # Use the new direct image capture method image_url = scraper.get_chart_image_url( ticker=ticker, interval=timeframe ) else: # Use the traditional screenshot link method screenshot_link = scraper.get_screenshot_link( ticker=ticker, interval=timeframe ) if screenshot_link: image_url = scraper.convert_link_to_image_url(screenshot_link) else: image_url = None if image_url and (image_url.startswith("https://s3.tradingview.com/snapshots/") or image_url.startswith("data:image/")): results[timeframe_str] = {"status": "SUCCESS", "url": image_url[:100] + "..." if len(image_url) > 100 else image_url} logger.info(f"✅ SUCCESS for {timeframe_str}: {image_url[:100]}{'...' if len(image_url) > 100 else ''}") else: results[timeframe_str] = {"status": "FAILED", "url": image_url} logger.error(f"❌ FAILED for {timeframe_str}: {image_url}") except TradingViewScraperError as e: results[timeframe_str] = {"status": "ERROR", "error": str(e)} logger.error(f"❌ ERROR for {timeframe_str}: {e}") except Exception as e: results[timeframe_str] = {"status": "UNEXPECTED_ERROR", "error": str(e)} logger.error(f"❌ UNEXPECTED ERROR for {timeframe_str}: {e}") # Small delay between tests time.sleep(2) # Print summary logger.info(f"\n{'='*50}") logger.info("SUMMARY OF RESULTS") logger.info(f"{'='*50}") for timeframe_str, result in results.items(): status = result["status"] if status == "SUCCESS": logger.info(f"✅ {timeframe_str}: {status}") else: logger.error(f"❌ {timeframe_str}: {status} - {result.get('error', result.get('url', 'Unknown'))}") return results if __name__ == "__main__": parser = argparse.ArgumentParser(description="Test TradingView timeframes with optional headless and save shortcut flags.") parser.add_argument('--headless', action='store_true', help='Run browser in headless mode (default: False)') parser.add_argument('--use-save-shortcut', action='store_true', help='Use Shift+Ctrl/Command+S instead of Alt+S') args = parser.parse_args() # Check for required credentials tv_session_id = os.getenv("TRADINGVIEW_SESSION_ID") tv_session_id_sign = os.getenv("TRADINGVIEW_SESSION_ID_SIGN") if not tv_session_id or not tv_session_id_sign: logger.error("TRADINGVIEW_SESSION_ID and TRADINGVIEW_SESSION_ID_SIGN environment variables must be set!") sys.exit(1) logger.info(f"TRADINGVIEW_SESSION_ID is set (length: {len(tv_session_id)})") logger.info(f"TRADINGVIEW_SESSION_ID_SIGN is set (length: {len(tv_session_id_sign)})") logger.info(f"Using save shortcut: {args.use_save_shortcut}") results = test_timeframes(headless=args.headless, use_save_shortcut=args.use_save_shortcut) logger.info("Testing completed!")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ertugrul59/tradingview-chart-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server