API Platformu
YouTube API
YouTube arama sıralamaları, video detayları, istenen dilde ve çevirili altyazılar ve yorumlar — her video için, kota olmadan.
Gerçek bir izleyicinin gördüğü YouTube arama sıralamaları, video detayları, altyazılar (çeviriyle birlikte) ve herkese açık her video için yorumlar. Tek bir endpoint, type parametresiyle seçilen dört rapor sunar. Günlük kota yoktur ve altyazılar yalnızca kendi videolarınız için değil, her video için çalışır.
Kimlik Doğrulama
| Header | Tip | Açıklama |
|---|---|---|
SEMUST-API-USER | string | API kullanıcınızın kullanıcı adı |
SEMUST-API-PASSWORD | string | API kullanıcınızın şifresi |
Accept-Language | string | İsteğe bağlı. Hata mesajlarını Türkçe almak için tr gönderin |
API kimlik bilgilerinizi API Erişimi sayfasından oluşturun.
SEMUST-API-USER: kullanici_adiniz
SEMUST-API-PASSWORD: sifreniz
Content-Type: application/json
Accept-Language: trRapor Tipleri
type | Döndürdüğü | Ücret |
|---|---|---|
search (varsayılan) | Bir anahtar kelime için YouTube sonuçları, sıralama düzeninde: videolar, Shorts, oynatma listeleri, kanallar ve reklamlar | Başlanan her 20 sonuçluk blok için $0.0022 |
video | Bir videonun detayları: izlenme, beğeni, yorum, kanal ve abone sayısı, yayın tarihi, süre, kategori, etiketler ve hangi altyazıların olduğu | $0.0066 |
transcript | Bir videonun altyazısı: düz metin ve zaman damgalı bölümler, istenirse çevrilmiş | $0.0066 |
comments | Bir videonun öne çıkan yorumları: yazar, beğeni ve yanıt sayısı | Başlanan her 20 yorumluk blok için $0.0022 |
{
"type": "search",
"keyword": "seo nedir",
"limit": 20
}{
"type": "transcript",
"video_id": "https://www.youtube.com/watch?v=CnQmoQD4xRM",
"translate_to": "en"
}İstek Parametreleri
Seçilen type için geçerli olmayan bir parametre yok sayılmaz, reddedilir; yanlış yazılmış bir parametre ise hatada adıyla ve bir öneriyle bildirilir. JSON null değeri "gönderilmedi" sayılır.
Gövde
typestringdefault: searchsearch, video, transcript veya comments.
keywordstringYalnızca search, zorunlu. En fazla 200 karakter.
video_idstringvideo, transcript ve comments için zorunlu. 11 karakterlik kimlik (CnQmoQD4xRM) ya da herhangi bir YouTube URL'si: watch?v=, youtu.be/, shorts/, embed/ veya live/.
countrystringdefault: TRİki harfli ülke kodu: aramanın yapıldığı ve videonun okunduğu bölge. Pazarlar için aşağıya bakın.
languagestringYalnızca search. Aramanın arayüz dili. TR için varsayılan tr, diğer ülkelerde en.
devicestringdefault: desktopYalnızca search. desktop veya mobile.
limitintegerdefault: 20search ve comments. Döndürülecek sonuç sayısı, 1–200. Başlanan her 20'lik blok için ücretlendirilir; bu yüzden 20 ve 40 en verimli değerlerdir.
transcript_languagestringYalnızca transcript. Hangi altyazının okunacağı, ör. tr veya en-GB. TR için varsayılan tr, diğer ülkelerde en. type: "video" bir videonun hangi altyazıları olduğunu listeler.
translate_tostringYalnızca transcript. Altyazıyı bu dile çevirir, ör. en.
idempotency_keystringİsteğe bağlı, en fazla 128 karakter. Aynı anahtarla 24 saat içinde tekrarlanan istek kayıtlı yanıtı ücretsiz döndürür.
GET /v1/youtube/markets desteklenen tüm ülkeleri ve arama dillerini listeler. Ücretsizdir.
curl -X POST https://data.semust.com/v1/youtube \
-H "SEMUST-API-USER: kullanici_adiniz" \
-H "SEMUST-API-PASSWORD: sifreniz" \
-H "Content-Type: application/json" \
-H "Accept-Language: tr" \
-d '{"type": "transcript", "video_id": "https://youtu.be/CnQmoQD4xRM"}'import requests
response = requests.post(
"https://data.semust.com/v1/youtube",
headers={
"SEMUST-API-USER": "kullanici_adiniz",
"SEMUST-API-PASSWORD": "sifreniz",
"Accept-Language": "tr",
},
json={"type": "search", "keyword": "seo nedir", "limit": 20},
timeout=120,
)
data = response.json()
if response.status_code != 200:
raise SystemExit(f"{data['code']}: {data['error']} {data.get('hint', '')}")
for row in data["items"]:
print(row["position"], row["type"], row["title"], row["views"])Yanıt
search ve comments satırları items içinde döndürür; video ve transcript tek bir data nesnesi döndürür. Olmayan ya da geçerli olmayan bir değer 0 değil null döner: bir oynatma listesinde "views": null olur.
URL'ler standarttır (https://www.youtube.com/watch?v=…, izleme parametreleri olmadan); tarihler UTC olarak ISO 8601 biçimindedir. Arama sonuçlarındaki published_at yaklaşıktır, çünkü YouTube orada göreli tarih gösterir ("5 yıl önce"); kesin tarihi type: "video" verir. Aramada total, YouTube'un bildirdiği sonuç sayısıdır.
Aşağıdaki örnekler gerçek yanıtlardır.
{
"success": true,
"type": "search",
"keyword": "seo nedir",
"country": "TR",
"language": "tr",
"device": "desktop",
"total": 628065,
"count": 2,
"limit": 2,
"items": [
{
"position": 1,
"type": "video",
"title": "SEO Nedir? | Webtures",
"url": "https://www.youtube.com/watch?v=CnQmoQD4xRM",
"video_id": "CnQmoQD4xRM",
"channel_name": "Webtures",
"channel_url": "https://www.youtube.com/@Webturescom",
"views": 241552,
"video_count": null,
"published_at": "2021-11-05T21:17:53Z",
"duration_seconds": 180,
"is_live": false
},
{
"position": 2,
"type": "playlist",
"title": "SEO Eğitimi Serisi - 2024 - Sıfırdan Uzmanlığa",
"url": "https://www.youtube.com/playlist?list=PLaqVtetWSaGhlXiU48bDd8511btrbx6T2",
"video_id": null,
"channel_name": "Mehmet Ali Yassı",
"channel_url": "https://www.youtube.com/@maliyassi",
"views": null,
"video_count": 20,
"published_at": null,
"duration_seconds": null,
"is_live": null
}
],
"cost": 0.0022,
"cached": false,
"request_id": "0b7e6f1a-3c2d-4e5f-9a8b-1c2d3e4f5a6b"
}{
"success": true,
"type": "video",
"video_id": "CnQmoQD4xRM",
"country": "TR",
"data": {
"video_id": "CnQmoQD4xRM",
"title": "SEO Nedir? | Webtures",
"url": "https://www.youtube.com/watch?v=CnQmoQD4xRM",
"description": "SEO Nedir? Açılımı “Arama Motoru Optimizasyonu” olan SEO, firmalara ait olan web sitelerin…",
"channel_name": "Webtures",
"channel_url": "https://www.youtube.com/channel/UCKSAxJxwfIyHrcgJP12CoSg",
"channel_subscribers": 2420,
"views": 241552,
"likes": 83,
"comments": 30,
"published_at": "2021-02-10T20:17:24Z",
"duration_seconds": 179,
"category": "Science & Technology",
"tags": ["seo", "seo nedir", "arama motoru optimizasyonu"],
"is_live": false,
"transcripts": [
{ "language": "en-GB", "auto_generated": false },
{ "language": "tr", "auto_generated": false },
{ "language": "tr", "auto_generated": true }
]
},
"cost": 0.0066,
"cached": false,
"request_id": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a"
}{
"success": true,
"type": "transcript",
"video_id": "CnQmoQD4xRM",
"country": "TR",
"data": {
"video_id": "CnQmoQD4xRM",
"title": "SEO Nedir? | Webtures",
"language": "tr",
"translated_to": null,
"text": "SEO’yu bir yerden duymuş ya da zaten biliyor olabilirsiniz. SEO’nun nasıl çalıştığınız ve ne gibi faydalar sağladığını anlatmaya çalışacağım. …",
"segments": [
{ "start": 0.603, "end": 3.89, "text": "SEO’yu bir yerden duymuş ya da zaten biliyor olabilirsiniz." },
{ "start": 3.887, "end": 8.24, "text": "SEO’nun nasıl çalıştığınız ve ne gibi faydalar sağladığını anlatmaya çalışacağım." }
]
},
"cost": 0.0066,
"cached": false,
"request_id": "9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d"
}{
"success": true,
"type": "comments",
"video_id": "CnQmoQD4xRM",
"country": "TR",
"total": 30,
"count": 1,
"limit": 1,
"items": [
{
"author": "@metehanbas890",
"author_url": "https://www.youtube.com/@metehanbas890",
"text": "SEO nedir veya nasıl yapılır. Çok açık bir şekilde anlatmışsınız. Video çok iyi olmuş.",
"likes": 3,
"replies": 0,
"published_at": "2021-11-05T21:18:13Z"
}
],
"cost": 0.0022,
"cached": false,
"request_id": "1e2d3c4b-5a6f-4e7d-8c9b-0a1f2e3d4c5b"
}Yanıt Alanları Referansı
search satırı
| Alan | Tip | Açıklama |
|---|---|---|
position | integer | Sonuç sayfasındaki sıra |
type | string | video, short, playlist, channel veya ad |
title, url | string | Başlık ve standart bağlantı |
video_id | string | null | Video, Shorts ve reklamlar için |
channel_name, channel_url | string | null | Kanal |
views | integer | null | İzlenme sayısı (videolar) |
video_count | integer | null | Oynatma listesi veya kanaldaki video sayısı |
published_at | string | null | Yaklaşık yayın zamanı, ISO 8601 |
duration_seconds | integer | null | Süre (videolar) |
is_live | boolean | null | Canlı yayın (videolar) |
video → data
video_id, title, url, description, channel_name, channel_url, channel_subscribers, views, likes, comments, published_at (kesin), duration_seconds, category, tags (yükleyenin etiketleri), is_live ve transcripts: her biri {language, auto_generated}; bir language değerini transcript_language olarak gönderebilirsiniz.
transcript → data
| Alan | Tip | Açıklama |
|---|---|---|
language | string | null | Okunan altyazının dili |
translated_to | string | null | translate_to gönderildiyse hedef dil |
text | string | Altyazının tamamı, tek metin olarak |
segments | array | {start, end, text}, süreler saniye cinsinden |
comments satırı
author, author_url, text, likes, replies, published_at. Zarftaki total, videonun yorum sayısıdır.
Hatalar
Her hata sabit bir code, okunabilir bir error ve retryable içerir; faydalı olduğunda ayrıca field, hint ve allowed. Türkçe mesajlar için Accept-Language: tr gönderin. Bir hata için asla ücret alınmaz. Diğer API'lerle ortak tam liste Hata Kodları sayfasındadır. Bu endpoint'e özgü olanlar:
| Durum | Kod | Anlamı | Ne yapmalı |
|---|---|---|---|
| 400 | KEYWORD_REQUIRED | type: "search" ama anahtar kelime yok | keyword gönderin |
| 400 | VIDEO_ID_REQUIRED | Video raporu ama video_id yok | Kimliği ya da URL'yi gönderin |
| 400 | INVALID_VIDEO_ID | 11 karakterlik kimlik ya da YouTube video URL'si değil | Kimliği videonun adresinden kopyalayın |
| 400 | UNSUPPORTED_MARKET | Bilinmeyen ülke ya da arama dili | GET /v1/youtube/markets |
| 404 | VIDEO_NOT_FOUND | Böyle bir video yok ya da gizli, kaldırılmış veya o ülkede engelli | Kimliği kontrol edin |
| 404 | TRANSCRIPT_NOT_FOUND | Videonun o dilde altyazısı yok | type: "video" mevcut dilleri listeler |
| 400 | INVALID_PARAMETER | ör. YouTube'un çeviremediği bir translate_to dili; field hangisi olduğunu söyler | Başka bir dil kullanın |
{
"error": "Bu videonun istenen dilde altyazısı yok",
"code": "TRANSCRIPT_NOT_FOUND",
"hint": "type=video, videonun hangi dillerde altyazısı olduğunu listeler. Ücret alınmadı",
"retryable": false,
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}{
"error": "'limit' parametresi type=video ile kullanılamaz",
"code": "PARAMETER_NOT_ALLOWED",
"field": "limit",
"hint": "Bu parametreyi kabul eden tipler: comments, search",
"retryable": false
}Krediler ve Sınırlar
| İstek | Ücret |
|---|---|
search veya comments, 20 sonuca kadar | $0.0022 |
search veya comments, 21–40 sonuç | $0.0044 |
search, 200 sonuç (en fazla) | $0.022 |
video | $0.0066 |
transcript | $0.0066 |
Bakiyeden limit kadarının ücreti bloke edilir; kullanılmayan kısım hemen iade edilir. Sonuçsuz bir arama ya da yorum listesi geçerli bir yanıttır ve tek blok olarak ücretlendirilir.
Sonuçlar önbellekte tutulur: arama, video detayları ve yorumlar 24 saat, altyazılar 30 gün. Önbellekten dönen yanıt "cached": true ile işaretlenir ve canlı yanıtla aynı ücreti öder.
Dakikalık ve günlük sınırlar hesabınızda tanımlıdır (429 RATE_LIMIT_EXCEEDED). API kullanıcısı başına aynı anda en fazla 10 istek çalışır; fazlası Retry-After ile 429 TOO_MANY_CONCURRENT_REQUESTS alır.
