2014-11-12 12 views
0

Запуск в parseError, пытающийся выполнить «запуск возобновляемого сеанса». API данных YouTube - возобновляемая загрузка документации.API данных YouTube - возобновляемые загрузки - запуск возобновляемого сеанса - ошибки

полный перечень усилий, ответ и код

  1. Я прочитал на API, Google - «Глобальные ошибки домена» страницы «parseError Сервер API не может разобрать тело запроса.»
  2. Я наблюдал за «YouTube Разработчики Live: Отладка & Работы с ошибками» все еще знает, ключ там
  3. Я прочитал «не стопку потока» для подобных вопросов, но никогда не получить ответ, или ответы на все еще ООН ясно
  4. тестовая учетная запись youtube, которую я хочу загрузить, имеет канал YouTube с видеороликами
  5. Я попробовал API загрузки PHP для клиента, но позже выяснил, что это не возобновляемая загрузка.
  6. Я думал, что возобновляемая upoad будет лучшим вариантом, так что я не разочаровывают пользователей, путем тратить там время, если соединение выпадает ....
  7. Я подножка PHP с Hostgator счета
  8. Я заметил, как, когда я не получил ошибку, она вернет регулярные фрагменты и данные о статусе, а не данные «Шаг 2 - Сохранить возобновляемые URI»
  9. Я использую долгоживущие токены доступа, извлеченные из моей базы данных ... в запросах , у пользователя youtube есть канал с видео до того, как я сохранил токены доступа
  10. Я проверяю токены доступа с помощью tokeninfo?
  11. я заметил изменение "uploadType" на "uploadtype" будет производить "сообщение": «Тип носителя 'приложение/JSON, кодировка = UTF-8'

не поддерживаются типы Правильных СМИ:. [Видео/*, application/octet-stream] ", после этой ошибки путем изменения типа контента на" application/octet-stream "будет возвращен" kind = youtube # video
объект с фрагментом json, статус "не шаг 2 - сохранить возобновляемый URI сеанса, поэтому я изменил ситуацию на «uploadType» и «application/json; charset = utf-8», теперь столкнувшись с такой же ошибкой разбора

  1. Я замечаю в docs «Значения параметров в URL-адресе запроса должны быть закодированы в URL». когда я буду urlencode() «Значения параметров», он вернет ошибки или parseError, когда я удалю функцию urlencode
  2. Даже изменение «Host: www.googleapis.com» на «Host: https://www.googleapis.com» приведет к созданию «Запрошенный URL/upload/youtube/v3/videos не было найдено на этом сервере. Это все, что мы знаем."
  3. ошибка синтаксического анализа, как представляется, наиболее стойких до сих пор
  4. я изменил UrlEncode() для rawurlencode() по-прежнему ошибка разбора
  5. я хотел бы добавить Charset = UTF-8; многослойную/форм-данных; приложения/октет -stream в заголовок типа содержимого, по-прежнему анализировать ошибки
  6. Я замечаю тип контента на строку текстов/равнину; Charset = US-ASCII не уверен, что если сервер Google ожидает, что чистое Приложение/JSon

любая помощь будет большим ...

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 
         ); 
    }  
+0

Да уж запрос работает, но не возвращает ссылку местоположения .... «возобновляемой загрузка Youtube API V3, статус 200, а не возвращать URI, чтобы загрузить файл» Кто-то имело такую ​​же проблему еще в мае ... и вопрос остается без ответа, заставляет вас задаться вопросом, что люди действительно делают на YouTube и Google. Какая трата времени ... винт, я попробую vimeo upload api, по крайней мере, у них есть техническая поддержка ... –

ответ

-1

Легкий ответ - вы делаете это неправильно.

Вы не должны добавлять «POST», «Host:» и «Content-Length:» в заголовки $, потому что они генерируются зависанием (CURLOPT_URL и CURLOPT_POSTFIELDS).

API YouTube работает правильно. Это не их вина.

+0

это не ответ. Прости –