{"id":35025,"date":"2025-11-25T00:31:18","date_gmt":"2025-11-24T21:31:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/"},"modified":"2025-11-25T00:31:18","modified_gmt":"2025-11-24T21:31:18","slug":"youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/","title":{"rendered":"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<p>YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, video i\u00e7erikleri bilginin ana ak\u0131\u015f\u0131n\u0131 olu\u015fturuyor. YouTube, bu devasa bilgi okyanusunun merkezinde yer al\u0131yor. Ancak, bu i\u00e7eriklerden anlaml\u0131 veriler \u00e7\u0131karmak, \u00f6zellikle de metin tabanl\u0131 analizler yapmak istedi\u011fimizde, \u00f6nemli bir zorlukla kar\u015f\u0131la\u015f\u0131yoruz: videolar\u0131n transkriptlerine eri\u015fim. Her ne kadar YouTube, otomatik altyaz\u0131 veya y\u00fckleyici taraf\u0131ndan sa\u011flanan altyaz\u0131 se\u00e7enekleri sunsa da, bu transkriptleri manuel olarak kopyalay\u0131p yap\u0131\u015ft\u0131rmak, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde imkans\u0131z denecek kadar verimsizdir. \u0130\u015fte tam bu noktada, toplu transkript \u00e7\u0131karma ihtiyac\u0131 ortaya \u00e7\u0131k\u0131yor.<\/p>\n<p>Bu ihtiya\u00e7, farkl\u0131 profesyonel gruplar i\u00e7in \u00e7e\u015fitli senaryolarda kendini g\u00f6sterir. \u00d6rne\u011fin, bir pazarlamac\u0131 rakip analizleri yaparken, belirli bir sekt\u00f6rdeki pop\u00fcler videolar\u0131n anahtar kelime yo\u011funlu\u011funu veya konu\u015fma tonunu incelemek isteyebilir. Elbette, bu analizler i\u00e7in her videonun transkriptini tek tek \u00e7\u0131karmak yerine, y\u00fczlerce videonun metinsel i\u00e7eri\u011fini an\u0131nda elde etmek, b\u00fcy\u00fck bir zaman tasarrufu sa\u011flar. Dahas\u0131, SEO uzmanlar\u0131 i\u00e7in transkriptler, video i\u00e7eriklerinin arama motorlar\u0131 taraf\u0131ndan daha iyi indekslenmesine yard\u0131mc\u0131 olacak potansiyel anahtar kelimeleri ve konu ba\u015fl\u0131klar\u0131n\u0131 belirlemede alt\u0131n de\u011ferindedir. Videolar\u0131n metin tabanl\u0131 i\u00e7eriklerini inceleyerek, pop\u00fcler konular\u0131, s\u0131k\u00e7a kullan\u0131lan terimleri ve hedef kitlenin ilgi alanlar\u0131n\u0131 \u00e7ok daha h\u0131zl\u0131 bir \u015fekilde tespit edebilirler. Bu da, hem kendi i\u00e7erik stratejilerini geli\u015ftirmelerine hem de rakip stratejilerini anlamalar\u0131na olanak tan\u0131r.<\/p>\n<p>Akademisyenler ve ara\u015ft\u0131rmac\u0131lar i\u00e7in ise toplu transkriptler, b\u00fcy\u00fck veri setleri \u00fczerinde metin madencili\u011fi ve duygu analizi yapma potansiyeli sunar. \u00d6rne\u011fin, belirli bir sosyal konuyu ele alan binlerce videonun transkriptlerini analiz ederek kamuoyunun genel e\u011filimlerini veya farkl\u0131 perspektifleri derinlemesine inceleyebilirler. Bu t\u00fcr analizler, geleneksel manuel y\u00f6ntemlerle m\u00fcmk\u00fcn olmayan kapsaml\u0131 i\u00e7g\u00f6r\u00fcler sa\u011flar. Podcast yay\u0131nc\u0131lar\u0131 veya i\u00e7erik \u00fcreticileri de kendi i\u00e7eriklerini farkl\u0131 platformlarda metin olarak yay\u0131nlamak, blog yaz\u0131lar\u0131 olu\u015fturmak veya eri\u015filebilirlik amac\u0131yla metin versiyonlar\u0131n\u0131 sunmak i\u00e7in bu eklentiyi kullanabilirler. B\u00f6ylece i\u00e7eriklerini daha geni\u015f kitlelere ula\u015ft\u0131rabilir ve SEO performanslar\u0131n\u0131 art\u0131rabilirler. Sonu\u00e7 olarak, toplu YouTube transkriptleri \u00e7\u0131karma yetene\u011fi, sadece bir kolayl\u0131k de\u011fil, ayn\u0131 zamanda dijital i\u00e7erik analizi, pazarlama ve ara\u015ft\u0131rma alanlar\u0131nda stratejik bir ara\u00e7 haline gelmi\u015ftir. Bu makale, bu g\u00fc\u00e7l\u00fc arac\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m g\u00f6sterecektir.<\/p>\n<h2>Bir Chrome Eklentisi Geli\u015ftirmeye Nereden Ba\u015flamal\u0131y\u0131m?<\/h2>\n<p>Bir Chrome eklentisi geli\u015ftirmeye karar verdi\u011finizde, ba\u015flang\u0131\u00e7 noktas\u0131 genellikle ayn\u0131d\u0131r: Google&#8217;\u0131n belirledi\u011fi standartlar ve mimari prensipler. Modern Chrome eklentileri, <a href=\"https:\/\/developer.chrome.com\/docs\/extensions\/mv3\/intro\/\" target=\"_blank\">Manifest V3<\/a> ad\u0131n\u0131 verdi\u011fimiz yeni bir mimari \u00fczerinde \u00e7al\u0131\u015f\u0131r. Manifest V3, g\u00fcvenlik, performans ve gizlilik odakl\u0131 iyile\u015ftirmeler sunarak, eklentilerin daha sa\u011flam ve kullan\u0131c\u0131 dostu olmas\u0131n\u0131 hedefler. Bu b\u00f6l\u00fcm, Manifest V3&#8217;\u00fcn temel bile\u015fenlerini ve eklentimizin YouTube transkriptlerini toplu olarak \u00e7ekmek i\u00e7in nas\u0131l bir araya gelece\u011fini a\u00e7\u0131klayacakt\u0131r.<\/p>\n<p>\u00d6ncelikle, her Chrome eklentisinin bir <code>manifest.json<\/code> dosyas\u0131na ihtiyac\u0131 vard\u0131r. Bu dosya, eklentinizin kimlik kart\u0131 gibidir; ad\u0131, s\u00fcr\u00fcm\u00fc, izinleri ve hangi komut dosyalar\u0131n\u0131 nerede \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131 tan\u0131mlar. Manifest V3 ile birlikte gelen en b\u00fcy\u00fck de\u011fi\u015fikliklerden biri, arka plan sayfalar\u0131n\u0131n yerini <strong>Service Worker&#8217;lar\u0131n<\/strong> almas\u0131d\u0131r. Service Worker&#8217;lar, eklentinizin arka plan\u0131nda \u00e7al\u0131\u015fan, taray\u0131c\u0131 olaylar\u0131n\u0131 dinleyen ve uzun s\u00fcreli g\u00f6revleri yerine getiren JavaScript kodlar\u0131d\u0131r. Bir videonun transkriptini toplama veya birden fazla video aras\u0131nda ge\u00e7i\u015f yapma gibi i\u015flemler, genellikle Service Worker \u00fczerinden y\u00f6netilir. Bu sayede, eklentiniz yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda kaynak t\u00fcketir ve genel taray\u0131c\u0131 performans\u0131n\u0131 olumsuz etkilemez. Ayr\u0131ca, Service Worker&#8217;lar sayesinde eklentiniz taray\u0131c\u0131 kapat\u0131ld\u0131\u011f\u0131nda bile belirli g\u00f6revleri yerine getirmeye devam edebilir, bu da toplu i\u015flemler i\u00e7in kritik bir \u00f6zelliktir.<\/p>\n<p>Di\u011fer bir \u00f6nemli bile\u015fen ise <strong>Content Script&#8217;lerdir<\/strong>. Content Script&#8217;ler, web sayfalar\u0131n\u0131n i\u00e7eri\u011fiyle do\u011frudan etkile\u015fime giren JavaScript dosyalar\u0131d\u0131r. YouTube transkriptlerini \u00e7\u0131karmak i\u00e7in, eklentimizin YouTube sayfas\u0131na bir Content Script enjekte etmesi gerekecektir. Bu script, sayfan\u0131n DOM yap\u0131s\u0131n\u0131 inceleyecek, transkriptlerin bulundu\u011fu elementleri bulacak ve bu metinleri Service Worker&#8217;a iletecektir. Content Script&#8217;ler, web sayfalar\u0131na adeta &#8220;eklenti g\u00f6z\u00fc&#8221; katarak, bizim belirledi\u011fimiz kurallar \u00e7er\u00e7evesinde sayfa i\u00e7eri\u011fini okumam\u0131z\u0131 ve hatta de\u011fi\u015ftirmemizi sa\u011flar. Bu do\u011frudan etkile\u015fim, YouTube&#8217;un altyaz\u0131 mekanizmas\u0131ndan yararlanarak transkript verilerini g\u00fcvenilir bir \u015fekilde almam\u0131z i\u00e7in elzemdir.<\/p>\n<p>Son olarak, eklentimizin kullan\u0131c\u0131yla etkile\u015fim kurmas\u0131n\u0131 sa\u011flayan bir <strong>Popup<\/strong> aray\u00fcz\u00fc olacakt\u0131r. Taray\u0131c\u0131 \u00e7ubu\u011fundaki eklenti simgesine t\u0131kland\u0131\u011f\u0131nda a\u00e7\u0131lan k\u00fc\u00e7\u00fck bir pencere olan popup, kullan\u0131c\u0131n\u0131n transkriptleri hangi formatta almak istedi\u011fini se\u00e7mesi, belirli bir video listesini girmesi veya toplu \u00e7\u0131karma i\u015flemini ba\u015flatmas\u0131 i\u00e7in bir aray\u00fcz sunar. Bu aray\u00fcz, genellikle HTML, CSS ve JavaScript (<code>popup.html<\/code> ve <code>popup.js<\/code>) kullan\u0131larak geli\u015ftirilir. Popup, kullan\u0131c\u0131dan gelen girdileri Service Worker&#8217;a ileterek, karma\u015f\u0131k i\u015flemleri tetikler ve kullan\u0131c\u0131n\u0131n eklentiyle sezgisel bir \u015fekilde etkile\u015fim kurmas\u0131n\u0131 sa\u011flar. T\u00fcm bu bile\u015fenler, Manifest V3&#8217;\u00fcn getirdi\u011fi yeni API&#8217;ler ve g\u00fcvenlik modelleriyle uyumlu bir \u015fekilde \u00e7al\u0131\u015farak, YouTube transkriptlerini toplu olarak \u00e7ekmek i\u00e7in g\u00fc\u00e7l\u00fc ve verimli bir altyap\u0131 olu\u015fturur. \u015eimdi, bu teorik bilgileri prati\u011fe d\u00f6kelim ve eklentimizin kodunu yazmaya ba\u015flayal\u0131m.<\/p>\n<h2>Ad\u0131m Ad\u0131m Geli\u015ftirme: YouTube Transkript Toplay\u0131c\u0131 Eklentimizi Olu\u015ftural\u0131m m\u0131?<\/h2>\n<p>\u015eimdi teoriden prati\u011fe ge\u00e7me zaman\u0131. YouTube transkriptlerini toplu olarak \u00e7ekecek Chrome eklentimizi ad\u0131m ad\u0131m olu\u015fturaca\u011f\u0131z. Bu b\u00f6l\u00fcmde, projemizin temel yap\u0131s\u0131ndan ba\u015flayarak, eklentinin her bir ana bile\u015fenini (manifest, service worker, content script ve popup) nas\u0131l kodlayaca\u011f\u0131m\u0131z\u0131 detayl\u0131ca inceleyece\u011fiz. Her bir ad\u0131mda, ilgili kod bloklar\u0131n\u0131 (<code><\/p>\n<pre><code>...<\/code><\/pre>\n<p><\/code>) ve bunlar\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131 a\u00e7\u0131klayarak, okuyucunun konuyu s\u0131f\u0131rdan anlayabilece\u011fi bir yol haritas\u0131 sunaca\u011f\u0131z. Proje yap\u0131s\u0131, modern bir Chrome eklentisi i\u00e7in en uygun mimariyi yans\u0131tacak \u015fekilde tasarlanm\u0131\u015ft\u0131r, bu da ilerideki geli\u015ftirmeleri ve bak\u0131m\u0131 kolayla\u015ft\u0131racakt\u0131r. Ayr\u0131ca, YouTube&#8217;un dinamik yap\u0131s\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurarak, transkript verilerine g\u00fcvenilir bir \u015fekilde nas\u0131l eri\u015filece\u011fine dair pratik yakla\u015f\u0131mlar da ele al\u0131nacakt\u0131r. Bu sayede, sadece kod yazmakla kalmayacak, ayn\u0131 zamanda eklentinin ard\u0131ndaki mant\u0131\u011f\u0131 ve tasar\u0131m prensiplerini de kavram\u0131\u015f olacaks\u0131n\u0131z.<\/p>\n<p>\u0130lk olarak, projemizin dosya yap\u0131s\u0131n\u0131 olu\u015ftural\u0131m. Temiz ve d\u00fczenli bir yap\u0131, eklentinin geli\u015ftirme s\u00fcrecini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r ve hatalar\u0131 minimize eder. A\u015fa\u011f\u0131daki gibi bir dizin yap\u0131s\u0131, tipik bir Chrome eklentisi i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r:<\/p>\n<pre><code>\n    youtube-transcript-extractor\/\n    \u251c\u2500\u2500 manifest.json\n    \u251c\u2500\u2500 service-worker.js\n    \u251c\u2500\u2500 content-script.js\n    \u251c\u2500\u2500 popup.html\n    \u251c\u2500\u2500 popup.js\n    \u2514\u2500\u2500 icons\/\n        \u251c\u2500\u2500 icon16.png\n        \u251c\u2500\u2500 icon48.png\n        \u2514\u2500\u2500 icon128.png\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131, eklentinin t\u00fcm temel bile\u015fenlerini ayr\u0131 dosyalarda tutmam\u0131z\u0131 sa\u011flar, bu da mod\u00fclerlik ve okunabilirlik a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. \u015eimdi, her bir bile\u015fenin detaylar\u0131na inelim.<\/p>\n<h3>Proje Yap\u0131s\u0131 ve manifest.json: Eklentinin Kimlik Kart\u0131 Nas\u0131l Haz\u0131rlan\u0131r?<\/h3>\n<p>Her Chrome eklentisinin kalbi, <code>manifest.json<\/code> dosyas\u0131d\u0131r. Bu dosya, eklentinizin meta verilerini, izinlerini ve hangi script'lerin ne zaman ve nerede \u00e7al\u0131\u015faca\u011f\u0131n\u0131 tan\u0131mlar. Manifest V3 ile birlikte, baz\u0131 izinler ve deklarasyonlar de\u011fi\u015fti. Bizim eklentimiz i\u00e7in gerekli olan temel <code>manifest.json<\/code> i\u00e7eri\u011fi \u015fu \u015fekilde olacakt\u0131r:<\/p>\n<pre><code>\n    {\n      \"manifest_version\": 3,\n      \"name\": \"YouTube Toplu Transkript \u00c7\u0131kar\u0131c\u0131\",\n      \"version\": \"1.0\",\n      \"description\": \"YouTube videolar\u0131n\u0131n transkriptlerini toplu olarak \u00e7\u0131kar\u0131r.\",\n      \"icons\": {\n        \"16\": \"icons\/icon16.png\",\n        \"48\": \"icons\/icon48.png\",\n        \"128\": \"icons\/icon128.png\"\n      },\n      \"action\": {\n        \"default_popup\": \"popup.html\",\n        \"default_icon\": {\n          \"16\": \"icons\/icon16.png\",\n          \"24\": \"icons\/icon24.png\",\n          \"32\": \"icons\/icon32.png\"\n        }\n      },\n      \"permissions\": [\n        \"activeTab\",\n        \"storage\",\n        \"scripting\"\n      ],\n      \"host_permissions\": [\n        \"*:\/\/*.youtube.com\/*\"\n      ],\n      \"background\": {\n        \"service_worker\": \"service-worker.js\"\n      }\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu manifest dosyas\u0131nda dikkat etmemiz gereken birka\u00e7 \u00f6nemli nokta var:<\/p>\n<ul>\n<li><code>\"manifest_version\": 3<\/code>: Manifest V3 kulland\u0131\u011f\u0131m\u0131z\u0131 belirtir.<\/li>\n<li><code>\"name\"<\/code>, <code>\"version\"<\/code>, <code>\"description\"<\/code>: Eklentinizin temel bilgileri.<\/li>\n<li><code>\"icons\"<\/code>: Eklentinizin farkl\u0131 boyutlardaki ikonlar\u0131. Kullan\u0131c\u0131 aray\u00fcz\u00fcnde ve Chrome Web Ma\u011fazas\u0131'nda g\u00f6r\u00fcn\u00fcr.<\/li>\n<li><code>\"action\"<\/code>: Eklenti simgesine t\u0131kland\u0131\u011f\u0131nda ne olaca\u011f\u0131n\u0131 tan\u0131mlar. Burada, <code>popup.html<\/code> dosyas\u0131n\u0131n bir popup olarak a\u00e7\u0131laca\u011f\u0131n\u0131 belirtiyoruz.<\/li>\n<li><code>\"permissions\"<\/code>: Eklentinizin ihtiya\u00e7 duydu\u011fu API eri\u015fimlerini listeler.\n<ul>\n<li><code>\"activeTab\"<\/code>: Kullan\u0131c\u0131n\u0131n o an aktif olan sekmesine ge\u00e7ici eri\u015fim sa\u011flar.<\/li>\n<li><code>\"storage\"<\/code>: Eklentinin kullan\u0131c\u0131 verilerini (\u00f6rn. ayarlar\u0131) saklamas\u0131na izin verir.<\/li>\n<li><code>\"scripting\"<\/code>: Belirli bir web sayfas\u0131na kod enjekte etme veya o sayfada kod \u00e7al\u0131\u015ft\u0131rma yetene\u011fi verir. Bu, Content Script'imizi \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gereklidir.<\/li>\n<\/ul>\n<\/li>\n<li><code>\"host_permissions\"<\/code>: Eklentinin hangi web siteleriyle etkile\u015fime girebilece\u011fini belirtir. <code>\"*:\/\/*.youtube.com\/*\"<\/code> ile YouTube'un t\u00fcm alt alan adlar\u0131nda \u00e7al\u0131\u015fabilece\u011fimizi beyan ederiz.<\/li>\n<li><code>\"background\"<\/code>: Service Worker'\u0131m\u0131z\u0131n dosya yolunu (<code>service-worker.js<\/code>) belirtir. Manifest V3'te arka plan sayfalar\u0131 yerine Service Worker'lar kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Bu <code>manifest.json<\/code> dosyas\u0131, eklentimizin temel i\u015flevselli\u011fi i\u00e7in gerekli olan t\u00fcm yap\u0131land\u0131rmalar\u0131 i\u00e7erir. \u015eimdi, eklentinin arka plan\u0131nda \u00e7al\u0131\u015fan beyin olan Service Worker'a ge\u00e7elim.<\/p>\n<h3>Arka Plan Beti\u011fi (Service Worker): Veri Toplama Mant\u0131\u011f\u0131n\u0131 Nas\u0131l Y\u00f6netiriz?<\/h3>\n<p><code>service-worker.js<\/code> dosyas\u0131, eklentimizin arka planda \u00e7al\u0131\u015fan ve \u00e7e\u015fitli olaylar\u0131 dinleyip bunlara tepki veren ana kontrol mekanizmas\u0131d\u0131r. Bu dosya, popup'tan gelen talepleri al\u0131r, YouTube sayfas\u0131na Content Script'i enjekte eder ve Content Script'ten gelen transkript verilerini i\u015fler. Service Worker, ayr\u0131ca toplu \u00e7\u0131karma mant\u0131\u011f\u0131n\u0131 da y\u00f6netecek ve kullan\u0131c\u0131ya geri bildirim sa\u011flayacakt\u0131r. \u0130\u015fte <code>service-worker.js<\/code> dosyam\u0131z\u0131n temel yap\u0131s\u0131:<\/p>\n<pre><code>\n    \/\/ service-worker.js\n    chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {\n        if (request.action === \"extractTranscripts\") {\n            const videoIds = request.videoIds;\n            const results = [];\n\n            for (const videoId of videoIds) {\n                try {\n                    const videoUrl = <code>https:\/\/www.youtube.com\/watch?v=${videoId}<\/code>;\n                    \n                    \/\/ Yeni bir sekme a\u00e7\u0131yoruz\n                    const tab = await chrome.tabs.create({ url: videoUrl, active: false });\n                    \n                    \/\/ Sekme y\u00fcklenene kadar bekliyoruz\n                    await new Promise(resolve => {\n                        chrome.tabs.onUpdated.addListener(function listener(tabId, changeInfo) {\n                            if (tabId === tab.id && changeInfo.status === 'complete') {\n                                chrome.tabs.onUpdated.removeListener(listener);\n                                resolve();\n                            }\n                        });\n                    });\n\n                    \/\/ \u0130\u00e7erik beti\u011fini enjekte ediyoruz\n                    const [response] = await chrome.scripting.executeScript({\n                        target: { tabId: tab.id },\n                        files: ['content-script.js']\n                    });\n\n                    \/\/ \u0130\u00e7erik beti\u011fine transkripti \u00e7ekme talimat\u0131 g\u00f6nderiyoruz\n                    const [transcriptResponse] = await chrome.scripting.executeScript({\n                        target: { tabId: tab.id },\n                        function: () => {\n                            \/\/ content-script.js i\u00e7inde tan\u0131mlanan fonksiyonu \u00e7a\u011f\u0131r\n                            return window.extractTranscript();\n                        }\n                    });\n\n                    if (transcriptResponse && transcriptResponse.result) {\n                        results.push({ videoId, transcript: transcriptResponse.result });\n                    } else {\n                        results.push({ videoId, transcript: \"Transkript bulunamad\u0131 veya bir hata olu\u015ftu.\" });\n                    }\n                    \n                    \/\/ Sekmeyi kapat\u0131yoruz\n                    await chrome.tabs.remove(tab.id);\n\n                } catch (error) {\n                    console.error(<code>Video ${videoId} i\u00e7in transkript \u00e7ekilirken hata:<\/code>, error);\n                    results.push({ videoId, transcript: <code>Hata: ${error.message}<\/code> });\n                    \/\/ Hata durumunda a\u00e7\u0131lan sekmeyi kapatmaya \u00e7al\u0131\u015f\n                    if (tab && tab.id) {\n                        try {\n                            await chrome.tabs.remove(tab.id);\n                        } catch (e) {\n                            console.error(<code>Sekme kapat\u0131l\u0131rken hata:<\/code>, e);\n                        }\n                    }\n                }\n            }\n            sendResponse({ status: \"success\", data: results });\n        }\n        return true; \/\/ Asenkron yan\u0131t i\u00e7in\n    });\n\n    \/\/ Opsiyonel: Eklenti y\u00fcklendi\u011finde veya g\u00fcncellendi\u011finde \u00e7al\u0131\u015facak kod\n    chrome.runtime.onInstalled.addListener(() => {\n        console.log(\"YouTube Toplu Transkript \u00c7\u0131kar\u0131c\u0131 y\u00fcklendi!\");\n    });\n    <\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Service Worker'lar, k\u0131sa \u00f6m\u00fcrl\u00fc olma e\u011filimindedir. Yani, i\u015fleri bitti\u011finde Chrome onlar\u0131 sonland\u0131rabilir. Bu nedenle, uzun s\u00fcreli i\u015flemler (\u00f6rne\u011fin \u00e7ok say\u0131da video i\u00e7in transkript \u00e7ekme) yaparken, her bir ad\u0131m\u0131n ba\u011f\u0131ms\u0131z oldu\u011fundan ve Service Worker'\u0131n aniden sonland\u0131r\u0131lmas\u0131na kar\u015f\u0131 diren\u00e7li oldu\u011fundan emin olun. Bu \u00f6rnekte, her video i\u00e7in yeni bir sekme a\u00e7\u0131p kapatarak bu durumu y\u00f6netiyoruz.\n    <\/div>\n<p>Bu kod blo\u011funda neler oluyor?<\/p>\n<ul>\n<li><code>chrome.runtime.onMessage.addListener<\/code>: Popup veya Content Script'ten gelen mesajlar\u0131 dinler. <code>\"extractTranscripts\"<\/code> aksiyonu geldi\u011finde \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><code>videoIds<\/code>: Popup'tan gelen video ID'lerinin listesi.<\/li>\n<li><code>chrome.tabs.create<\/code>: Her bir video ID'si i\u00e7in yeni bir sekme a\u00e7ar\u0131z. <code>active: false<\/code> ile bu sekmelerin arka planda a\u00e7\u0131lmas\u0131n\u0131 sa\u011flar\u0131z, b\u00f6ylece kullan\u0131c\u0131n\u0131n deneyimi kesintiye u\u011framaz.<\/li>\n<li><code>chrome.tabs.onUpdated.addListener<\/code>: Sekmenin tamamen y\u00fcklendi\u011finden emin olmak i\u00e7in bekleriz. Bu kritik bir ad\u0131md\u0131r, \u00e7\u00fcnk\u00fc Content Script'i enjekte etmeden \u00f6nce sayfan\u0131n haz\u0131r olmas\u0131 gerekir.<\/li>\n<li><code>chrome.scripting.executeScript<\/code>: Manifest V3 ile birlikte, Content Script'ler do\u011frudan Service Worker'dan enjekte edilir. \u0130lk olarak <code>content-script.js<\/code> dosyas\u0131n\u0131 enjekte ederiz. Ard\u0131ndan, bu script'in i\u00e7inde tan\u0131mlanan <code>extractTranscript()<\/code> fonksiyonunu \u00e7a\u011f\u0131rarak transkripti \u00e7ekmesini isteriz.<\/li>\n<li>Transkript \u00e7ekildikten sonra, a\u00e7\u0131lan sekmeyi <code>chrome.tabs.remove(tab.id)<\/code> ile kapat\u0131r\u0131z. Bu, taray\u0131c\u0131n\u0131n kaynak t\u00fcketimini optimize etmek i\u00e7in \u00f6nemlidir.<\/li>\n<li>Her video i\u00e7in sonu\u00e7lar\u0131 <code>results<\/code> dizisine ekler ve t\u00fcm i\u015flemler tamamland\u0131\u011f\u0131nda bu sonu\u00e7lar\u0131 popup'a geri g\u00f6ndeririz.<\/li>\n<li><code>return true;<\/code>: Asenkron bir yan\u0131t g\u00f6nderece\u011fimizi belirtiriz, b\u00f6ylece dinleyici kanal\u0131n\u0131 a\u00e7\u0131k tutar\u0131z.<\/li>\n<\/ul>\n<p>Bu Service Worker, eklentinin t\u00fcm operasyonel y\u00fck\u00fcn\u00fc \u00fcstlenir. \u015eimdi, YouTube sayfas\u0131ndaki transkript verilerini do\u011frudan \u00e7ekmek i\u00e7in Content Script'e bakal\u0131m.<\/p>\n<h3>\u0130\u00e7erik Beti\u011fi (Content Script): YouTube Sayfas\u0131yla Nas\u0131l Etkile\u015fim Kurulur?<\/h3>\n<p><code>content-script.js<\/code>, YouTube video sayfas\u0131nda \u00e7al\u0131\u015facak ve transkript verilerini do\u011frudan DOM'dan alacak olan script'tir. YouTube'un transkript mekanizmas\u0131, genellikle \"Altyaz\u0131lar\" veya \"Transkript\" d\u00fc\u011fmesi t\u0131kland\u0131\u011f\u0131nda a\u00e7\u0131lan bir panelde bulunur. Bu script, bu paneli bulacak, a\u00e7acak ve i\u00e7eri\u011fini okuyacakt\u0131r. \u0130\u015fte <code>content-script.js<\/code> dosyam\u0131z\u0131n i\u00e7eri\u011fi:<\/p>\n<pre><code>\n    \/\/ content-script.js\n\n    \/\/ Bu fonksiyonu global scope'ta tan\u0131ml\u0131yoruz ki service worker \u00e7a\u011f\u0131rabilsin\n    window.extractTranscript = async () => {\n        try {\n            \/\/ \"Altyaz\u0131lar\" veya \"Transkript\" d\u00fc\u011fmesini bul ve t\u0131kla\n            \/\/ YouTube'un dilden dile de\u011fi\u015fen buton metinlerini desteklemek i\u00e7in\n            const transcriptButtonSelectors = [\n                'ytd-menu-renderer.ytd-watch-metadata tp-yt-paper-button.style-scope:has(yt-icon.ytd-menu-renderer[icon=\"yt-icons:subtitles\"])', \/\/ Geni\u015f ekran yeni UI\n                'ytd-menu-renderer.ytd-watch-metadata button.yt-spec-button-shape-next[aria-label*=\"Transcript\"]', \/\/ Daha yeni UI\n                '#button.ytd-toggle-button-renderer:has(yt-icon-button[aria-label=\"Toggle transcript\"])', \/\/ eski UI\n                'button[aria-label*=\"Toggle transcript\"]' \/\/ Genel arama\n            ];\n\n            let transcriptButton = null;\n            for (const selector of transcriptButtonSelectors) {\n                transcriptButton = document.querySelector(selector);\n                if (transcriptButton) {\n                    break;\n                }\n            }\n\n            if (!transcriptButton) {\n                console.warn(\"Transkript d\u00fc\u011fmesi bulunamad\u0131. Alternatif yollar deneniyor...\");\n                \/\/ Belki do\u011frudan menu'ye eri\u015fip \"Open transcript\"i buluruz\n                const menuButton = document.querySelector('ytd-menu-renderer #button');\n                if (menuButton) {\n                    menuButton.click();\n                    await new Promise(r => setTimeout(r, 500)); \/\/ Men\u00fcn\u00fcn a\u00e7\u0131lmas\u0131 i\u00e7in bekle\n                    const openTranscriptItem = document.querySelector('yt-formatted-string.ytd-menu-navigation-item-renderer:has(yt-icon[icon=\"yt-icons:subtitles\"])');\n                    if (openTranscriptItem) {\n                        openTranscriptItem.click();\n                        console.log(\"Transkript men\u00fc \u00f6\u011fesi t\u0131kland\u0131.\");\n                        await new Promise(r => setTimeout(r, 1000)); \/\/ Transkript panelinin y\u00fcklenmesi i\u00e7in bekle\n                    } else {\n                        console.warn(\"Men\u00fc a\u00e7\u0131k, ancak 'Transkripti a\u00e7' \u00f6\u011fesi bulunamad\u0131.\");\n                        menuButton.click(); \/\/ Men\u00fcy\u00fc kapat\n                    }\n                }\n                \n                \/\/ Transkript butonu yine de bulunamazsa veya t\u0131klanamazsa\n                transcriptButton = document.querySelector('ytd-engagement-panel-section-list-renderer #header button[aria-label=\"Toggle transcript\"]');\n                if (transcriptButton) {\n                     console.log(\"Alternatif transkript d\u00fc\u011fmesi bulundu.\");\n                } else {\n                    console.error(\"Transkript d\u00fc\u011fmesi hi\u00e7bir \u015fekilde bulunamad\u0131.\");\n                    return \"Transkript d\u00fc\u011fmesi bulunamad\u0131.\";\n                }\n            }\n            \n            \/\/ E\u011fer hala bir d\u00fc\u011fme varsa ve t\u0131klanmam\u0131\u015fsa t\u0131kla\n            if (transcriptButton && !transcriptButton.ariaPressed === 'true') { \/\/ Kontrol ekle: zaten a\u00e7\u0131k m\u0131?\n                transcriptButton.click();\n                console.log(\"Transkript d\u00fc\u011fmesi t\u0131kland\u0131.\");\n                await new Promise(r => setTimeout(r, 1000)); \/\/ Panel a\u00e7\u0131lmas\u0131 i\u00e7in bekle\n            }\n\n\n            \/\/ Transkript panelini bul\n            const transcriptPanel = document.querySelector('ytd-engagement-panel-section-list-renderer[target-id=\"engagement-panel-transcript\"]');\n\n            if (!transcriptPanel) {\n                console.error(\"Transkript paneli bulunamad\u0131.\");\n                return \"Transkript paneli bulunamad\u0131.\";\n            }\n\n            \/\/ Transkript metinlerini i\u00e7eren elemanlar\u0131 topla\n            const transcriptElements = transcriptPanel.querySelectorAll('.segment-text'); \/\/ YouTube'un transkript segmentleri i\u00e7in kulland\u0131\u011f\u0131 s\u0131n\u0131f\n\n            if (transcriptElements.length === 0) {\n                \/\/ E\u011fer do\u011frudan segment-text yoksa, belki farkl\u0131 bir yap\u0131dad\u0131r\n                const textNodes = transcriptPanel.querySelectorAll('div[data-time-ms] yt-formatted-string');\n                if (textNodes.length > 0) {\n                     const transcriptText = Array.from(textNodes).map(el => el.textContent.trim()).join('\\n');\n                     return transcriptText;\n                }\n                console.error(\"Transkript metin elementleri bulunamad\u0131.\");\n                return \"Transkript metin elementleri bulunamad\u0131.\";\n            }\n\n            \/\/ Metinleri birle\u015ftir\n            const transcriptText = Array.from(transcriptElements).map(el => el.textContent.trim()).join('\\n');\n            console.log(\"Transkript ba\u015far\u0131yla \u00e7ekildi.\");\n            return transcriptText;\n\n        } catch (error) {\n            console.error(\"Transkript \u00e7ekilirken bir hata olu\u015ftu:\", error);\n            return <code>Transkript \u00e7ekilirken bir hata olu\u015ftu: ${error.message}<\/code>;\n        }\n    };\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu Content Script'in ana i\u015flevleri:<\/p>\n<ul>\n<li><code>window.extractTranscript = async () => {...}<\/code>: Bu fonksiyonu global scope'a ekliyoruz, b\u00f6ylece Service Worker <code>executeScript<\/code> ile do\u011frudan \u00e7a\u011f\u0131rabilir.<\/li>\n<li><strong>Transkript D\u00fc\u011fmesini Bulma ve T\u0131klama<\/strong>: YouTube'un aray\u00fcz\u00fc zaman zaman de\u011fi\u015fti\u011fi i\u00e7in, birden fazla CSS se\u00e7ici kullanarak \"Altyaz\u0131lar\" veya \"Transkript\" d\u00fc\u011fmesini bulmaya \u00e7al\u0131\u015f\u0131r\u0131z. Bulundu\u011funda, programatik olarak t\u0131klayarak transkript panelini a\u00e7ar\u0131z. E\u011fer do\u011frudan d\u00fc\u011fme bulunamazsa, men\u00fc d\u00fc\u011fmesini a\u00e7\u0131p \"Open transcript\" \u00f6\u011fesini bulmaya \u00e7al\u0131\u015f\u0131r\u0131z.<\/li>\n<li><code>await new Promise(r => setTimeout(r, X));<\/code>: Bu sat\u0131rlar, bir eleman\u0131n y\u00fcklenmesini veya bir animasyonun tamamlanmas\u0131n\u0131 beklemek i\u00e7in kullan\u0131lan basit gecikme fonksiyonlar\u0131d\u0131r. YouTube'un dinamik yap\u0131s\u0131nda, elemanlar\u0131n hemen g\u00f6r\u00fcnmeyebilece\u011fi durumlarda bu t\u00fcr gecikmeler kritik olabilir.<\/li>\n<li><strong>Transkript Panelini Bulma<\/strong>: D\u00fc\u011fmeye t\u0131kland\u0131ktan sonra, transkriptlerin g\u00f6r\u00fcnt\u00fclendi\u011fi <code>ytd-engagement-panel-section-list-renderer[target-id=\"engagement-panel-transcript\"]<\/code> panelini buluruz.<\/li>\n<li><strong>Transkript Metinlerini Toplama<\/strong>: Panel bulunduktan sonra, i\u00e7erisindeki metin segmentlerini (genellikle <code>.segment-text<\/code> s\u0131n\u0131f\u0131na sahip elemanlar) se\u00e7er ve t\u00fcm metinleri birle\u015ftirerek bir string olu\u015ftururuz. Farkl\u0131 YouTube yap\u0131lar\u0131 i\u00e7in alternatif se\u00e7iciler de eklenmi\u015ftir.<\/li>\n<li><strong>Hata Y\u00f6netimi<\/strong>: Her ad\u0131mda olas\u0131 hatalar\u0131 yakalar ve konsola loglar\u0131z. Bu, sorun giderme i\u00e7in \u00f6nemlidir.<\/li>\n<\/ul>\n<p>Bu script, YouTube sayfas\u0131ndaki karma\u015f\u0131k DOM yap\u0131s\u0131 i\u00e7inde gezinerek istedi\u011fimiz veriyi \u00e7ekme g\u00f6revini \u00fcstlenir. \u015eimdi, kullan\u0131c\u0131n\u0131n eklentiyle etkile\u015fim kurmas\u0131n\u0131 sa\u011flayacak popup aray\u00fcz\u00fcn\u00fc olu\u015ftural\u0131m.<\/p>\n<h3>Kullan\u0131c\u0131 Aray\u00fcz\u00fc (Popup): Eklentimizi Kullan\u0131c\u0131 Dostu Hale Nas\u0131l Getiririz?<\/h3>\n<p><code>popup.html<\/code> ve <code>popup.js<\/code> dosyalar\u0131, eklentimizin kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc olu\u015fturur. Kullan\u0131c\u0131, taray\u0131c\u0131daki eklenti simgesine t\u0131klad\u0131\u011f\u0131nda bu popup penceresi a\u00e7\u0131l\u0131r. Burada, kullan\u0131c\u0131n\u0131n YouTube video ID'lerini girmesi, transkriptleri \u00e7ekme i\u015flemini ba\u015flatmas\u0131 ve sonu\u00e7lar\u0131 g\u00f6r\u00fcnt\u00fclemesi i\u00e7in gerekli bile\u015fenleri sunar\u0131z.<\/p>\n<p><strong>popup.html:<\/strong><\/p>\n<pre><code>\n    <!DOCTYPE html>\n    <html lang=\"tr\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <title>YouTube Transkript \u00c7\u0131kar\u0131c\u0131<\/title>\n        <link rel=\"stylesheet\" href=\"popup.css\">\n        <style>\n            \/* popup.css i\u00e7eri\u011fi do\u011frudan buraya veya ayr\u0131 bir dosyadan eklenebilir *\/\n            body {\n                font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n                margin: 0;\n                padding: 15px;\n                width: 350px; \/* Sabit geni\u015flik *\/\n                min-height: 250px;\n                background-color: #f4f7f6;\n                color: #333;\n            }\n            h2 {\n                color: #2c3e50;\n                font-size: 1.2em;\n                margin-bottom: 15px;\n                border-bottom: 1px solid #eee;\n                padding-bottom: 10px;\n            }\n            textarea {\n                width: calc(100% - 20px);\n                height: 80px;\n                padding: 10px;\n                margin-bottom: 10px;\n                border: 1px solid #ccc;\n                border-radius: 5px;\n                resize: vertical;\n                font-size: 0.9em;\n            }\n            button {\n                background-color: #e62117; \/* YouTube k\u0131rm\u0131z\u0131s\u0131 *\/\n                color: white;\n                padding: 10px 15px;\n                border: none;\n                border-radius: 5px;\n                cursor: pointer;\n                font-size: 1em;\n                width: 100%;\n                box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n                transition: background-color 0.2s ease;\n            }\n            button:hover {\n                background-color: #cc1810;\n            }\n            button:disabled {\n                background-color: #cccccc;\n                cursor: not-allowed;\n            }\n            #status {\n                margin-top: 15px;\n                padding: 10px;\n                background-color: #e7f3ff;\n                border-left: 5px solid #2196f3;\n                border-radius: 4px;\n                font-size: 0.9em;\n                color: #333;\n            }\n            #results {\n                margin-top: 20px;\n                border-top: 1px solid #eee;\n                padding-top: 15px;\n            }\n            #results pre {\n                background-color: #e8e8e8;\n                border: 1px solid #ddd;\n                padding: 10px;\n                border-radius: 5px;\n                max-height: 200px;\n                overflow-y: auto;\n                white-space: pre-wrap;\n                word-wrap: break-word;\n                font-size: 0.85em;\n                line-height: 1.4;\n            }\n            \/* Mobil uyumluluk i\u00e7in basic medya sorgusu *\/\n            @media (max-width: 400px) {\n                body {\n                    width: auto; \/* K\u00fc\u00e7\u00fck ekranlarda tam geni\u015flik *\/\n                    padding: 10px;\n                }\n                textarea, button {\n                    width: 100%;\n                }\n            }\n        <\/style>\n    <\/head>\n    <body>\n        <h2>YouTube Toplu Transkript \u00c7\u0131kar\u0131c\u0131<\/h2>\n        <p>YouTube video ID'lerini (her sat\u0131ra bir tane) veya tam URL'leri buraya yap\u0131\u015ft\u0131r\u0131n.<\/p>\n        <textarea id=\"videoIdsInput\" placeholder=\"\u00d6rn: videoID1\nvideoID2\nhttps:\/\/www.youtube.com\/watch?v=videoID3\"><\/textarea>\n        <button id=\"extractButton\">Transkriptleri \u00c7ek<\/button>\n        <div id=\"status\">\u0130\u015flem bekleniyor...<\/div>\n        <div id=\"results\">\n            <h3>\u00c7ekilen Transkriptler:<\/h3>\n            <pre id=\"transcriptOutput\">Sonu\u00e7lar burada g\u00f6r\u00fcnt\u00fclenecektir.<\/pre>\n<p>            <button id=\"copyAllButton\" style=\"display: none; margin-top: 10px;\">T\u00fcm\u00fcn\u00fc Kopyala<\/button>\n        <\/div>\n<p>        <script src=\"popup.js\"><\/script><br \/>\n    <\/body><br \/>\n    <\/html><br \/>\n    <\/code><\/p>\n<p><strong>popup.js:<\/strong><\/p>\n<pre><code>\n    \/\/ popup.js\n    document.addEventListener('DOMContentLoaded', () => {\n        const videoIdsInput = document.getElementById('videoIdsInput');\n        const extractButton = document.getElementById('extractButton');\n        const statusDiv = document.getElementById('status');\n        const transcriptOutput = document.getElementById('transcriptOutput');\n        const copyAllButton = document.getElementById('copyAllButton');\n\n        extractButton.addEventListener('click', async () => {\n            const input = videoIdsInput.value.trim();\n            if (!input) {\n                statusDiv.textContent = 'L\u00fctfen en az bir video ID\\'si veya URL girin.';\n                return;\n            }\n\n            extractButton.disabled = true;\n            statusDiv.textContent = 'Transkriptler \u00e7ekiliyor, l\u00fctfen bekleyin... Bu i\u015flem birka\u00e7 saniye s\u00fcrebilir.';\n            transcriptOutput.textContent = '';\n            copyAllButton.style.display = 'none';\n\n            \/\/ Video ID'lerini temizle ve formatla\n            const rawLines = input.split('\\n').map(line => line.trim()).filter(line => line.length > 0);\n            const videoIds = rawLines.map(line => {\n                const urlMatch = line.match(\/(?:youtube\\.com\\\/(?:[^\\\/]+\\\/.+\\\/|(?:v|e(?:mbed)?)\\\/|.*[?&]v=)|youtu\\.be\\\/)([a-zA-Z0-9_-]{11})\/);\n                return urlMatch ? urlMatch[1] : line; \/\/ E\u011fer URL ise ID'yi al, de\u011filse oldu\u011fu gibi b\u0131rak\n            }).filter(id => id.length === 11); \/\/ Sadece ge\u00e7erli 11 karakterli ID'leri al\n\n            if (videoIds.length === 0) {\n                statusDiv.textContent = 'Ge\u00e7erli video ID\\'si veya URL bulunamad\u0131.';\n                extractButton.disabled = false;\n                return;\n            }\n\n            try {\n                \/\/ Service Worker'a mesaj g\u00f6nder\n                const response = await chrome.runtime.sendMessage({\n                    action: \"extractTranscripts\",\n                    videoIds: videoIds\n                });\n\n                if (response && response.status === \"success\") {\n                    let fullTranscriptText = '';\n                    if (response.data.length > 0) {\n                        response.data.forEach(item => {\n                            fullTranscriptText += <code>Video ID: ${item.videoId}\\n<\/code>;\n                            fullTranscriptText += <code>Transkript:\\n${item.transcript}\\n\\n<\/code>;\n                        });\n                        transcriptOutput.textContent = fullTranscriptText;\n                        statusDiv.textContent = <code>Toplam ${response.data.length} videonun transkripti \u00e7ekildi.<\/code>;\n                        copyAllButton.style.display = 'block';\n                    } else {\n                        statusDiv.textContent = 'Hi\u00e7bir transkript \u00e7ekilemedi.';\n                        transcriptOutput.textContent = 'Veri yok.';\n                    }\n                } else {\n                    statusDiv.textContent = <code>Hata olu\u015ftu: ${response ? response.error : &#039;Bilinmeyen Hata&#039;}<\/code>;\n                    transcriptOutput.textContent = 'Transkriptler al\u0131namad\u0131.';\n                }\n            } catch (error) {\n                console.error(\"Popup'tan Service Worker'a mesaj g\u00f6nderilirken hata:\", error);\n                statusDiv.textContent = <code>\u0130\u015flem s\u0131ras\u0131nda bir hata olu\u015ftu: ${error.message}<\/code>;\n                transcriptOutput.textContent = 'Hata.';\n            } finally {\n                extractButton.disabled = false;\n            }\n        });\n\n        copyAllButton.addEventListener('click', () => {\n            const textToCopy = transcriptOutput.textContent;\n            navigator.clipboard.writeText(textToCopy).then(() => {\n                const originalText = copyAllButton.textContent;\n                copyAllButton.textContent = 'Kopyaland\u0131!';\n                setTimeout(() => {\n                    copyAllButton.textContent = originalText;\n                }, 1500);\n            }).catch(err => {\n                console.error('Kopyalama ba\u015far\u0131s\u0131z:', err);\n                alert('Metni kopyalarken bir hata olu\u015ftu.');\n            });\n        });\n    });\n    <\/pre>\n<p><\/code><\/p>\n<p>Popup aray\u00fcz\u00fc ve JavaScript kodunda \u015funlar \u00f6nemlidir:<\/p>\n<ul>\n<li><code>videoIdsInput<\/code>: Kullan\u0131c\u0131n\u0131n video ID'lerini veya URL'lerini girece\u011fi <code>textarea<\/code>.<\/li>\n<li><code>extractButton<\/code>: Transkript \u00e7\u0131karma i\u015flemini ba\u015flatan d\u00fc\u011fme.<\/li>\n<li><code>statusDiv<\/code>: Kullan\u0131c\u0131ya i\u015flemin durumu hakk\u0131nda bilgi veren alan.<\/li>\n<li><code>transcriptOutput<\/code>: \u00c7ekilen transkriptlerin g\u00f6sterilece\u011fi <code>pre<\/code> etiketi.<\/li>\n<li><code>copyAllButton<\/code>: T\u00fcm transkriptleri panoya kopyalamak i\u00e7in bir d\u00fc\u011fme.<\/li>\n<li><strong>Video ID'lerini \u00c7\u0131karma<\/strong>: Kullan\u0131c\u0131 hem ID'leri hem de tam URL'leri girebilir. Kod, d\u00fczenli ifadeler (regex) kullanarak URL'lerden video ID'lerini ayr\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><code>chrome.runtime.sendMessage<\/code>: Bu fonksiyon, popup'tan Service Worker'a bir mesaj g\u00f6ndererek <code>\"extractTranscripts\"<\/code> aksiyonunu tetikler.<\/li>\n<li><strong>Yan\u0131t\u0131 \u0130\u015fleme<\/strong>: Service Worker'dan gelen yan\u0131t\u0131 i\u015fler, transkriptleri <code>transcriptOutput<\/code> alan\u0131na yazd\u0131r\u0131r ve i\u015flem durumunu <code>statusDiv<\/code>'de g\u00fcnceller.<\/li>\n<li><strong>Kopyalama \u0130\u015flevi<\/strong>: <code>navigator.clipboard.writeText()<\/code> API'si ile \u00e7ekilen t\u00fcm transkriptleri panoya kopyalama \u00f6zelli\u011fi eklenmi\u015ftir.<\/li>\n<li><strong>Hata ve Durum Bildirimleri<\/strong>: Kullan\u0131c\u0131ya anla\u015f\u0131l\u0131r hata mesajlar\u0131 ve i\u015flem durumu g\u00fcncellemeleri sunulur.<\/li>\n<li><strong>Mobil Uyumlu Tasar\u0131m<\/strong>: CSS i\u00e7inde basit bir <code>@media<\/code> sorgusu ile popup'\u0131n k\u00fc\u00e7\u00fck ekranlarda da d\u00fczg\u00fcn g\u00f6r\u00fcnmesi sa\u011flanm\u0131\u015ft\u0131r. Bu, eklentinin farkl\u0131 cihazlarda ve ekran boyutlar\u0131nda daha iyi bir kullan\u0131c\u0131 deneyimi sunmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<p>B\u00f6ylece, YouTube transkriptlerini toplu olarak \u00e7ekmek i\u00e7in t\u00fcm temel bile\u015fenleri tamamlam\u0131\u015f olduk. \u015eimdi, bu eklentiyle neler yap\u0131labilece\u011fine dair ger\u00e7ek d\u00fcnya senaryolar\u0131na ve ileri d\u00fczey ipu\u00e7lar\u0131na g\u00f6z atal\u0131m.<\/p>\n<h2>Vaka Analizi ve Ger\u00e7ek D\u00fcnya Senaryolar\u0131: Bu Eklentiyle Neler Ba\u015far\u0131labilir?<\/h2>\n<p>Geli\u015ftirdi\u011fimiz bu Chrome eklentisi, sadece basit bir metin \u00e7\u0131karma arac\u0131 olman\u0131n \u00f6tesinde, \u00e7e\u015fitli sekt\u00f6rlerde ve kullan\u0131m alanlar\u0131nda g\u00fc\u00e7l\u00fc bir potansiyele sahiptir. Toplu YouTube transkriptleri elde etme yetene\u011fi, \u00f6zellikle veri odakl\u0131 \u00e7al\u0131\u015fan profesyoneller i\u00e7in pek \u00e7ok kap\u0131y\u0131 aralar. \u0130\u015fte bu eklentinin ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131labilece\u011fine dair baz\u0131 vaka analizleri ve uygulama \u00f6rnekleri:<\/p>\n<p><strong>1. \u0130\u00e7erik Pazarlamas\u0131 ve SEO Optimizasyonu:<\/strong> Bir i\u00e7erik pazarlamac\u0131s\u0131, belirli bir ni\u015fdeki en pop\u00fcler 50 YouTube videosunun transkriptlerini \u00e7ekebilir. Bu transkriptleri bir araya getirerek, metin analizi ara\u00e7lar\u0131yla s\u0131k\u00e7a kullan\u0131lan anahtar kelimeleri, trend olan konular\u0131 ve izleyiciyi en \u00e7ok me\u015fgul eden ifade bi\u00e7imlerini tespit edebilir. \u00d6rne\u011fin, \"dijital pazarlama ipu\u00e7lar\u0131\" aramas\u0131nda \u00e7\u0131kan videolardan \u00e7ekilen transkriptler, hangi spesifik terimlerin (\u00f6rn. \"SEO stratejileri\", \"sosyal medya algoritmalar\u0131\", \"i\u00e7erik takvimi\") en \u00e7ok ge\u00e7ti\u011fini g\u00f6sterebilir. Bu bilgiler, yeni video i\u00e7erikleri, blog yaz\u0131lar\u0131 veya e-kitaplar olu\u015ftururken stratejik bir rehber g\u00f6revi g\u00f6r\u00fcr. Ayr\u0131ca, kendi videolar\u0131n\u0131n transkriptlerini \u00e7\u0131kararak, onlar\u0131 blog yaz\u0131lar\u0131na d\u00f6n\u00fc\u015ft\u00fcrebilir veya video a\u00e7\u0131klamalar\u0131nda kullanarak SEO s\u0131ralamalar\u0131n\u0131 iyile\u015ftirebilirler. Bu sayede, videolar\u0131n\u0131n yaln\u0131zca izlenirlik de\u011fil, ayn\u0131 zamanda organik arama sonu\u00e7lar\u0131ndaki g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc de art\u0131rabilirler.<\/p>\n<p><strong>2. Akademik Ara\u015ft\u0131rma ve Sosyal Bilimler:<\/strong> Bir sosyolog, belirli bir sosyal hareketle ilgili y\u00fczlerce YouTube videosunun (tart\u0131\u015fmalar, r\u00f6portajlar, belgeseller) transkriptlerini toplayabilir. Bu b\u00fcy\u00fck metin veri setini kullanarak duygu analizi, konu modellemesi veya kelime frekans analizleri yapabilir. \u00d6rne\u011fin, \"iklim de\u011fi\u015fikli\u011fi\" konulu videolardaki s\u00f6ylemlerin zaman i\u00e7indeki de\u011fi\u015fimini, hangi terimlerin daha pozitif veya negatif \u00e7a\u011fr\u0131\u015f\u0131mlar ta\u015f\u0131d\u0131\u011f\u0131n\u0131 inceleyebilir. Bu, kamuoyu alg\u0131s\u0131n\u0131n nas\u0131l \u015fekillendi\u011fini, farkl\u0131 gruplar\u0131n konuya yakla\u015f\u0131mlar\u0131n\u0131 veya belirli olaylar\u0131n tart\u0131\u015fma dinamiklerini anlamak i\u00e7in e\u015fsiz bir veri kayna\u011f\u0131 sa\u011flar. Geleneksel anket veya m\u00fclakat y\u00f6ntemlerinin s\u0131n\u0131rl\u0131 kald\u0131\u011f\u0131 durumlarda, YouTube transkriptleri daha geni\u015f ve do\u011fal bir veri havuzu sunar.<\/p>\n<p><strong>3. Eri\u015filebilirlik ve \u0130\u00e7erik Yeniden Kullan\u0131m\u0131:<\/strong> \u0130\u015fitme engelli bireyler i\u00e7in video i\u00e7eriklerinin eri\u015filebilirli\u011fini art\u0131rmak isteyen bir sivil toplum kurulu\u015fu veya e\u011fitim kurumu, bir dizi e\u011fitim videosunun transkriptlerini otomatik olarak \u00e7ekerek bunlar\u0131 metin format\u0131nda sunabilir. B\u00f6ylece, video izleyemeyen veya izlemek istemeyen ki\u015filerin de i\u00e7eri\u011fe tam olarak eri\u015fmesini sa\u011flayabilirler. Ayr\u0131ca, e\u011fitimciler, ders materyallerini zenginle\u015ftirmek i\u00e7in belirli konular hakk\u0131ndaki YouTube videolar\u0131n\u0131n transkriptlerini al\u0131p, bunlar\u0131 \u00f6zetleyebilir, anahtar noktalar\u0131 vurgulayabilir veya farkl\u0131 dillerde \u00e7evirerek global bir \u00f6\u011frenci kitlesine hitap edebilirler. Bu sadece eri\u015filebilirli\u011fi art\u0131rmakla kalmaz, ayn\u0131 zamanda i\u00e7eri\u011fin farkl\u0131 \u00f6\u011frenme stillerine uygun hale getirilmesine de yard\u0131mc\u0131 olur.<\/p>\n<p><strong>4. Rekabet Analizi ve Trend Takibi:<\/strong> Bir \u00fcr\u00fcn geli\u015ftirme ekibi, rakiplerinin \u00fcr\u00fcn tan\u0131t\u0131m videolar\u0131 veya m\u00fc\u015fteri yorumlar\u0131n\u0131 i\u00e7eren videolar\u0131n\u0131n transkriptlerini \u00e7\u0131kararak, \u00fcr\u00fcnlerinin g\u00fc\u00e7l\u00fc ve zay\u0131f y\u00f6nlerini, kullan\u0131c\u0131lar\u0131n beklentilerini ve pazar\u0131n genel e\u011filimlerini analiz edebilir. \u00d6rne\u011fin, \"ak\u0131ll\u0131 telefon incelemeleri\" videolar\u0131n\u0131n transkriptlerini inceleyerek, hangi \u00f6zelliklerin (kamera kalitesi, pil \u00f6mr\u00fc, yaz\u0131l\u0131m deneyimi) en \u00e7ok tart\u0131\u015f\u0131ld\u0131\u011f\u0131n\u0131 ve kullan\u0131c\u0131lar taraf\u0131ndan nas\u0131l de\u011ferlendirildi\u011fini h\u0131zl\u0131ca \u00f6\u011frenebilirler. Bu bilgiler, yeni \u00fcr\u00fcn geli\u015ftirme s\u00fcre\u00e7lerinde veya mevcut \u00fcr\u00fcnlerin iyile\u015ftirilmesinde de\u011ferli i\u00e7g\u00f6r\u00fcler sunar. Ayr\u0131ca, trend olan anahtar kelimeler ve konu\u015fma konular\u0131, gelecekteki \u00fcr\u00fcn ve pazarlama stratejilerini belirlemede yol g\u00f6sterici olabilir.<\/p>\n<p>Bu senaryolar, geli\u015ftirilen eklentinin \u00e7ok y\u00f6nl\u00fcl\u00fc\u011f\u00fcn\u00fc ve farkl\u0131 alanlarda nas\u0131l de\u011fer yaratabilece\u011fini g\u00f6stermektedir. Toplu transkript \u00e7\u0131karma yetene\u011fi, veri analizi, i\u00e7erik stratejisi ve eri\u015filebilirlik gibi alanlarda manuel i\u015f y\u00fck\u00fcn\u00fc azaltarak verimlili\u011fi art\u0131r\u0131r ve daha derinle\u015fimli analizlere olanak tan\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve Optimizasyonlar: Performans\u0131 ve Kullan\u0131labilirli\u011fi Nas\u0131l Art\u0131r\u0131r\u0131m?<\/h2>\n<p>Temel eklentimizi ba\u015far\u0131yla olu\u015fturduktan sonra, onu daha da sa\u011flam, h\u0131zl\u0131 ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in baz\u0131 ileri d\u00fczey teknikleri ve optimizasyonlar\u0131 d\u00fc\u015f\u00fcnebiliriz. Bu iyile\u015ftirmeler, eklentinin performans\u0131n\u0131 art\u0131r\u0131rken, ayn\u0131 zamanda daha geni\u015f bir kullan\u0131c\u0131 kitlesine hitap etmesini sa\u011flayacakt\u0131r. \u00d6zellikle toplu i\u015flemler s\u00f6z konusu oldu\u011funda, verimlilik ve hata y\u00f6netimi kritik \u00f6neme sahiptir.<\/p>\n<p><strong>1. Hata Y\u00f6netimi ve Yeniden Deneme Mekanizmalar\u0131:<\/strong> YouTube'un dinamik yap\u0131s\u0131 veya a\u011f ba\u011flant\u0131s\u0131 sorunlar\u0131 nedeniyle transkript \u00e7ekme i\u015flemleri bazen ba\u015far\u0131s\u0131z olabilir. Eklentimize daha robust bir hata y\u00f6netimi eklemek, bu t\u00fcr durumlar\u0131 daha iyi ele almam\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, bir transkript \u00e7ekme i\u015flemi ba\u015far\u0131s\u0131z oldu\u011funda, belirli bir gecikmeyle otomatik olarak yeniden deneme (retry) mekanizmas\u0131 uygulayabiliriz. \u00dc\u00e7 denemeden sonra hala ba\u015far\u0131s\u0131z oluyorsa, kullan\u0131c\u0131ya bilgilendirici bir hata mesaj\u0131 g\u00f6sterebiliriz. Bu, kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir ve eklentinin daha g\u00fcvenilir \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Her bir video i\u00e7in ayr\u0131 hata loglamas\u0131 yapmak ve bu hatalar\u0131 kullan\u0131c\u0131ya anla\u015f\u0131l\u0131r bir dilde sunmak da \u00f6nemlidir.<\/p>\n<pre><code>\n    \/\/ service-worker.js i\u00e7inde retry mant\u0131\u011f\u0131 \u00f6rne\u011fi\n    async function extractWithRetry(videoId, maxRetries = 3) {\n        for (let i = 0; i < maxRetries; i++) {\n            try {\n                \/\/ ... mevcut sekme a\u00e7ma, script enjekte etme ve transkript \u00e7ekme kodunuz ...\n                const [transcriptResponse] = await chrome.scripting.executeScript({\n                    target: { tabId: tab.id },\n                    function: () => window.extractTranscript()\n                });\n                if (transcriptResponse && transcriptResponse.result && !transcriptResponse.result.startsWith(\"Hata:\")) {\n                    return { videoId, transcript: transcriptResponse.result };\n                }\n            } catch (error) {\n                console.warn(<code>Video ${videoId} i\u00e7in deneme ${i + 1} ba\u015far\u0131s\u0131z oldu:<\/code>, error);\n                if (i < maxRetries - 1) {\n                    await new Promise(resolve => setTimeout(resolve, 2000 * (i + 1))); \/\/ Artan gecikme ile bekle\n                }\n            } finally {\n                if (tab && tab.id) {\n                    try {\n                        await chrome.tabs.remove(tab.id);\n                    } catch (e) { \/* Sekme kapan\u0131rken olu\u015fan hatalar\u0131 yoksay *\/ }\n                }\n            }\n        }\n        return { videoId, transcript: \"Transkript \u00e7ekilemedi (t\u00fcm denemeler ba\u015far\u0131s\u0131z).\" };\n    }\n\n    \/\/ <code>extractTranscripts<\/code> aksiyonunda <code>extractWithRetry<\/code> \u00e7a\u011fr\u0131labilir.\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>2. H\u0131z Optimizasyonu ve Paralel \u0130\u015fleme:<\/strong> \u015eu anki eklentimiz, videolar\u0131 tek tek i\u015fler. Ancak, ayn\u0131 anda birden fazla sekme a\u00e7arak bu i\u015flemi h\u0131zland\u0131rabiliriz. Bunun i\u00e7in Promise.all gibi yap\u0131lar\u0131 kullanarak belirli say\u0131da videoyu paralel olarak i\u015flemeye \u00e7al\u0131\u015fabiliriz. Ancak, \u00e7ok fazla sekme a\u00e7mak taray\u0131c\u0131y\u0131 yava\u015flatabilir veya YouTube taraf\u0131ndan bot alg\u0131lanman\u0131za neden olabilir. Bu nedenle, e\u015fzamanl\u0131 i\u015flem say\u0131s\u0131n\u0131 (\u00f6rne\u011fin 2-3 sekme) s\u0131n\u0131rlamak iyi bir stratejidir. Bu, hem performans\u0131 art\u0131r\u0131r hem de sistem kaynaklar\u0131n\u0131n a\u015f\u0131r\u0131 t\u00fcketilmesini \u00f6nler.<\/p>\n<pre><code>\n    \/\/ Service Worker'da paralel i\u015flem mant\u0131\u011f\u0131\n    async function processVideosInBatches(videoIds, batchSize = 3) {\n        const results = [];\n        for (let i = 0; i < videoIds.length; i += batchSize) {\n            const batch = videoIds.slice(i, i + batchSize);\n            const batchPromises = batch.map(id => extractWithRetry(id)); \/\/ Her ID i\u00e7in bir promise\n            const batchResults = await Promise.all(batchPromises); \/\/ Paralel olarak bekle\n            results.push(...batchResults);\n            \/\/ \u0130htiya\u00e7 duyulursa partiler aras\u0131 k\u0131sa bir bekleme ekle\n            await new Promise(resolve => setTimeout(resolve, 1000));\n        }\n        return results;\n    }\n\n    \/\/ <code>extractTranscripts<\/code> aksiyonunda bu fonksiyonu \u00e7a\u011f\u0131r.\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>3. Farkl\u0131 Altyaz\u0131 Formatlar\u0131 ve \u00c7eviri Deste\u011fi:<\/strong> YouTube, videolar i\u00e7in birden fazla dilde altyaz\u0131 veya otomatik \u00e7eviri sunabilir. Eklentimizi, kullan\u0131c\u0131n\u0131n belirli bir dil i\u00e7in transkriptleri \u00e7ekmesini sa\u011flayacak \u015fekilde geli\u015ftirebiliriz. Bu, popup aray\u00fcz\u00fcne bir dil se\u00e7ene\u011fi ekleyerek ve Content Script'in bu dile uygun altyaz\u0131 elementlerini hedeflemesini sa\u011flayarak yap\u0131labilir. Ayr\u0131ca, transkriptleri sadece d\u00fcz metin olarak de\u011fil, SRT veya VTT gibi formatlarda da d\u0131\u015fa aktarma se\u00e7ene\u011fi sunmak, eklentinin kullan\u0131m alanlar\u0131n\u0131 geni\u015fletecektir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: YouTube'un altyaz\u0131 API'sine do\u011frudan eri\u015fim genellikle k\u0131s\u0131tl\u0131d\u0131r. Ancak, Content Script i\u00e7inden sayfan\u0131n JavaScript objelerine veya belirli XML\/JSON isteklerine bakarak dil se\u00e7eneklerini ve ilgili URL'leri bulmak m\u00fcmk\u00fcn olabilir. Bu, daha kararl\u0131 ve do\u011fru bir transkript \u00e7ekme y\u00f6ntemi sunabilir. Ancak bu t\u00fcr yakla\u015f\u0131mlar, YouTube'un sayfa yap\u0131s\u0131ndaki de\u011fi\u015fikliklere kar\u015f\u0131 daha hassast\u0131r.\n    <\/div>\n<p><strong>4. Kullan\u0131c\u0131 Deneyimi ve \u0130lerleme G\u00f6stergesi:<\/strong> \u00d6zellikle toplu i\u015flemler uzun s\u00fcrebilece\u011finden, kullan\u0131c\u0131ya i\u015flemin durumu hakk\u0131nda s\u00fcrekli geri bildirim sa\u011flamak \u00f6nemlidir. Popup'taki bir ilerleme \u00e7ubu\u011fu (progress bar) veya ka\u00e7 videonun tamamland\u0131\u011f\u0131n\u0131 g\u00f6steren bir saya\u00e7, kullan\u0131c\u0131 sabr\u0131n\u0131 art\u0131r\u0131r. Ayr\u0131ca, \u00e7ekilen transkriptleri video ID'lerine g\u00f6re d\u00fczenli bir formatta sunmak ve kolayca indirilebilir hale getirmek (\u00f6rne\u011fin bir TXT dosyas\u0131 olarak), kullan\u0131c\u0131 deneyimini iyile\u015ftirecektir. Popup'\u0131n boyutlar\u0131n\u0131n ve elementlerinin mobil cihazlarda da d\u00fczg\u00fcn g\u00f6r\u00fcnmesi i\u00e7in responsive tasar\u0131m prensiplerini ve CSS Media Query'lerini kullanmak, eklentinin eri\u015filebilirli\u011fini art\u0131r\u0131r.<\/p>\n<pre><code>\n    \/* popup.css veya inline style i\u00e7inde medya sorgusu *\/\n    @media (max-width: 400px) {\n        body {\n            width: auto; \/* K\u00fc\u00e7\u00fck ekranlarda otomatik geni\u015flik *\/\n            padding: 10px;\n        }\n        textarea, button {\n            width: 100%; \/* Tam geni\u015flik *\/\n        }\n    }\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>5. Kal\u0131c\u0131 Depolama ve Veri Y\u00f6netimi:<\/strong> Kullan\u0131c\u0131n\u0131n daha \u00f6nce \u00e7ekti\u011fi transkriptleri veya ayarlar\u0131n\u0131 saklamak i\u00e7in <code>chrome.storage<\/code> API'sini kullanabiliriz. Bu sayede, eklenti kapansa bile veriler kaybolmaz ve kullan\u0131c\u0131lar daha \u00f6nce \u00e7al\u0131\u015ft\u0131klar\u0131 yerden devam edebilirler. Ayr\u0131ca, kullan\u0131c\u0131lar\u0131n b\u00fcy\u00fck boyutlu transkriptleri y\u00f6netmelerine yard\u0131mc\u0131 olacak aray\u00fczler (\u00f6rn. filtreleme, arama) eklemek de d\u00fc\u015f\u00fcn\u00fclebilir.<\/p>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve optimizasyonlar, geli\u015ftirdi\u011finiz Chrome eklentisini daha profesyonel, dayan\u0131kl\u0131 ve kullan\u0131c\u0131lar i\u00e7in daha de\u011ferli hale getirecektir. Her bir iyile\u015ftirme, eklentinin genel kalitesini ve kullan\u0131m kolayl\u0131\u011f\u0131n\u0131 art\u0131rmaya y\u00f6neliktir.<\/p>\n<h2>Sonu\u00e7 ve Gelecek Vizyonu: YouTube Transkript Eklentisiyle Elde Edilenler Neler?<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, YouTube videolar\u0131ndan transkriptleri toplu olarak \u00e7ekmek i\u00e7in g\u00fc\u00e7l\u00fc bir Chrome eklentisi geli\u015ftirmeyi ad\u0131m ad\u0131m \u00f6\u011frendik. Manifest V3'\u00fcn temel prensiplerinden ba\u015flayarak, Service Worker'lar\u0131n arka plan g\u00f6revlerini nas\u0131l y\u00f6netece\u011fini, Content Script'lerin YouTube sayfas\u0131yla nas\u0131l etkile\u015fim kuraca\u011f\u0131n\u0131 ve popup aray\u00fcz\u00fcn\u00fcn kullan\u0131c\u0131yla nas\u0131l ileti\u015fim kuraca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Geli\u015ftirdi\u011fimiz bu eklenti, i\u00e7erik \u00fcreticilerinden akademisyenlere, pazarlamac\u0131lardan ara\u015ft\u0131rmac\u0131lara kadar geni\u015f bir kitleye hitap eden, zaman kazand\u0131ran ve veri odakl\u0131 kararlar almay\u0131 kolayla\u015ft\u0131ran stratejik bir ara\u00e7t\u0131r.<\/p>\n<p>Eklentimiz, YouTube'un dinamik yap\u0131s\u0131yla ba\u015fa \u00e7\u0131kmak i\u00e7in tasarlanm\u0131\u015ft\u0131r ve video ID'lerini veya URL'lerini kullanarak transkriptleri g\u00fcvenilir bir \u015fekilde elde eder. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, bu eklentinin SEO optimizasyonundan i\u00e7erik stratejilerine, akademik ara\u015ft\u0131rmalardan eri\u015filebilirlik \u00e7\u00f6z\u00fcmlerine kadar pek \u00e7ok alanda kullan\u0131labilece\u011fini g\u00f6rd\u00fck. Art\u0131k manuel ve zahmetli transkript \u00e7\u0131karma s\u00fcre\u00e7leri yerine, otomasyonun getirdi\u011fi verimlilikle daha derinle\u015fimli analizlere ve daha yarat\u0131c\u0131 i\u00e7erik geli\u015ftirmeye odaklanabiliriz. Elde edilen transkriptler, anahtar kelime analizi, duygu analizi, konu modellemesi gibi \u00e7e\u015fitli metin madencili\u011fi teknikleri i\u00e7in de\u011ferli bir ham veri kayna\u011f\u0131 sunar.<\/p>\n<p>Gelecekte, bu eklenti daha da geli\u015ftirilebilir. \u00d6rne\u011fin, YouTube API kotas\u0131n\u0131 a\u015fmadan daha b\u00fcy\u00fck veri setlerini i\u015flemek i\u00e7in ak\u0131ll\u0131 bir \u00f6nbellekleme mekanizmas\u0131 entegre edilebilir. Kullan\u0131c\u0131n\u0131n belirli anahtar kelimelere g\u00f6re transkriptlerde arama yapmas\u0131n\u0131 veya belirli b\u00f6l\u00fcmleri vurgulamas\u0131n\u0131 sa\u011flayan geli\u015fmi\u015f bir UI sunulabilir. Ayr\u0131ca, \u00e7ekilen transkriptleri do\u011frudan Google Drive veya Dropbox gibi bulut depolama hizmetlerine aktarma se\u00e7enekleri eklenerek i\u015f ak\u0131\u015f\u0131 daha da optimize edilebilir. Farkl\u0131 dillerdeki altyaz\u0131lar\u0131 \u00e7ekme ve bunlar\u0131 \u00e7evirme yetene\u011fi, eklentinin uluslararas\u0131 kullan\u0131mdaki de\u011ferini art\u0131racakt\u0131r. A\u00e7\u0131k kaynak geli\u015ftirme toplulu\u011funun katk\u0131lar\u0131yla, bu eklenti s\u00fcrekli olarak g\u00fcncellenebilir ve yeni \u00f6zelliklerle zenginle\u015ftirilebilir, b\u00f6ylece YouTube ekosistemindeki de\u011fi\u015fikliklere h\u0131zl\u0131ca adapte olabilir. Bu proje, Chrome eklentisi geli\u015ftirmenin g\u00fcc\u00fcn\u00fc ve esnekli\u011fini g\u00f6steren somut bir \u00f6rnek te\u015fkil etmektedir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n            <strong>Bu eklenti t\u00fcm YouTube videolar\u0131n\u0131n transkriptlerini \u00e7ekebilir mi?<\/strong><\/p>\n<p>Eklenti, YouTube taraf\u0131ndan otomatik olarak olu\u015fturulan altyaz\u0131lar\u0131 veya video y\u00fckleyicisi taraf\u0131ndan sa\u011flanan altyaz\u0131lar\u0131 olan videolar\u0131n transkriptlerini \u00e7ekebilir. E\u011fer bir videoda altyaz\u0131 veya transkript se\u00e7ene\u011fi hi\u00e7 yoksa, eklenti do\u011fal olarak bu veriyi \u00e7ekemez. \u00d6zellikle \u00e7ok eski veya nadir dildeki videolarda altyaz\u0131 bulunmayabilir.<\/p>\n<\/li>\n<li>\n            <strong>Eklenti YouTube API kotam\u0131 etkiler mi?<\/strong><\/p>\n<p>Hay\u0131r, bu eklenti YouTube Data API'sini kullanmaz. Bunun yerine, do\u011frudan taray\u0131c\u0131n\u0131zda a\u00e7\u0131lan YouTube sayfas\u0131n\u0131n DOM yap\u0131s\u0131n\u0131 kullanarak transkript verilerini \u00e7eker. Bu yakla\u015f\u0131m, API kotalar\u0131ndan ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fman\u0131z\u0131 sa\u011flar ve daha az k\u0131s\u0131tlamayla toplu i\u015flem yapman\u0131za olanak tan\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Toplu transkript \u00e7ekerken taray\u0131c\u0131m yava\u015flar m\u0131 veya kilitlenir mi?<\/strong><\/p>\n<p>Eklenti, transkriptleri \u00e7ekmek i\u00e7in her video i\u00e7in arka planda yeni bir sekme a\u00e7\u0131p kapat\u0131r. \u00c7ok say\u0131da video i\u00e7in i\u015flem yaparken taray\u0131c\u0131n\u0131zda hafif bir yava\u015flama hissedebilirsiniz. Service Worker'da uygulanan paralel i\u015flem limiti (varsay\u0131lan olarak 3 video e\u015f zamanl\u0131) ve sekme kapatma mekanizmas\u0131, bu yava\u015flamay\u0131 minimize etmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Ancak \u00e7ok y\u00fcksek say\u0131lardaki videolarda (\u00f6rn. binlerce) i\u015flem s\u00fcresi uzayabilir ve taray\u0131c\u0131n\u0131z\u0131n kaynak t\u00fcketimi artabilir.<\/p>\n<\/li>\n<li>\n            <strong>YouTube'un aray\u00fcz\u00fc de\u011fi\u015firse eklenti \u00e7al\u0131\u015fmaya devam eder mi?<\/strong><\/p>\n<p>YouTube, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) ve DOM yap\u0131s\u0131n\u0131 zaman zaman g\u00fcnceller. Bu t\u00fcr k\u00f6kl\u00fc de\u011fi\u015fiklikler, Content Script'in transkript d\u00fc\u011fmelerini veya panellerini bulma mant\u0131\u011f\u0131n\u0131 etkileyebilir. Eklenti, birden fazla CSS se\u00e7icisi kullanarak bu t\u00fcr de\u011fi\u015fikliklere kar\u015f\u0131 bir miktar esneklik sa\u011flamaya \u00e7al\u0131\u015fsa da, b\u00fcy\u00fck \u00e7apl\u0131 g\u00fcncellemelerde eklentinin yeniden g\u00fcncellenmesi gerekebilir. Bu, web scraping tabanl\u0131 eklentilerin do\u011fas\u0131nda olan bir durumdur.<\/p>\n<\/li>\n<li>\n            <strong>\u00c7ekilen transkriptleri nas\u0131l d\u0131\u015fa aktarabilirim?<\/strong><\/p>\n<p>Mevcut durumda, \u00e7ekilen t\u00fcm transkriptler popup aray\u00fcz\u00fcndeki bir metin alan\u0131nda g\u00f6r\u00fcnt\u00fclenir ve \"T\u00fcm\u00fcn\u00fc Kopyala\" d\u00fc\u011fmesi ile kolayca panoya kopyalanabilir. Kopyalad\u0131\u011f\u0131n\u0131z metni daha sonra istedi\u011finiz bir metin d\u00fczenleyiciye veya dosyaya (\u00f6rn. TXT, DOCX) yap\u0131\u015ft\u0131rarak kaydedebilirsiniz. Gelecekteki geli\u015ftirmelerde, do\u011frudan dosya indirme (TXT, CSV gibi) se\u00e7enekleri eklenebilir.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35025","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?<\/title>\n<meta name=\"description\" content=\"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-24T21:31:18+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?\",\"datePublished\":\"2025-11-24T21:31:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\"},\"wordCount\":4783,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\",\"name\":\"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-24T21:31:18+00:00\",\"description\":\"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?","description":"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/","og_locale":"tr_TR","og_type":"article","og_title":"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?","og_description":"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-24T21:31:18+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?","datePublished":"2025-11-24T21:31:18+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/"},"wordCount":4783,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/","url":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/","name":"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-24T21:31:18+00:00","description":"YouTube videolar\u0131ndan transkriptleri tek tek kopyalamak zaman al\u0131c\u0131 ve zahmetli bir s\u00fcre\u00e7tir. Peki ya y\u00fczlerce videonun transkriptini sadece birka\u00e7 t\u0131klamayla toplu olarak \u00e7\u0131karabilseydik? Bu makale, i\u00e7erik \u00fcreticileri, ara\u015ft\u0131rmac\u0131lar ve veri analistleri i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek, YouTube transkriptlerini toplu bir \u015fekilde elde etmenizi sa\u011flayacak bir Chrome eklentisi geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/youtube-transkriptlerini-toplu-cikaran-chrome-eklentisi-nasil-yapilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"YouTube Transkriptlerini Toplu \u00c7\u0131karan Chrome Eklentisi Nas\u0131l Yap\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35025","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35025"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35025\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}