13

https://developers.google.com/youtube/v3/docs/videos/insertで説明されているように、PHPでcurlを使用してYoutubeAPIv3を使用してビデオをアップロードします。

私はこの機能を持っています

function uploadVideo($file, $title, $description, $tags, $categoryId, $privacy)
{
    $token = getToken(); // Tested function to retrieve the correct AuthToken

    $video->snippet['title']         = $title;
    $video->snippet['description']   = $description;
    $video->snippet['categoryId']    = $categoryId;
    $video->snippet['tags']          = $tags; // array
    $video->snippet['privacyStatus'] = $privacy;
    $res = json_encode($video);

    $parms = array(
        'part'  => 'snippet',
        'file'  => '@'.$_SERVER['DOCUMENT_ROOT'].'/complete/path/to/'.$file
        'video' => $res
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/upload/youtube/v3/videos');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $parms);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$token['access_token']));
    $return = json_decode(curl_exec($ch));
    curl_close($ch);

    return $return;
}

しかし、それはこれを返します

stdClass Object
(
    [error] => stdClass Object
        (
            [errors] => Array
                (
                    [0] => stdClass Object
                        (
                            [domain] => global
                            [reason] => badContent
                            [message] => Unsupported content with type: application/octet-stream
                        )

                )

            [code] => 400
            [message] => Unsupported content with type: application/octet-stream
        )

)

ファイルはMP4です。

誰でも助けることができますか?

4

4 に答える 4

25

更新されたバージョン: カスタム アップロード URL と、アップロード プロセスでのメタデータの送信が追加されました。プロセス全体で 2 つのリクエストが必要です。

  1. カスタムのアップロード場所を取得する

    まず、アップロード URL の POST リクエストを次のように作成します。

    "https://www.googleapis.com/upload/youtube/v3/videos"
    

    2 つのヘッダーを送信する必要があります。

    "Authorization": "Bearer {YOUR_ACCESS_TOKEN}"
    "Content-type": "application/json"
    

    3 つのパラメーターを送信する必要があります。

    "uploadType": "resumable"
    "part": "snippet, status"
    "key": {YOUR_API_KEY}
    

    また、リクエスト本文で動画のメタデータを送信する必要があります。

        {
            "snippet": {
                "title": {VIDEO TITLE},
                "description": {VIDEO DESCRIPTION},
                "tags": [{TAGS LIST}],
                "categoryId": {YOUTUBE CATEGORY ID}
            },
            "status": {
                "privacyStatus": {"public", "unlisted" OR "private"}
            }
        }
    

    このリクエストから、ヘッダーに「場所」フィールドを含むレスポンスを取得する必要があります。

  2. ファイルを送信するカスタムの場所に POST します。

    アップロードには、1 つのヘッダーが必要です。

    "Authorization": "Bearer {YOUR_ACCESS_TOKEN}"
    

    そして、ファイルをデータ/本文として送信します。

クライアントがどのように機能するかを読んでみると、コード 500、502、503、または 504 のエラーが返された場合に再試行することを推奨していることがわかります。私は cURL の代わりに python & urllib2 を使用していますが、私のシステムでは毎回動作します。

また、カスタム アップロードの場所により、このバージョンはアップロードの再開が可能ですが、まだ必要ではありません。

于 2012-11-27T02:55:47.263 に答える
1

残念ながら、PHP からの YouTube API v3 アップロードの具体的な例はまだありませんが、私の一般的なアドバイスは次のとおりです。

  • cURL の代わりにPHP クライアント ライブラリを使用します。
  • ドライブ API 用に記述されたこの例に基づいてコードを作成します。YouTube API v3 は他の Google API と共通の API インフラストラクチャを共有しているため、ファイルのアップロードなどを行うための例は、さまざまなサービス間で非常に類似しているはずです。
  • YouTube v3 アップロードで設定する必要がある特定のメタデータについては、Python の例をご覧ください。

一般に、cURL コードには多くの誤りがあり、PHP クライアント ライブラリを使用する方がはるかに優れていると考えているため、修正に必要なすべての手順を説明することはできません。cURL を使用したいと確信している場合は、具体的なガイダンスを提供するために他の人に委ねます。

于 2012-11-07T20:23:43.457 に答える