Youtube Video Upload API Hakkında [PHP]

Mehmet4226

Kayıtlı Üye
Katılım
30 Mayıs 2014
Mesajlar
1.182
Tepkime puanı
0
Puan
0
Yaş
27
Konum
Dünya
merhaba hocalarım. PHP ile youtube video yükletmek istiyorum fakat yapamadım. Client id ve client secret aldım onunla token aldırtıyorum gelen kodu kayıt ediyorum oraya kadar herşey normal fakat youtube kütüphanesine geldiğim zaman yapamadım. Kütüphanede anlamadım. Lütfen anlayan arkadaşlar yoruma yazarlarsa nasıl olduğunu bana postlu felan işlem gerekmiyor sadece client id secret id ve tokeni girecem upload olacak. Lütfen yardımcı olalım :) Uzman hocalarımdan yardım almak için etiketliyorum etiket için özür dilerim :( : [MENTION=11620]era[/MENTION] [MENTION=7797]Web_Scripti[/MENTION] [MENTION=17398]Lastwisher[/MENTION] [MENTION=8450]Rigobert[/MENTION]
 
https://developers.google.com/youtube/v3/docs/videos/insert#examples

Araştırdınız mı bu sayfayı ? PHP biliyorsanız sorun yok normalde, neyi anlamadınız söylerseniz yardımcı olmaya çalışırım

orayada baktım çok ama anlamadım hocam. client id ile secret girdiğim zaman oauth2 den izin alıyorum code döndürüyor o kodu ve client id ve secreti veritabanına kayıt ediyorum ordan yükleticem yani izin felan almayacak bunu yazdığım zaman "Authorization Required

You need to authorize access before proceeding." böyle diyor. zaten izinli kanal izin kodunu nereye girecem onu anlamadım php bilgim çok profesyonel değil :D
 
orayada baktım çok ama anlamadım hocam. client id ile secret girdiğim zaman oauth2 den izin alıyorum code döndürüyor o kodu ve client id ve secreti veritabanına kayıt ediyorum ordan yükleticem yani izin felan almayacak bunu yazdığım zaman "Authorization Required

You need to authorize access before proceeding." böyle diyor. zaten izinli kanal izin kodunu nereye girecem onu anlamadım php bilgim çok profesyonel değil :D

REPLACE_ME yazılan yerleri değiştirmeniz gerekiyor alt kısımlardada var.
App id ve s. veritabanından çekmeden önce manuel olarak yapın test edin.


Birde video yükleyeceğin hesapla mutlaka izin almalısın, tam olarak anladımmı bilmiyorum biraz daha açıklayıcı olursan çözeriz kısa sürede :)
 
REPLACE_ME yazılan yerleri değiştirmeniz gerekiyor alt kısımlardada var.
App id ve s. veritabanından çekmeden önce manuel olarak yapın test edin.


Birde video yükleyeceğin hesapla mutlaka izin almalısın, tam olarak anladımmı bilmiyorum biraz daha açıklayıcı olursan çözeriz kısa sürede :)

hocam şimdi orayaları değiştirdim zaten kendime göre. ben kendime bot yazıcam. bu sistemde her seferinde izin vermek istiyor. çünkü $_SESSION a atıyor ben onu yapmayacağım bot kendisi yapacak izin tek seferlik vericem gerisini sadece bot yükleme yapacak burdaki mantık $_SESSION öldüğü zaman tekrar izin istiyor ben bu $_SESSIONU ordaki koda nasıl tanıtıcam gelen sessionu aldım ama nereye yazacam bu sessionu
 
hala bulamadım bir allahın kulu yok mu şöyle şöyle yap diye anlatacak?
 
hala bulamadım bir allahın kulu yok mu şöyle şöyle yap diye anlatacak?

