Цель моей задачи – создать консольный скрипт, который будет добавлять недавно загруженные видео на моем собственном сайте на мой собственный канал Youtube. Я хочу использовать аутентификацию между серверами, но YoutubeApi не поддерживает этот способ аутентификации.
Поэтому мой вопрос: как я могу загрузить видео на канал YouTube, используя аутентификацию oauth2 с помощью консольного скрипта без какой-либо помощи пользователя? Есть ли способ сделать это без использования устаревшего протокола проверки подлинности ClientLogin?
Да, этот сегмент объясняет, как: https://developers.google.com/youtube/v3/guides/moving_to_oauth#standalone
В принципе, вы проходите один раз и сохраняете токен оттуда.
Если вы даже хотите пропустить это одно время, вы можете получить токен обновления в OAuth2 Playground с уважаемыми областями и подключить его непосредственно к вашему коду с секретностью клиента и идентификатором. Таким образом, вашему сценарию не понадобится веб-браузер.
Ниже приведено видео, объясняющее этот рабочий процесс поэтапно .
После диска с разработчиком YoutubeAPI мы получили такое решение: НЕВОЗМОЖНО СДЕЛАТЬ ВАШЕ СОБСТВЕННОЕ ПРИМЕНЕНИЕ СЕРВЕР-СЕРВЕРОВ БЕЗ ИСПОЛЬЗОВАНИЯ ОТКЛЮЧЕННОГО ** ** Протокол аутентификации ClientLogin Он будет полностью устарел в апреле 2014 года (но до апреля вы можете использовать Это).
Итак, если вы хотите, чтобы ваши пользователи загружали видео в ваш канал YT с вашего сайта, вы должны работать в схеме следующим образом: – ваши пользователи загружают видео на ваш сайт; – вы (или кто-то еще, у кого есть ваши учетные данные учетной записи YT), импортируете видео в ваш канал YT Чтобы решить эту проблему, вы можете легко использовать протокол OAuth2.
вот сценарий для загрузки видео через завиток
# WARNING, this works only with GNU grep, if you run this on a mac replace grep with ggrep after 'brew install grep' # Store our credentials in our home directory with a file called .<script name> my_creds=.`basename $0` client_id='YOURCLIENTID' client_secret='YOURCLIENTSECRET' # really a secret if [ -s $my_creds ]; then # if we already have a token stored, use it . $my_creds time_now=`date +%s` else scope='https://www.googleapis.com/auth/youtube' # Form the request URL auth_url="https://accounts.google.com/o/oauth2/auth?client_id=$client_id&scope=$scope&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob" echo "Please go to:" echo echo "$auth_url" echo echo "after accepting, enter the code you are given:" read auth_code # swap authorization code for access and refresh tokens auth_result=$(curl -s https://accounts.google.com/o/oauth2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d code=$auth_code \ -d client_id=$client_id \ -d client_secret=$client_secret \ -d redirect_uri=urn:ietf:wg:oauth:2.0:oob \ -d grant_type=authorization_code) echo COMPLETE ANSWER WAS: echo $auth_result access_token=$(echo "$auth_result" | \ ggrep -Po '"access_token" *: *.*?[^\\]",' | \ awk -F'"' '{ print $4 }') refresh_token=$(echo "$auth_result" | \ ggrep -Po '"refresh_token" *: *.*?[^\\]",*' | \ awk -F'"' '{ print $4 }') expires_in=$(echo "$auth_result" | \ ggrep -Po '"expires_in" *: *.*' | \ awk -F' ' '{ print $3 }' | awk -F',' '{ print $1}') time_now=`date +%s` expires_at=$((time_now + expires_in - 60)) echo "access_token=$access_token\nrefresh_token=$refresh_token\nexpires_at=$expires_at" > $my_creds fi # if our access token is expired, use the refresh token to get a new one if [ $time_now -gt $expires_at ]; then refresh_result=$(curl -s https://accounts.google.com/o/oauth2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d refresh_token=$refresh_token \ -d client_id=$client_id \ -d client_secret=$client_secret \ -d grant_type=refresh_token) access_token=$(echo "$refresh_result" | \ ggrep -Po '"access_token" *: *.*?[^\\]",' | \ awk -F'"' '{ print $4 }') expires_in=$(echo "$refresh_result" | \ ggrep -Po '"expires_in" *: *.*' | \ awk -F' ' '{ print $3 }' | awk -F',' '{ print $1 }') time_now=`date +%s` expires_at=$(($time_now + $expires_in - 60)) echo "access_token=$access_token\nrefresh_token=$refresh_token\nexpires_at=$expires_at" > $my_creds fi # finally this is the call to upload the video (but I haven't managed to set title and description, you might want to make another call for that) curl https://www.googleapis.com/upload/youtube/v3/videos?part=snippet \ -d part='snippet' \ -d snippet.title='test of a title' \ -d snippet.description='test of video description' \ --data-binary "@./small.mp4" \ -H "Content-Type: application/octet-stream" \ -H "Authorization: Bearer $access_token"
для выполнения этой работы вам понадобится
этот сценарий основан на этом другом вопросе
Кроме того, есть этот проект github, который решает проблему с python …
Я смог загрузить видео на свой канал на YouTube, используя следующий сценарий оболочки.
#!/bin/sh # Upload the given video file to your YouTube channel. cid_base_url="apps.googleusercontent.com" client_id="<YOUR_CLIENT_ID>.$cid_base_url" client_secret="<YOUR_CLIENT_SECRET>" refresh_token="<YOUR_REFRESH_TOKEN>" token_url="https://accounts.google.com/o/oauth2/token" api_base_url="https://www.googleapis.com/upload/youtube/v3" api_url="$api_base_url/videos?uploadType=resumable&part=snippet" access_token=$(curl -H "Content-Type: application/x-www-form-urlencoded" -d refresh_token="$refresh_token" -d client_id="$client_id" -d client_secret="$client_secret" -d grant_type="refresh_token" $token_url|awk -F '"' '/access/{print $4}') auth_header="Authorization: Bearer $access_token" upload_url=$(curl -I -X POST -H "$auth_header" "$api_url"|awk -F ' |\r' '/loc/{print $2}'); curl -v -X POST --data-binary "@$1" -H "$auth_header" "$upload_url"
Обратитесь к предыдущему ответу за то, как получить ваши пользовательские значения переменных.