0.1.0 • Published 9 months ago
@dsottimano/trendspy-js v0.1.0
trendspy-js
A powerful JavaScript library for analyzing Google Trends data. This is a JavaScript port of the Python trendspy library, providing the same functionality with a JavaScript/Node.js-friendly interface.
Features
- 📈 Interest Over Time Analysis: Track search interest trends across custom timeframes
- 🔍 Trending Searches: Get real-time trending search terms
- 🌍 Geographic Data: Support for region-specific trend analysis
- ⏰ Flexible Timeframes: Multiple time range formats with automatic resolution handling
- 🔄 Rate Limiting: Built-in rate limiting and retry mechanisms
- 📊 Data Processing: Tools for processing and analyzing trends data
Installation
npm install trendspy-jsQuick Start
const { Trends } = require('trendspy-js');
async function main() {
// Initialize with options
const trends = new Trends({
language: 'en',
tz: -440, // Timezone offset in minutes
requestDelay: 8.0, // Delay between requests in seconds
maxRetries: 3
});
try {
// Get interest over time for keywords
const data = await trends.interestOverTime(['NBA', 'basketball'], {
geo: 'US',
timeframe: 'now 4-H' // Last 4 hours
});
console.log(data);
} catch (error) {
console.error('Error:', error.message);
}
}
main();Timeframe Formats
The library supports various timeframe formats:
// Fixed timeframes
'now 1-H' // Last hour
'now 4-H' // Last 4 hours
'now 1-d' // Last day
'now 7-d' // Last 7 days
'today 1-m' // Last month
'today 3-m' // Last 3 months
'today 12-m' // Last year
'all' // All available data
// Custom date ranges
'2024-03-15 2024-03-16' // Specific dates
'2024-03-15T14 2024-03-15T18' // Specific dates with hours
// Relative timeframes
'2024-03-15 1-H' // One hour before March 15, 2024
'2024-03-15T14 5-H' // 5 hours before 2PM on March 15, 2024
'2024-03-15 1-m' // One month before March 15, 2024
'2024-03-15 1-y' // One year before March 15, 2024API Reference
Trends Class
Constructor Options
{
language: string, // Language code (default: 'en')
tz: number, // Timezone offset in minutes
requestDelay: number, // Delay between requests in seconds
maxRetries: number // Maximum number of retry attempts
}Methods
interestOverTime(keywords, options)
// Input options
const options = {
geo: string, // Geographic location (e.g., 'US')
timeframe: string, // Time range to analyze
category: number, // Category ID (optional)
property: string, // Property filter (optional)
resolution: string // Time resolution (optional)
};
// Response format
{
"timestamps": [
1710432000000, // Unix timestamps in milliseconds
1710433800000,
// ...
],
"values": {
"NBA": [
45, // Interest values (0-100)
62,
// ...
],
"basketball": [
38,
57,
// ...
]
},
"averages": { // Average interest over the timeframe
"NBA": 52.5,
"basketball": 48.2
},
"timeframe": {
"start": "2024-03-14T12:00:00-04:00",
"end": "2024-03-14T16:00:00-04:00",
"resolution": "1 minute"
}
}trendingSearches(options)
// Input options
const options = {
geo: string, // Geographic location
date: string, // Date to get trends for
category: string // Category filter (optional)
};
// Response format
{
"trending": [
{
"keyword": "March Madness",
"traffic": "1M+",
"trendKeywords": ["NCAA", "basketball", "tournament"],
"news": [
{
"title": "March Madness 2024: Latest Updates",
"link": "https://example.com/news",
"source": "Sports News",
"publishedAt": "2024-03-14T15:30:00Z"
}
],
"startedAt": "2024-03-14T12:00:00Z"
},
// ... more trending items
],
"date": "2024-03-14",
"geo": "US"
}trendingNowShowcaseTimeline(keywords, options)
// Input options
const options = {
geo: string, // Geographic location
timeframe: string, // Time range to analyze
category: string // Category filter (optional)
};
// Response format
{
"timeline": [
{
"timestamp": "2024-03-14T12:00:00Z",
"trends": [
{
"keyword": "NBA",
"rank": 1,
"volume": "500K+",
"status": "rising"
},
// ... more trends
]
},
// ... more timeline entries
],
"metadata": {
"timeframe": {
"start": "2024-03-14T12:00:00Z",
"end": "2024-03-14T16:00:00Z",
"resolution": "16 minutes"
},
"geo": "US"
}
}Utility Functions
Timeframe Utilities
const { convertTimeframe, timeframeToDuration } = require('trendspy-js');
// Convert timeframe to API format
const apiTimeframe = convertTimeframe('2024-03-15 1-H');
// Returns: "2024-03-15T00 2024-03-15T01"
// Get duration object
const duration = timeframeToDuration('now 4-H');
// Returns Luxon Duration object: { hours: 4 }Hierarchical Search
const { HierarchicalIndex } = require('trendspy-js');
// Sample data structure
const items = [
{ name: "United States", id: "US" },
{ name: "New York", id: "US-NY" }
];
// Create search index
const index = new HierarchicalIndex(items);
// Search by name
const result = index.exactSearch('United States');
// Returns: { name: "United States", id: "US" }
// Partial search
const matches = index.partialSearch('Unit');
// Returns: [{ name: "United States", id: "US" }]
// ID search
const locationMatch = index.idSearch('US-NY');
// Returns: [{ name: "New York", id: "US-NY" }]Error Handling
The library includes built-in error handling for common scenarios:
try {
const data = await trends.interestOverTime(['keyword'], {
geo: 'US',
timeframe: 'now 1-H'
});
} catch (error) {
if (error.name === 'TrendsQuotaExceededError') {
console.log('Rate limit exceeded. Try increasing requestDelay.');
} else if (error.name === 'TrendsRequestError') {
console.log('API request failed:', error.message);
} else {
console.log('Unexpected error:', error);
}
}Development
# Install dependencies
npm install
# Run tests
npm test
# Build package
npm run buildContributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Acknowledgments
This is a JavaScript port of the Python trendspy library.
0.1.0
9 months ago