Konuyu yeni gördüm :) Youtube apiyi kullanmadım daha önce ama o sana verilen token al öle kenarda sakla diye verilmiyor. Sorgu atmanın bir çok şekli var o yüzden şöyle olmalıdır demiyorum ama o token her sorguda kullanılıyor. Misal get atarken url'den de isteyebilir yada header'dan da isteyebilir. Ama bir şekilde her sorguda ister.
 
Bu kodu kullanabilirsin. düzenlemen gereken yerleri işaretledim. videonun kategorileri numaratik olarak belirtiliyor. kodun içersinde kategorileri nereden bulacağın gösteriliyor. api explorer kullanabiliyorsan alabilirsin. bulamazsan kategorileri de yazarım buraya. videnun gizliliğinide ayarlamak için public,private,unlisted seçeneklerinden birini kullanabilirsin.

Kod:
<?php

/**
 * Library Requirements
 *
 * 1. Install composer (https://getcomposer.org)
 * 2. On the command line, change to this directory (api-samples/php)
 * 3. Require the google/apiclient library
 *    $ composer require google/apiclient:~2.0
 */
if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
  throw new \Exception('please run "composer require google/apiclient:~2.0" in "' . __DIR__ .'"');
}

require_once __DIR__ . '/vendor/autoload.php';
session_start();

/*
 * You can acquire an OAuth 2.0 client ID and client secret from the
 * {{ Google Cloud Console }} <{{ https://cloud.google.com/console }}>
 * For more information about using OAuth 2.0 to access Google APIs, please see:
 * <https://developers.google.com/youtube/v3/guides/authentication>
 * Please ensure that you have enabled the YouTube Data API for your project.
 */
$OAUTH2_CLIENT_ID = '[B][COLOR="Red"]REPLACE_ME[/COLOR][/B]';
$OAUTH2_CLIENT_SECRET = '[B][COLOR="Red"]REPLACE_ME[/COLOR][/B]';

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
    FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);

// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);

// Check if an auth token exists for the required scopes
$tokenSessionKey = 'token-' . $client->prepareScopes();
if (isset($_GET['code'])) {
  if (strval($_SESSION['state']) !== strval($_GET['state'])) {
    die('The session state did not match.');
  }

  $client->authenticate($_GET['code']);
  $_SESSION[$tokenSessionKey] = $client->getAccessToken();
  header('Location: ' . $redirect);
}

if (isset($_SESSION[$tokenSessionKey])) {
  $client->setAccessToken($_SESSION[$tokenSessionKey]);
}

