8.1 KiB
name, description, version, author, tags, tools, dependencies, inputs, outputs, config
| name | description | version | author | tags | tools | dependencies | inputs | outputs | config | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TikTok Trends | Fetch top trending TikTok videos for a given country and generate an engagement report with optional video downloads. | 4 | pastilhas |
|
|
|
|
|
|
TikTok Trends
Fetch top trending TikTok videos for a given country and generate a comprehensive engagement report.
Important
- Use the
apifytool to fetch data. Do NOT call the Apify REST API directly via curl or fetch. - Do NOT explore or list files before starting. Create the output directory, call the tool, process results.
- If
downloadis false (default), do NOT attempt to download any videos. - Large data files (like
raw.json) exceed the 50KB read limit. Never try to read them directly. Instead, write a Node.js script to process and transform the data, execute it, then delete the script.
Steps
1. Setup output directory
Create a timestamped output directory:
$HOME/tiktok-trends/tiktok_trends_<country>_<YYYYMMDD_HHMMSS>/
2. Fetch trending videos
Call the apify tool with output_path pointing to raw.json in the output directory:
apify(
actor_id: "clockworks~tiktok-trends-scraper",
input: { "adsCountryCode": "<country>", "resultsPerPage": <limit> },
output_path: "<output_dir>/raw.json"
)
The tool saves the full dataset to raw.json and returns a summary (item count). If it returns an error or 0 items, report the error and stop.
3. Generate engagement report
Important: The raw JSON file is too large to read directly (exceeds the 50KB read limit). Instead, write a Node.js script (e.g. generate-report.js) in the output directory that reads raw.json, processes the data, and writes report.md. Then execute it with node generate-report.js. Delete the script after it runs successfully.
The script should read raw.json, parse the JSON (it may be an array directly or an object with items nested inside), and write report.md with the following sections. Adapt field names based on the actual data structure (see Data Shape Reference):
Header
# TikTok Trending Report — <COUNTRY> — YYYY-MM-DD
Total videos analyzed: <count>
Engagement Summary
Build a table from each video's statistics (views/plays, likes/diggs, shares, comments):
| Metric | Total | Avg per video |
|---|---|---|
| Views | ... | ... |
| Likes | ... | ... |
| Shares | ... | ... |
| Comments | ... | ... |
Top Hashtags (up to 20)
Extract hashtags from the data (dedicated hashtag field or parse #tags from description). Count occurrences, sort descending.
| Hashtag | Count |
|---|
Top Sounds (up to 10)
From each video's music/sound metadata, format as title — author. Count occurrences, sort descending.
| Sound | Count |
|---|
Creators Appearing in Trending (up to 10)
From each video's author/creator field. Count occurrences, sort descending.
| Creator | Videos |
|---|
Video List
Full table of all videos, sorted by position:
| # | Creator | Description | Views | Likes | URL |
|---|
- Creator:
@usernamefrom the author field - Description: first 60 chars, pipe and newline characters replaced, with
...if truncated - URL: the video's share/web URL
- Format numbers with locale separators (e.g.
1,234,567)
4. Download videos (only if download is true)
If download is false, skip this step entirely.
If download is true:
- Check that
yt-dlpis installed - Create a
videos/subdirectory in the output directory - Write all
share_urlvalues to aurls.txtfile - Run:
yt-dlp -a urls.txt -o "videos/%(id)s.%(ext)s" --write-info-json --no-overwrites - Report how many videos were downloaded. Partial failures are acceptable — do not fail the task if some downloads fail.
5. Report results
Print a summary to the user:
- Country and date
- Number of videos fetched
- Top video:
@creator— views count — URL - Top hashtag and count
- Output directory path
- Files created and their sizes
Data Shape Reference
The actor output format may vary between versions. Before writing the report generation script, inspect the first item of the dataset to discover the actual field names. Write the script to handle the fields it finds. Common field patterns across TikTok scraper actors:
- Video ID:
aweme_id,id, orvideoId - Description:
desc,description, ortitle - Video URL:
share_url,url,videoUrl, orwebVideoUrl - Author:
author.unique_id,author.uniqueId,authorMeta.name, ornickname - Statistics: Look for objects with keys like
play_count/playCount,digg_count/diggCount/likes,share_count/shareCount/shares,comment_count/commentCount/comments - Music/Sound:
music.title,musicMeta.musicName, or similar - Hashtags:
text_extra[].hashtag_name,hashtags[], or parse#tagsfrom description
Error Handling
| Scenario | Action |
|---|---|
| Apify tool returns error | Report the error message. Common causes: invalid token, no credits, rate limits |
| Empty results | Report "No trending videos found for " and stop |
| Partial results (fewer than requested) | Proceed normally, note the discrepancy in the summary |
| yt-dlp not installed when download=true | Report that yt-dlp is required and skip downloads |
| Download failures | Report which videos failed but do not fail the task |
Notes
- The Apify actor may take 1-3 minutes depending on the limit
- Pricing: $0.005 per start + $0.003 per result — monitor at https://console.apify.com/billing
- Not all countries have sufficient trending data; some may return fewer results than requested