Uzun bir aradan sonra tekrardan merhabalar THT ailesi
bugün Python ile youtube'ye nasıl video indirebileceğiniz anlatacağım(bunu API ile yapacağız)
ve sonuna kadar okumadan bu projeye girişmenizi tavsiye etmem fazla uzatmadan başlayalım
NOT: son kısımdaki uyarıyı projeye başlamadan lütfen okuyun.
bugün Python ile youtube'ye nasıl video indirebileceğiniz anlatacağım(bunu API ile yapacağız)
ve sonuna kadar okumadan bu projeye girişmenizi tavsiye etmem fazla uzatmadan başlayalım
NOT: son kısımdaki uyarıyı projeye başlamadan lütfen okuyun.
1) Başlamadan önce olması gerekenler;
1)Youtube hesabınız
2)Youtube API hesabı (hesap açmak için "Hesap oluştur")
Eğer bu iki şeye sahip isek devam edebiliriz kullandığınız python editörünü açıp terminalden sanal ortama giriş yapacağız
kullandığınız işletim sistemine göre değişir (windows üzerinden anlatacağım)
sonrasında sanal ortamı oluşturacağız
ve en sonunda sanal ortamımızı aktive edeceğiz
Şu şekilde bir görsel elde etmemiz gerekir terminalde
kullandığınız işletim sistemine göre değişir (windows üzerinden anlatacağım)
Python:
#
# Eğer Python 3.x kullanıyorsanız
python -m venv myenv
sonrasında sanal ortamı oluşturacağız
Python:
# Eğer Python 3.x kullanıyorsanız
python -m venv myenv
Python:
myenv\Scripts\activate
Şu şekilde bir görsel elde etmemiz gerekir terminalde
2) İndirmemiz gereken kütüphaneler:
Python:
pip install --uprade google-api-python-client
Python:
pip install --uprade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Python:
pip instal oauth2client
bu biraz uzun bir işlem ve bunu anlatmak için çok fazla resim kullanmam gerekir ve
konuyu gereksiz yere uzatır bu durum ondan dolayı bunu bir videodan göstereceğim
şu linke gidiniz: API KEY
11. dakika 58. saniyeden 16.dk 2.sn'ye kadar ki tüm işlemleri gerçekleştirin
bu işlemleri gerçekleştirdikten sonra tekrardan vs code açıyoruz ve projemiz olduğu kısımda yeni bir txt dosyası açıyoruz
bu dosyanın adını "client_secrets.json" koymalıyız çünkü kod içerisinde bu şekilde kaydedeceğiz birazdan bu adımı tamamladıktan
sonra bu açtığımız dosyanın içine şu değeri gireceğiz
Kod:
{
"web": {
"client_id": "[[INSERT CLIENT ID HERE]]",
"client_secret": "[[INSERT CLIENT SECRET HERE]]",
"redirect_uris": [],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token"
}
}
şimdi eğer hatırlarsanız biz Youtube API den secret id ve client secret değeri almıştık şimdi sıra onları kullanmaya gelecek
evet burada altını kırmızı renge boyadığım yerdeki secret_id ve client_secret kısmındaki karşılık gelen değerleri yerine Youtube API kısmından aldığımız değerleri kopyala yağıştır yapacağız
örnek:
Kod:
"client_id": "kopyala-yapıştır yağacağımız yer", #Youtube API den aldığımız Client_ID 'yi bu kısıma kopyala yapıştır yapacağız
"client_secret": "kopyala-yapıştır yapacağımız yer", #Youtube API den aldığımız Client_secret 'ı bu kısıma kopyala yapıştır yapacağız
bu adımları sıkıntısız şekilde atlattıysak şimdi projenin asıl kısımına denk geliyoruz şimdi projemize geri dönüyoruz ve yeni bir dosya oluşturacağız
oluşturacağımız dosya python dosyası olacak ve dosyanın adı "upload.py" yapmaya dikkat edin aksi takdirde çalışmaz(kodun içerisinde yazarken "upload.py" diye ekleyeceğiz ondan)
ve bu oluşturduğumuz "upload.py" dosyasını altta verdiğim kodu kopyala-yapıştır yapıyoruz
Python:
import httplib2
import os
import random
import sys
import time
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow
# Explicitly tell the underlying HTTP transport library not to retry, since
# we are handling retry logic ourselves.
httplib2.RETRIES = 1
# Maximum number of times to retry before giving up.
MAX_RETRIES = 10
# Always retry when these exceptions are raised.
RETRIABLE_EXCEPTIONS = (httplib2.HttpLib2Error, IOError)
RETRIABLE_STATUS_CODES = [500, 502, 503, 504]
CLIENT_SECRETS_FILE = "client_secrets.json"
YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
# This variable defines a message to display if the CLIENT_SECRETS_FILE is
# missing.
MISSING_CLIENT_SECRETS_MESSAGE = """
WARNING: Please configure OAuth 2.0
To make this sample run you will need to populate the client_secrets.json file
found at:
%s
with information from the API Console
https://console.cloud.google.com/
For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__),
CLIENT_SECRETS_FILE))
VALID_PRIVACY_STATUSES = ("public", "private", "unlisted")
def get_authenticated_service(args):
flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
scope=YOUTUBE_UPLOAD_SCOPE,
message=MISSING_CLIENT_SECRETS_MESSAGE)
storage = Storage("%s-oauth2.json" % sys.argv[0])
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = run_flow(flow, storage, args)
return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
http=credentials.authorize(httplib2.Http()))
def initialize_upload(youtube, options):
tags = None
if options.keywords:
tags = options.keywords.split(",")
body=dict(
snippet=dict(
title=options.title,
description=options.description,
tags=tags,
categoryId=options.category
),
status=dict(
privacyStatus=options.privacyStatus
)
)
# Call the API's videos.insert method to create and upload the video.
insert_request = youtube.videos().insert(
part=",".join(body.keys()),
body=body,
# The chunksize parameter specifies the size of each chunk of data, in
# bytes, that will be uploaded at a time. Set a higher value for
# reliable connections as fewer chunks lead to faster uploads. Set a lower
# value for better recovery on less reliable connections.
#
# Setting "chunksize" equal to -1 in the code below means that the entire
# file will be uploaded in a single HTTP request. (If the upload fails,
# it will still be retried where it left off.) This is usually a best
# practice, but if you're using Python older than 2.6 or if you're
# running on App Engine, you should set the chunksize to something like
# 1024 * 1024 (1 megabyte).
media_body=MediaFileUpload(options.file, chunksize=-1, resumable=True)
)
resumable_upload(insert_request)
# This method implements an exponential backoff strategy to resume a
# failed upload.
def resumable_upload(insert_request):
response = None
error = None
retry = 0
while response is None:
try:
print ("Uploading file...")
status, response = insert_request.next_chunk()
if response is not None:
if 'id' in response:
print ("Video id '%s' was successfully uploaded.") % response['id']
else:
exit("The upload failed with an unexpected response: %s" % response)
except HttpError as e:
if e.resp.status in RETRIABLE_STATUS_CODES:
error = "A retriable HTTP error %d occurred:\n%s" % (e.resp.status,
e.content)
else:
raise
except RETRIABLE_EXCEPTIONS as e:
error = "A retriable error occurred: %s" % e
if error is not None:
print(" error")
retry += 1
if retry > MAX_RETRIES:
exit("No longer attempting to retry.")
max_sleep = 2 ** retry
sleep_seconds = random.random() * max_sleep
print( "Sleeping %f seconds and then retrying...") % sleep_seconds
time.sleep(sleep_seconds)
if __name__ == '__main__':
argparser.add_argument("--file", required=True, help=r"c:\Users\user\123.mp4")
argparser.add_argument("--title", help="fln", default="Test Title")
argparser.add_argument("--description", help="fin",
default="Test Description")
argparser.add_argument("--category", default="22",
help="24 " +
"See https://developers.google.com/youtube/v3/docs/videoCategories/list")
argparser.add_argument("--keywords", help="abc",
default="")
argparser.add_argument("--privacyStatus", choices=VALID_PRIVACY_STATUSES,
default=VALID_PRIVACY_STATUSES[0], help="private")
args = argparser.parse_args()
if not os.path.exists(args.file):
exit("Please specify a valid file using the --file= parameter.")
youtube = get_authenticated_service(args)
try:
initialize_upload(youtube, args)
except HttpError as e:
print ("An HTTP error %d occurred:\n%s") % (e.resp.status, e.content)
Burada ayarlamanız gerekecek bir şey yok sadece kopyala yapıştır yapsanız yeterli olacaktır(fakat hata veriyorsa bana bunu bildirin yardımcı olmaya çalışırım)
Eğer bu kısımı da sorunsuz şekilde atlattıysak son yere gelmiş olduk
3) Son Kısım
şimdi tekrar terminale geliyoruz ve şu kodu giriyoruz:
Kod:
python upload_video.py --file="/users/user/123.mp4" --title="deneme" --description="deneme1" --keywords="video" --category="22" --privacyStatus="private"
Şimdi burada direkt copy-paste yapmayacağız burada sizin girmeniz gereken parametreler var bunları teker teker açıklayacağım;
1) --file: burada tırnak arasına gireceğiniz parametre sizin youtube indireceğiniz videonun dosya yolunu girmelisin fakat dikkat edin benim girdiğim gibi dosya yolunu girin
2) --title = burada tırnak arasına gireceğiniz parametre sizin yükleyeceğiniz videonun başlığı olacaktır
3) --description = burada tırnak arasına gireceğiniz parametre sizin yükleyeceğiniz videonun açıklaması olacaktır
4) --keywords = burada tırnak arasına gireceğiniz parametre sizin videonuzun aranırken anahtar kelimelerin belirlemenizi sağlıyor(ama bu bir işe yaramayacak en sonda sebebini söyleyeceğim)
5) --category = burada gireceğiniz parametre işinize yaramayacak varsayılan(22) olarak bırakmanızı tavsiye ederim
6) --privacyStatus = burada gireceğiniz parametre sizin videonunuzun nasıl yüklemek istediğinizi (gizli = private, public = herkese açık, unlisted = liste dışı) ayarlamanızı sağaıyacaktır fakat bu parametre de bir işe yaramayacaktır ne yaparsanız yapın "private" olarak ayarlayacaktır sebebini en son açıklayacağım.
bu değerleri girdikten sonra terminalden "enter" tuşuna basıp videonunuzu youtubeye indrebilirsiniz tabii gerekli izinleri verdikten sonra
1) --file: burada tırnak arasına gireceğiniz parametre sizin youtube indireceğiniz videonun dosya yolunu girmelisin fakat dikkat edin benim girdiğim gibi dosya yolunu girin
2) --title = burada tırnak arasına gireceğiniz parametre sizin yükleyeceğiniz videonun başlığı olacaktır
3) --description = burada tırnak arasına gireceğiniz parametre sizin yükleyeceğiniz videonun açıklaması olacaktır
4) --keywords = burada tırnak arasına gireceğiniz parametre sizin videonuzun aranırken anahtar kelimelerin belirlemenizi sağlıyor(ama bu bir işe yaramayacak en sonda sebebini söyleyeceğim)
5) --category = burada gireceğiniz parametre işinize yaramayacak varsayılan(22) olarak bırakmanızı tavsiye ederim
6) --privacyStatus = burada gireceğiniz parametre sizin videonunuzun nasıl yüklemek istediğinizi (gizli = private, public = herkese açık, unlisted = liste dışı) ayarlamanızı sağaıyacaktır fakat bu parametre de bir işe yaramayacaktır ne yaparsanız yapın "private" olarak ayarlayacaktır sebebini en son açıklayacağım.
bu değerleri girdikten sonra terminalden "enter" tuşuna basıp videonunuzu youtubeye indrebilirsiniz tabii gerekli izinleri verdikten sonra
4) Gerekli İzinler
terminalde "enter" tuşuna basıp kodu çalıştırdıktan sonra varsayılan tarayıcıyı açacak ve hangi hesabınıza video indirmenizi istediğiniz soracaktır
orada istediğiniz hesabı seçip karşınıza gelen onayları onayladıktan sonra videonuz youtube kanalınıza inecektir.
buraya kadar umarım iyi bir şekilde anlatabilmişimdir anlamadığınız takıldığınız yer olursa sorun cevaplarım
ve son kısımdaki uyarıyı projeye başlamadan lütfen okuyun
***********************************************
ÖNEMLİ UYARI: Her şeyi bitirip videonuz yüklendikten sonra şunu fark edeceksiniz videonuz "private(gizli)" olarak paylaşacaktır.
bunu bende sizin en son öğrendiğiniz gibi bende projeyi bitirip çalıştırdığım da fark ettim bunun sebebi ise youtube'nin politikasından ötürü
API ile yüklenen videonun private şekilde yüklüyor açıkçası bunu bende en son öğrenince çok üzüldüm çünkü tüm emeğim boşa gitmiş gibi hissetim
bunu söyleyince aklınızda şöyle bir soru oluşabilir madem boşunaydı neden paylaştın vs. diyebilirsiniz buna vereceğim cevap şu benim bu konuyu paylaşmamın sebebi yazılıma yeni başlayan veya orta seviyede olan birisi API ile proje yapmanın nasıl bir şey olduğunu görmesini istedim ve ikinci sebebim şuydu bu konuyla ilgili hiçbir yerde Türkçe bir kaynak yoktu bende bir Türkçe kaynak olsun istedim.
***********************************************
Buraya kadar okuyan herkese teşekkür ederim
Tekrar görüşüne kadar sağlıcakla kalın THT ailesi
orada istediğiniz hesabı seçip karşınıza gelen onayları onayladıktan sonra videonuz youtube kanalınıza inecektir.
buraya kadar umarım iyi bir şekilde anlatabilmişimdir anlamadığınız takıldığınız yer olursa sorun cevaplarım
ve son kısımdaki uyarıyı projeye başlamadan lütfen okuyun
***********************************************
ÖNEMLİ UYARI: Her şeyi bitirip videonuz yüklendikten sonra şunu fark edeceksiniz videonuz "private(gizli)" olarak paylaşacaktır.
bunu bende sizin en son öğrendiğiniz gibi bende projeyi bitirip çalıştırdığım da fark ettim bunun sebebi ise youtube'nin politikasından ötürü
API ile yüklenen videonun private şekilde yüklüyor açıkçası bunu bende en son öğrenince çok üzüldüm çünkü tüm emeğim boşa gitmiş gibi hissetim
bunu söyleyince aklınızda şöyle bir soru oluşabilir madem boşunaydı neden paylaştın vs. diyebilirsiniz buna vereceğim cevap şu benim bu konuyu paylaşmamın sebebi yazılıma yeni başlayan veya orta seviyede olan birisi API ile proje yapmanın nasıl bir şey olduğunu görmesini istedim ve ikinci sebebim şuydu bu konuyla ilgili hiçbir yerde Türkçe bir kaynak yoktu bende bir Türkçe kaynak olsun istedim.
***********************************************
Buraya kadar okuyan herkese teşekkür ederim
Tekrar görüşüne kadar sağlıcakla kalın THT ailesi
Son düzenleme: