1

「再開可能なセッションを開始する」YouTube Data API - 再開可能なアップロードのドキュメントに従おうとすると、parseError が発生します。

取り組み、応答、およびコードの完全なリスト

  1. Google API を読みました - 「グローバル ドメイン エラー」ページ「parseError API サーバーはリクエスト本文を解析できません。」
  2. 「YouTube Developers Live: Debugging & Dealing with Errors」を見ましたが、そこに手がかりが残っています
  3. 同様の質問について「スタックオーバーフロー」を読みましたが、回答が得られないか、回答がまだ明確ではありません
  4. アップロードしたいテスト youtube アカウントには、動画のある youtube チャンネルがあります
  5. クライアント PHP アップロード API を試してみましたが、後で再開可能なアップロードではないことがわかりました。
  6. 再開可能なアップロードの方が良い選択肢だと思ったので、接続が途切れた場合に時間を無駄にしてユーザーを苛立たせることはありません....
  7. hostgator アカウントから PHP を実行しています
  8. エラーが発生しなかった場合、「ステップ 2 - 再開可能なセッション URI を保存する」データではなく、通常のスニペットとステータス データが返されることに気付きました。
  9. データベースから引き出された長寿命のアクセストークンを使用しています...リクエストでは、アクセストークンを保存する前に、YouTubeユーザーがビデオのチャンネルを持っています
  10. tokeninfo でアクセス トークンを確認しますか?
  11. 「uploadType」を「uploadtype」に変更すると、「メッセージ」が生成されることに気付きました:「Media type 'application/json; charset=utf-8'」

はサポートされていません。有効なメディア タイプ: [video/*, application/octet-stream]"、このエラーに続いてコンテンツ タイプを "application/octet-stream" に変更すると
、Step ではなく "kind = youtube#video object with json snippet,status"が返されます。 2 - 再開可能なセッション URI を保存するので、「uploadType」と「application/json;」に戻します。charset=utf-8" が同じ解析エラーに直面するようになりました

  1. ドキュメントで「リクエスト URL のパラメーター値は URL エンコードする必要があります。」urlencode() "Parameter values" を実行すると、urlencode 関数を削除するとエラーまたは parseError が返されます
  2. 「Host: www.googleapis.com」を「Host: https://www.googleapis.com」に変更しても、「要求された URL /upload/youtube/v3/videos がこのサーバーで見つかりませんでした。それが私たちが知っているすべてです。 ."
  3. これまでのところ、解析エラーが最も持続しているようです
  4. urlencode() を rawurlencode() に変更しましたが、まだ解析エラーが発生します
  5. charset=utf-8;multipart/form-data;application/octet-stream をコンテンツ タイプ ヘッダーに追加しても、解析エラーが発生します
  6. 文字列のコンテンツ タイプが text/plain であることに気付きました。charset=us-ascii Google サーバーが純粋な application/json を期待しているかどうかわからない

どんな助けでも素晴らしいでしょう…</p>

  Array
  (
      [response] => Array
          (
              [0] => {
   "error": {
    "errors": [
     {
      "domain": "global",
      "reason": "parseError",
      "message": "Parse Error"
     }
    ],
    "code": 400,
    "message": "Parse Error"
   }
  }

          )

      [headers] => [
      "POST \/upload\/youtube\/v3\/videos?uploadType=resumable&part=snippet,status HTTP\/1.1",
      "Host: www.googleapis.com",
      "Authorization: Bearer ya29.vAAY5n3SJq3uCG7z4tOhehDxYj9Z7mxFENtD5PKF_dJqFlLqwCktRHTrEJkUgY_NrJD3KMetKeBA_w",
      "Content-Length: 303",
      "Content-Type: application\/json; charset=utf-8",
      "X-Upload-Content-Length: 20121",
      "X-Upload-Content-Type: video\/*"
  ]
      [curl_resource] => Resource id #18
      [video_aray] => {
      "snippet": {
          "title": "test video",
          "description": "testing api",
          "tags": [
              "any",
              "thing"
          ],
          "categoryId": 25
      },
      "status": {
          "privacyStatus": "public",
          "embeddable": true,
          "license": "youtube"
      }
  }
      [json_requestbody] => {
      "snippet": {
          "title": "test video",
          "description": "testing api",
          "tags": [
              "any",
              "thing"
          ],
          "categoryId": 25
      },
      "status": {
          "privacyStatus": "public",
          "embeddable": true,
          "license": "youtube"
      }
  }
      [request_url] => https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status
      [content_type_of_request] => text/plain; charset=us-ascii
      [0] => text/plain; charset=us-ascii
      [1] => text/plain; charset=us-ascii
  )

ソース

 public function startResumableSession()
    {
            $videoResource = array( 'snippet'=>array('title'=>"test video",'description'=>"testing api",
                                    'tags'=>array("any","thing"),'categoryId'=>25),
                                    'status'=>array('privacyStatus'=>"public",'embeddable'=>True,'license'=>"youtube"));
            $requestBody = json_encode($videoResource,JSON_PRETTY_PRINT);
            $headers = array
              (

                "POST /upload/youtube/v3/videos?uploadType=resumable&part=snippet,status HTTP/1.1",
                "Host: www.googleapis.com",
                "Authorization: Bearer ya29.vAAY5n3SJq3uCG7z4tOhehDxYj9Z7mxFENtD5PKF_dJqFlLqwCktRHTrEJkUgY_NrJD3KMetKeBA_w",
                "Content-Length: ".strlen($requestBody),
                "Content-Type: application/json; charset=utf-8",
                "X-Upload-Content-Length: 20121",
                "X-Upload-Content-Type: video/*"
            );
            /* Parameter values in the request URL must be URL-encoded. */
            $url = "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status"; 
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,$url);
            curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
            curl_setopt($ch, CURLOPT_POSTFIELDS,urlencode($requestBody));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
            $result = curl_exec($ch);
            $json = json_decode($result);
            /* Check request body contenttype */
            $finfo = new finfo(FILEINFO_MIME);
            $t1=  $finfo->buffer($requestBody);
            $t2 = $finfo->buffer("test");
            $t3 = $finfo->buffer(utf8_encode("test"));
            /* debug info */
            return array(   'response'=>(array)$result,
                            'headers'=>json_encode($headers,JSON_PRETTY_PRINT),
                            'curl_resource'=>$ch,
                            'video_aray'=>json_encode($videoResource,JSON_PRETTY_PRINT),
                            'json_requestbody'=>$requestBody,
                            'request_url'=>$url,
                            'content_type_of_request'=>$t1,$t2,$t3
                        );
    }    
4

1 に答える 1