Python · YouTube
Python से YouTube वीडियो के आँकड़े मॉनिटर करें
YouTube किसी वीडियो की मौजूदा व्यू संख्या दिखाता है, लेकिन यह नहीं कि वह वहाँ तक कैसे पहुँची। अगर आप जानना चाहते हैं कि कोई वीडियो कितनी तेज़ी से बढ़ता है – आपका अपना, किसी प्रतिस्पर्धी का या कोई कैंपेन जिसके लिए आपने पैसे दिए – तो आपको आँकड़े नियमित रूप से दर्ज करने होंगे। यह गाइड एक छोटी स्क्रिप्ट बनाती है जो यह काम आपके लिए करती है।
दिन में एक बार यह everydata.io से आपकी लिस्ट के हर वीडियो के मौजूदा व्यू, लाइक और कमेंट माँगती है, एक CSV फ़ाइल में एक लाइन जोड़ती है और प्रिंट करती है कि पिछले रन के बाद से हर वीडियो को कितने व्यू मिले। वैकल्पिक रूप से यह किसी चैनल के सबसे नए अपलोड भी उठा लेती है, ताकि नए वीडियो पहले दिन से ट्रैक हों।
अपडेट: · everydata.io द्वारा
आख़िर में आपके पास क्या होगा
- हर वीडियो और दिन के लिए एक पंक्ति वाली CSV फ़ाइल: व्यू, लाइक, कमेंट।
- पिछली जाँच के बाद से व्यू में बढ़ोतरी, हर रन पर प्रिंट की हुई।
- किसी चैनल के नए अपलोड की ऑटोमैटिक ट्रैकिंग।
आपको क्या चाहिए
- Python 3.10 या नया और
pip install requests। - everydata.io की फ़्री API key – यहाँ बनाएँ –
EVERYDATA_API_KEYenvironment variable में। - वे वीडियो जिन पर आप नज़र रखना चाहते हैं: लिंक में
v=के बाद वाला ID, या पूरा लिंक।
01देखें कि API एक वीडियो के लिए क्या लौटाता है
video-details endpoint, id में वीडियो ID या लिंक लेता है और वीडियो पेज के सार्वजनिक आँकड़े लौटाता है। छोटा किया गया डॉक्यूमेंटेड उदाहरण:
{
"responseStatus": "PAGE_FOUND",
"responseMessage": "Page successfully found!",
"videoId": "kJQP7kiw5Fk",
"title": "Luis Fonsi - Despacito ft. Daddy Yankee",
"channelName": "LuisFonsiVEVO",
"viewCount": 9125159593,
"likeCount": 56673581,
"likeCountText": "56M",
"commentCount": 4300000,
"publishedAt": "2017-01-12T21:00:02-08:00",
"duration": 282
}viewCount, likeCount और commentCount सादे नंबर हैं, सेव और तुलना करने के लिए तैयार। likeCountText वह गोल किया लेबल है जो YouTube पेज पर दिखाता है।
02हर रन पर आँकड़े दर्ज करें
स्क्रिप्ट CSV फ़ाइल से हर वीडियो की आख़िरी व्यू संख्या पढ़ती है, मौजूदा आँकड़े फ़ेच करती है, एक नई पंक्ति जोड़ती है और अंतर प्रिंट करती है।
"""Record views, likes and comments of YouTube videos and print the growth since the last check."""
import csv
import os
import re
import time
from datetime import datetime, timezone
from pathlib import Path
import requests
API = "https://api.everydata.io"
KEY = os.environ["EVERYDATA_API_KEY"]
CSV_FILE = Path("video_stats.csv")
VIDEOS = ["kJQP7kiw5Fk"] # video IDs or full YouTube links
def api_get(path: str, params: dict) -> dict:
"""GET an everydata.io endpoint. Waits when rate limited (429) and retries a failed page load (5xx) once."""
retried = False
for _ in range(4):
resp = requests.get(f"{API}{path}", params=params, headers={"x-api-key": KEY}, timeout=60)
if resp.status_code == 429:
# Too many requests at once. The answer says how long to wait: "... Try again in 12 seconds."
wait = re.search(r"in (\d+) seconds", resp.text)
time.sleep(int(wait.group(1)) + 1 if wait else 60)
continue
if resp.status_code >= 500 and not retried:
retried = True # 5xx answers are not counted against your quota
time.sleep(10)
continue
resp.raise_for_status() # 4xx (wrong key, quota used up, bad parameter) or a second 5xx
return resp.json()
raise RuntimeError("still rate limited after several waits – try again later")
def video_details(video: str) -> dict:
return api_get("/ytb/youtube-video-details", {"id": video})
def last_views() -> dict[str, int]:
"""Most recent view count per video from earlier runs."""
if not CSV_FILE.exists():
return {}
with CSV_FILE.open(newline="") as f:
return {r["video_id"]: int(r["views"]) for r in csv.DictReader(f) if r["views"]}
def main() -> None:
before = last_views()
now = datetime.now(timezone.utc).isoformat(timespec="seconds")
new_file = not CSV_FILE.exists()
with CSV_FILE.open("a", newline="") as f:
writer = csv.writer(f)
if new_file:
writer.writerow(["checked_at", "video_id", "title", "views", "likes", "comments"])
for video in VIDEOS:
try:
v = video_details(video)
except (requests.RequestException, RuntimeError) as exc:
print(f"{video}: could not check this time ({exc}) – the next run tries again")
continue # one failed video does not stop the others
video_id = v.get("videoId") or video
views = v.get("viewCount")
writer.writerow([now, video_id, v.get("title"), views or "",
v.get("likeCount") or "", v.get("commentCount") or ""])
if views is not None and video_id in before:
print(f"{v.get('title')}: +{views - before[video_id]:,} views since the last check")
if __name__ == "__main__":
main()इसे python3 monitor.py से चलाएँ। दूसरे रन से आपको “+12,345 views since the last check” जैसी लाइनें दिखेंगी। जब आप एक साथ बहुत ज़्यादा रिक्वेस्ट भेजते हैं (429) तो api_get रुकता है और आगे बढ़ता है, और विफल पेज लोड (5xx) को एक बार और आज़माता है; जो वीडियो फिर भी विफल हो, उसकी रिपोर्ट होती है और अगले रन में उसे फिर उठाया जाता है।
03किसी चैनल के नए वीडियो उठाएँ
हर नया वीडियो हाथ से जोड़ने के बजाय किसी चैनल के सबसे नए अपलोड माँगें और उन्हें लिस्ट में शामिल करें। channel-videos endpoint, चैनल ID या चैनल लिंक स्वीकार करता है।
def latest_uploads(channel: str) -> list[str]:
"""IDs of the newest regular videos of a channel (channel ID or URL such as https://www.youtube.com/@WWE)."""
data = api_get("/ytb/youtube-channel-videos", {"id": channel, "filter": "videos_latest"})
return [item["videoId"] for item in data.get("items", []) if item.get("type") == "video"]
# In main(): watch the five newest uploads of a channel as well as your fixed list
# for video in VIDEOS + latest_uploads("https://www.youtube.com/@WWE")[:5]:{
"responseStatus": "PAGE_FOUND",
"responseMessage": "Page successfully found!",
"channelId": "UCJ5v_MCY6GNUBTO8-D3XoAg",
"filter": "videos_latest",
"items": [
{
"type": "video",
"videoId": "b7kl_pcHa0A",
"title": "Blake Monroe vows to get payback against Giulia: SmackDown exclusive, Sept. 18, 2026",
"viewCount": 6800,
"publishedTimeText": "47 minutes ago"
}
]
}04इसे दिन में एक बार चलाएँ
स्क्रिप्ट को cron (Mac, Linux), Windows Task Scheduler या किसी शेड्यूल किए गए CI जॉब से शेड्यूल करें:
0 6 * * * cd /home/you/yt-monitor && EVERYDATA_API_KEY=ds_your_key /usr/bin/python3 monitor.py >> monitor.log 2>&1हर वीडियो लुकअप और हर चैनल लुकअप एक रिक्वेस्ट है। उदाहरण के लिए, दिन में एक बार जाँचे जाने वाले तीन वीडियो हर महीने लगभग 90 रिक्वेस्ट हैं, जो 100 वाले फ़्री प्लान के भीतर हैं। कई वीडियो के दैनिक आँकड़ों के लिए प्राइसिंग देखें।
ग्रोथ कर्व देखने के लिए video_stats.csv को स्प्रेडशीट में खोलें और checked_at के सामने व्यू प्लॉट करें।
इस गाइड में इस्तेमाल किए गए endpoints
Video Details · YouTube API
Channel Videos · YouTube API
इस डेटा से आप और क्या कर सकते हैं
YouTube मेटाडेटा JSON में – टाइटल, व्यू, लाइक, कमेंट, अवधि, टैग, थंबनेल, कैप्शन – वीडियो ID या URL से। न OAuth, न Data API quota।
REST से सार्वजनिक YouTube चैनल आँकड़े: सब्सक्राइबर और वीडियो संख्या, वेरिफ़िकेशन, नए वीडियो, स्ट्रीम, Shorts और प्लेलिस्ट, चैनल ID या @handle से।
वीडियो ID या URL से YouTube कमेंट scrape करें: टेक्स्ट, लेखक, लाइक, रिप्लाई संख्या, pinned और hearted फ़्लैग, रिप्लाई तक cursor पेजिंग। OAuth नहीं।
अपने डेटा के साथ आज़माएँ
फ़्री प्लान में हर महीने 100 रिक्वेस्ट शामिल हैं, हर प्लेटफ़ॉर्म पर इस्तेमाल करने लायक – इस गाइड को शुरू से आख़िर तक फ़ॉलो करने के लिए काफ़ी।