// Check to ensure that the access token was successfully acquired.
if ($client->getAccessToken()) {
  $htmlBody = '';
  try{
    // REPLACE this value with the path to the file you are uploading.
    $videoPath = "[B][COLOR="Red"]/path/to/file.mp4[/COLOR][/B]";

    // Create a snippet with title, description, tags and category ID
    // Create an asset resource and set its snippet metadata and type.
    // This example sets the video's title, description, keyword tags, and
    // video category.
    $snippet = new Google_Service_YouTube_VideoSnippet();
    $snippet->setTitle("[B][COLOR="Red"]Test title[/COLOR][/B]");
    $snippet->setDescription("[B][COLOR="Red"]Test description[/COLOR][/B]");
    $snippet->setTags(array("tag1", "tag2"));

    // Numeric video category. See
    // https://developers.google.com/youtube/v3/docs/videoCategories/list
    $snippet->setCategoryId("[B][COLOR="Red"]22[/COLOR][/B]");

    // Set the video's status to "public". Valid statuses are "public",
    // "private" and "unlisted".
    $status = new Google_Service_YouTube_VideoStatus();
    $status->privacyStatus = "[B][COLOR="Red"]public[/COLOR][/B]";

    // Associate the snippet and status objects with a new video resource.
    $video = new Google_Service_YouTube_Video();
    $video->setSnippet($snippet);
    $video->setStatus($status);

    // Specify the size of each chunk of data, in bytes. Set a higher value for
    // reliable connection as fewer chunks lead to faster uploads. Set a lower
    // value for better recovery on less reliable connections.
    $chunkSizeBytes = 1 * 1024 * 1024;

    // Setting the defer flag to true tells the client to return a request which can be called
    // with ->execute(); instead of making the API call immediately.
    $client->setDefer(true);

    // Create a request for the API's videos.insert method to create and upload the video.
    $insertRequest = $youtube->videos->insert("status,snippet", $video);

    // Create a MediaFileUpload object for resumable uploads.
    $media = new Google_Http_MediaFileUpload(
        $client,
        $insertRequest,
        'video/*',
        null,
        true,
        $chunkSizeBytes
    );
    $media->setFileSize(filesize($videoPath));


    // Read the media file and upload it chunk by chunk.
    $status = false;
    $handle = fopen($videoPath, "rb");
    while (!$status && !feof($handle)) {
      $chunk = fread($handle, $chunkSizeBytes);
      $status = $media->nextChunk($chunk);
    }

    fclose($handle);

    // If you want to make other calls after the file upload, set setDefer back to false
    $client->setDefer(false);


    $htmlBody .= "<h3>Video Uploaded</h3><ul>";
    $htmlBody .= sprintf('<li>%s (%s)</li>',
        $status['snippet']['title'],
        $status['id']);

    $htmlBody .= '</ul>';

  } catch (Google_Service_Exception $e) {
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
        htmlspecialchars($e->getMessage()));
  } catch (Google_Exception $e) {
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
        htmlspecialchars($e->getMessage()));
  }

  $_SESSION[$tokenSessionKey] = $client->getAccessToken();
} elseif ($OAUTH2_CLIENT_ID == 'REPLACE_ME') {
  $htmlBody = <<<END
  <h3>Client Credentials Required</h3>
  <p>
    You need to set <code>\$OAUTH2_CLIENT_ID</code> and
    <code>\$OAUTH2_CLIENT_ID</code> before proceeding.
  <p>
END;
} else {
  // If the user hasn't authorized the app, initiate the OAuth flow
  $state = mt_rand();
  $client->setState($state);
  $_SESSION['state'] = $state;

  $authUrl = $client->createAuthUrl();
  $htmlBody = <<<END
  <h3>Authorization Required</h3>
  <p>You need to <a href="$authUrl">authorize access</a> before proceeding.<p>
END;
}
?>

<!doctype html>
<html>
<head>
<title>Video Uploaded</title>
</head>
<body>
  <?=$htmlBody?>
</body>
</html>
 
Kişiselleştirme

Tema editörü

Ayarlar Renkler

  • Mobil kullanıcılar bu fonksiyonları kullanamaz.

    Alternatif header

    Farklı bir görünüm için alternatif header yapısını kolayca seçebilirsiniz.

    Görünüm Modu Seçimi

    Tam ekran ve dar ekran modları arasında geçiş yapın.

    Izgara Görünümü

    Izgara modu ile içerikleri kolayca inceleyin ve düzenli bir görünüm elde edin.

    Resimli Izgara Modu

    Arka plan görselleriyle içeriğinizi düzenli ve görsel olarak zengin bir şekilde görüntüleyin.

    Yan Paneli Kapat

    Yan paneli gizleyerek daha geniş bir çalışma alanı oluşturun.

    Sabit Yan Panel

    Yan paneli sabitleyerek sürekli erişim sağlayın ve içeriğinizi kolayca yönetin.

    Box görünüm

    Temanızın yanlarına box tarzı bir çerçeve ekleyebilir veya mevcut çerçeveyi kaldırabilirsiniz. 1300px üstü çözünürler için geçerlidir.

    Köşe Yuvarlama Kontrolü

    Köşe yuvarlama efektini açıp kapatarak görünümü dilediğiniz gibi özelleştirin.

  • Renginizi seçin

    Tarzınızı yansıtan rengi belirleyin ve estetik uyumu sağlayın.

Geri