Я получаю «500 Backend Error» и «400 invalidMetadata» из youtube-api

#php #google-api #google-oauth #youtube-data-api #google-api-php-client

#php #google-api #google-oauth #youtube-data-api #google-api-php-client

Вопрос:

Я использую PHP для вставки / обновления заголовка и описания нашего видео с помощью youtube-api, и у меня возникают некоторые проблемы с этим.

1. Когда я вставляю / обновляю заголовок и описание видео с помощью zh-Hant или zh-Hans, я получаю "500 Backend Error." Однако это работает, когда я меняю zh-Hant и zh-Hans на zh-tw и zh-cn .

Ошибка сервера 500

введите описание изображения здесь

2. Я получаю "400 invalidMetadata" , когда обновляю название видео, используя итальянский (it). Я понятия не имею об этом, потому что все это прекрасно на других языках, и это также прекрасно в описании обновления видео с использованием итальянского.

400 недействительных данных

введите описание изображения здесь

Как я могу исправить эти проблемы?

Вот мой код:

 public function __construct()
{
    $client = new Google_Client();
    $client->setAuthConfig(storage_path('key/youtube_key/client_secret.json'));
    $client->setApplicationName("String System");
    $client->setScopes('https://www.googleapis.com/auth/youtube.force-ssl');
    $client->setAccessType('offline');
    $client->setAccessToken(Cache::get('google_auth_token'));

    $this->client = $client;
}

public function youtubeService($stringKey, $stringValue, $language)
{
    $this->service = new Google_Service_YouTube($this->client);

    $this->stringKey = $stringKey;
    $this->stringValue = $stringValue;
    $this->language = $language;

    $key = explode('_', $this->stringKey);
    if (3 != count($key)) {
        return;
    }

    list($videoName, $videoID, $type) = $key;
    $this->videoName= $videoName;
    $this->videoID = $videoID;

    switch ($type) {
        case 'title':
            $this->updateTitle();
            break;

        case 'description':
            $this->updateDesc();
            break;
    }

    return;
}

private function updateTitle()
{
    // get video list by video ID
    $video = $this->service->videos->listVideos(
        'snippet,localizations',
        ['id' => $this->videoID]
    );
    $videoInfo = $video->items[0];

    // set video title of language
    if (isset($videoInfo->localizations[$this->language])) {
        $videoInfo->localizations[$this->language]->title =
                $this->stringValue;

        // check default language
        if ($this->language === $videoInfo->snippet->defaultLanguage) {
            $videoInfo->snippet->title = $this->stringValue;
        }
    } else {
        $videoInfo->localizations[$this->language] = [
            'title' => $this->stringValue,
            'description' => 'description'
        ];
    }

    try {
        // update video information
        $this->service->videos->update(
            'snippet,localizations',
            $videoInfo
        );
    } catch (Exception $e) {
        // do nothing and continue
    }

    return;
}

private function updateDesc()
{
    // get video list by video ID
    $video = $this->service->videos->listVideos(
        'snippet,localizations',
        ['id' => $this->videoID]
    );
    $videoInfo = $video->items[0];

    // set video description of language
    if (isset($videoInfo->localizations[$this->language])) {
        $videoInfo->localizations[$this->language]->description =
                $this->stringValue;

        // check default language
        if ($this->language === $videoInfo->snippet->defaultLanguage) {
            $videoInfo->snippet->description = $this->stringValue;
        }
    } else {
        $videoInfo->localizations[$this->language] = [
            'title' => 'title',
            'description' => $this->stringValue
        ];
    }

    try {
        // update video information
        $this->service->videos->update(
            'snippet,localizations',
            $videoInfo
        );
    } catch (Exception $e) {
        // do nothing and continue
    }

    return;
}
  

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос и включите свой код, мы не можем помочь вам отладить то, что мы не видим.

2. Я обновляю свой код. Спасибо за ваше напоминание.

3. У кого-нибудь есть какие-нибудь решения, которые могли бы мне помочь?

Ответ №1:

Похоже, что язык, который вы использовали (zh-Hant amp; zh-Hans), на данный момент не поддерживается.

Чтобы проверить, поддерживается ли язык или нет, вы можете использовать i18nLanguages.список API. Вот пример запроса с использованием API explorer.

https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.i18nLanguages.list?part=snippetamp;_h=1amp;

Комментарии:

1. Здравствуйте, спасибо за ваш ответ. Это решает мою первую проблему. Но второе странно, потому что «это» выдает мне ошибку «invalidMetadata». Как я могу решить эту проблему?