Я получаю "500 Backend Error" и "400 invalidMetadata" от YouTube-API - PullRequest
0 голосов
/ 07 марта 2019

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

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

500 Backend Error

enter image description here

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

400 invalidMetadata

enter image description here

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

Вот мой код:

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 Ответ

0 голосов
/ 12 июня 2019

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

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

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

...