#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
.
2. Я получаю "400 invalidMetadata"
, когда обновляю название видео, используя итальянский (it). Я понятия не имею об этом, потому что все это прекрасно на других языках, и это также прекрасно в описании обновления видео с использованием итальянского.
Как я могу исправить эти проблемы?
Вот мой код:
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.
Комментарии:
1. Здравствуйте, спасибо за ваш ответ. Это решает мою первую проблему. Но второе странно, потому что «это» выдает мне ошибку «invalidMetadata». Как я могу решить эту проблему?